Получение Serial по нажатию кнопки

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

КОД НЕ РАБОТАЕТ. Помогите, пожалуйста. 

Moderator : пожалуйста, вставьте код правильно (возможно, новым сообщением в тему), 



как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

 

 

svm
Offline
Зарегистрирован: 06.11.2016

Если вы не считываете данные, то они заполняют буфер сериала. Неважно нажали вы кнопку или нет, если данные пришли - считайте их. И если кнопку нажали, то используйте эти данные. Если не нажимали, то просто считайте и не используйте. Иначе в буфере будет все что пришло между нажатиями. Или он переполнится. Еще вариант - просто очищайте буфер если кнопка не нажималась. Если правильно вставите код, разговор будет более предметным.

b707
Offline
Зарегистрирован: 26.05.2017

вставьте код по правилам форума

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

красная иконка - вставить. Так и сделал. Просто потом хотел дописать текст, а формат шрифта не сумел поменять.

void loop()
{
  ReadButton();

  if (Serial.available() > 0) // на порт приходят пакеты, формируемые при нажатии МНОЮ кнопок на внещнем Мастер устройстве
  {
    if (Down == 1) // Но записать в массив нужно только тот пакет,
      //  который придет ПОСЛЕ выполнения ReadButton() на Слейв устройстве
    {
      dat[i] = Serial.read();
      i++;
    }
    else
    {
      i = 0; // подготовили для нового пакета
      Down = 0;
    }
  }
}


void ReadButton()
{
  int But  = digitalRead(1);
  if ((But == 0) && (lastBut == 1))  // только при нажатии
  {
    lastBut = ! lastBut;
    Down = 1;
    i = 0;
  }
  if (But == 1) lastBut = 1;
}
sadman41
Онлайн
Зарегистрирован: 19.10.2016

Считывать надо всегда, а вот в массив писать только по (Down == 1)

svm
Offline
Зарегистрирован: 06.11.2016

После 14 строки просто считывайте сериал.

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Всем спасибо. Действительно, глупейшая ошибка...