Передача нажатия кнопки (с программным удержанием нажатия) по serial
- Войдите на сайт для отправки комментариев
Вс, 21/12/2014 - 19:25
Здравствуйте. Имеется нефиксируемая кнопка и ардуина uno. Если возможно, пожалуйста разьясните, как можно передать фиксируемое значение кнопки (0 или 1) по Serial,
Что необходимо получить: (Пока кнопка не нажата, в сериал отправляются 0, как только нажали и отпустили, в сериал начинают отправляться 1. Нули начинают поступать в порт, как только повторно нажали кнопку.)
Имеется написаный код для считывания состояния кнопки и отправки напрямую в порт, а так-же код для выполнения одного действия по нажатию кнопки, но совместить эти коды пока не хватает ума:
int Knopka1 = 10; //кнопка1 подключена к 10 цифровому контакту void setup() { Serial.begin(115200); // скорость передачи данных в мониторе порта = 115200. // Инициализируем цифровые входы/выходы с 3 по 11 в режиме входов. pinMode(Knopka1, INPUT); // назначить выводу порт ввода digitalWrite(Knopka1, HIGH); // активируем подтягивающий резистор 20ком к питанию. } void loop() { digitalWrite (Pin2, HIGH); // активация передачи данных по rs485 Serial.print('E'); // метка канала Е Serial.println(!digitalRead(Knopka1)); // считывание состояния 10 пина и отправка инвертированного значения в сериал Serial.println("------------------END------------------"); //конец передачи. delay(10);
---------------------------------------
int flag=0; void setup() { pinMode(13, OUTPUT); } void loop() { if(digitalRead(14)==HIGH&&flag==0)//если кнопка нажата // и перемення flag равна 0 , то ... { digitalWrite(13,!digitalRead(13)); flag=1; //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие // плюс защита от "дребезга" 100% } if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата //и переменная flag равна - 1 ,то ... { flag=0;//обнуляем переменную flag } }