Mamaley » 08 сен 2015, 14:05
Народ ! Есть такая задача, управлять платой релюшек с помощью комповой клавиатуры, а точнее 4мя кнопками, но вот в чем проблема...
Есть код, который управляет релюшками, но только как включатель или выключатель, а проблема в том, что нужно что-бы реле было замкнуто только пока зажата клавиша на компе, а при отпускании реле должно выключаться !
К сожалению я полный нуб в программировании и буду очень признателен за простой ответ, а если бы кто-то код дал, то я вааще расцелую !)))
Вот код для простого вкл., выкл оной кнопкой ....
#define ledPin 13
bool state = 0;
void setup()
{
Serial.begin(9600);
pinMode (ledPin, OUTPUT);
}
void loop()
{
while(Serial.available())
{
char val = Serial.read();
if (val == 'd') state = !state;
if(state)
{
Serial.println("ON");
digitalWrite(ledPin, HIGH);
}
else
{
Serial.println("OFF");
digitalWrite(ledPin, LOW);
}
}
}
Angel71 » 08 сен 2015, 16:07
в уарт отсылается не одна, а две команды - включить, выключить. хоть примерно так корявенько
- Код: Выделить всё • Развернуть
while(Serial.available())
{
char val = Serial.read();
if (val == 'a')
{
Serial.println("ON");
digitalWrite(ledPin, HIGH);
}
if (val == 'b')
{
Serial.println("OFF");
digitalWrite(ledPin, LOW);
}
}
а на компьютере отслеживаете изменения. как, это к своей гадалке, всё зависит от языка и кучи всего прочего зависит. можно использовать события на подобии "нажата кнопка", onkeypressed, onkeychanged и т.д. или как то там сами ручками проверяете, хоть так
если (состояние кнопки такой == нажата и переменная != нажата) {отправить в уарт "a"; переменная = "нажата"};
если (состояние кнопки такой != нажата и переменная == нажата) {отправить в уарт "b"; переменная = "не нажата"};
Mamaley » 08 сен 2015, 16:38
Спасибо, но увы для меня ето дремучий лес
Angel71 » 08 сен 2015, 19:19
тогда или не беритесь программировать или учитесь. а вместо повторной констатации, если хотите, что бы кто-то за вас написал, так по делу пишите.
Mamaley » 08 сен 2015, 21:15
Вот ... добрые люди кое что дали , но все-равно не работает !:(
- Код: Выделить всё • Развернуть
#define ledPin 13
unsigned long time;
char val;
int flag = 1;
void setup(){
Serial.begin(9600);
}
void loop(){
val=0;
if (Serial.available() > 0) {
val = Serial.read();
if (val == 'd' && flag == 1) {
digitalWrite(ledPin, HIGH); // включаем, если пришло 'd'
time = millis(); // старт отсчета
flag = 0; // разрешаем проверку
}
}
if(flag == 0){
if(time+1000 < millis()){ // ждем 1 сек
flag = 1;
// если по истечении 1 сек переменная val пустая, значит ничего не приходит
if (val == 0) digitalWrite(ledPin, LOW);
}
}
}
dccharacter » 09 сен 2015, 19:13
Ты объясни толком, что ты не стороне компа делаешь. Я подозреваю, что что-то очень смешное
Типа сидишь в терминале, нажимаешь кнопку, видишь улетевший на тот конец символ, отпускаешь кнопку, не видишь никакой реакции и расстраиваешься.