arduino + nextion
- Войдите на сайт для отправки комментариев
Вс, 20/11/2016 - 17:38
Почему после передачи с экрана на ардуину значения переменной (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
Надо нормальную процедуру приёма написать. Если следом идут ещё данные, то писать в конец или другой буфер. А потом уже разбирать что пришло.
Почему после передачи с экрана на ардуину значения переменной (2 значение массива) , ардуина начинает постоянно читать сериал?
Потому, что у Вас программа так написана. Вы проверяете что там что-то пришло, а после этого, уже без всякий проверок читаете 16 байтов. Есть там что-то или нет, Вам пофигу, Вы читаете :)
Так я проверяю если что то пришло
А нужно мне только второе число из всей посылки, которое записываю в переменную s
Сама посылка от дисплея имеет вид
Ну, проверяете, а потом в строках 13-17 читаете 16 байтов! При этом Вы понятия не имеете пришли они или нет, да и посылка Ваша всего 8 байтов.
Вопрос решился проверкой получен ли 0х71, если получен то читаем следующий и сохраняем в переменную. Далее читаем все остальные чтобы очистить буфер сериала.
ну и выложили бы пример рабочий, в друг кто тоже будет голову ломать над ткой же проблемой
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); } }