Передать через COM порт несколько байт на Arduino UNO

vovken1997
vovken1997 аватар
Offline
Зарегистрирован: 09.07.2013

Всем привет!

Пишу программу на ардуино:

void setup()
{
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop()
{
if (Serial.available()>0) 
{
    if (Serial.read()==243)
    {
      if (Serial.read()==5)
      {
        digitalWrite(13, HIGH);
        delay(1000);
        digitalWrite(13, LOW);
      }
    }
}

}

Для зажигания светодиода надо прочитать два последовательных байта. Но когда я отправляю при помощи COM Port ToolKit 4.0 байты, то светодиод не загорается, а если написать на проверку один байт, а не два, то загорается.

 

Вот и вопрос, как прочитать несколько последовательных байт???

maksim
Offline
Зарегистрирован: 12.02.2012

А поиском воспользоваться для начала? http://arduino.ru/forum/programmirovanie/peredacha-dannykh-po-com-portu

Либо добавляете задержку перед или после чтения первого байта

if(Serial.available() > 0) 
{
  delay(2);
  if(Serial.read() == 243)
  {

либо ждете пока прийдут два байта:

if(Serial.available() > 1) 
{
  if(Serial.read() == 243)
  {

 

vovken1997
vovken1997 аватар
Offline
Зарегистрирован: 09.07.2013

Огромное СПАСИБО!

Спрашивал на другом форуме по программированию, начили младшими и старшими байтами мозги забивать, а про задержку я и не додумался. Странно, когда на делфи писал под комп, чтоб тот читал из порта, то ни какой задержки не делал. 

Для чего нужна задержка???

toc
Offline
Зарегистрирован: 09.02.2013

vovken1997,

ардуина иногда работает слишком быстро.

Gremline
Offline
Зарегистрирован: 31.01.2018

Да просто Ваш код начинает сравнивать байты с эталонами после приема первого байта - а второй-то еще не принят!

Вот это ожидание:

if (Serial.available()>0)

Просто нужно делать это после приема двух байтов:

if (Serial.available()>1)