arduino + nextion

Alex_405
Offline
Зарегистрирован: 20.11.2016

Почему после передачи с экрана на ардуину значения переменной (2 значение массива) , ардуина начинает постоянно читать сериал?

int s = 0;
  void setup() {
    // put your setup code here, to run once:
    
   Serial.begin(9600);
   
  }
  
  void loop() {
    // put your main code here, to run repeatedly:
int array[16];
  while (Serial.available() > 0) {
    for (int i = 1 ; i < 16; i++) {
      array[i] =  Serial.read();
      Serial.println(array[i]);
      delay(20);
    }
    array[16] = '\0';
    s = array[2];
    
     
  }
      
Serial.print("n1.val=");
Serial.print(s*2);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);


  //delay(500); 
  }

 

 

данные с порта

n1.val=510яяяn1.val=510яяяn1.val=510яяяn1.val=510яяяn1.val=510яяяn1.val=510яяяn1.val=510яяя0
255
255
255
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
n1.val=510яяяn1.val=510яяяn1.val=510яяяn1.val=510яяяn1.val=510яяяn1.val=510яяяn1.val=510яяя0
255
255
255
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1

 

alex_r61
Offline
Зарегистрирован: 20.06.2012

Надо нормальную процедуру приёма написать. Если следом идут ещё данные, то писать в конец или другой буфер. А потом уже разбирать что пришло.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Alex_405 пишет:

Почему после передачи с экрана на ардуину значения переменной (2 значение массива) , ардуина начинает постоянно читать сериал?

Потому, что у Вас программа так написана. Вы проверяете что там что-то пришло, а после этого, уже без всякий проверок читаете 16 байтов. Есть там что-то или нет, Вам пофигу, Вы читаете :)

Alex_405
Offline
Зарегистрирован: 20.11.2016

Так я проверяю если что то пришло

 while (Serial.available() > 0)

А нужно мне только второе число из всей посылки, которое записываю в переменную s

s = array[2];

Сама посылка от дисплея имеет вид

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, проверяете, а потом в строках 13-17 читаете 16 байтов! При этом Вы понятия не имеете пришли они или нет, да и посылка Ваша всего 8 байтов.

Alex_405
Offline
Зарегистрирован: 20.11.2016

Вопрос решился проверкой получен ли 0х71, если получен то читаем следующий и сохраняем в переменную. Далее читаем все остальные чтобы очистить буфер сериала. 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

ну и выложили бы пример рабочий, в друг кто тоже будет голову ломать над ткой же проблемой

Alex_405
Offline
Зарегистрирован: 20.11.2016
int array[16];
     while (Serial.available() > 0)
     {
       for (int i = 1 ; i < 16; i++) 
          {
           array[i] =  Serial.read();
           if (array[i] == 113)
             {
              array[i+1] =  Serial.read();
              delay(20);
              s = array[i+1];
              delay(20);
             }
           delay(20);
           }
     }