Передача нажатия кнопки (с программным удержанием нажатия) по 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
}
}