Задать вопрос
@ajlhimik

Абсурдное выполнение условных операторов 3 раза в Arduino nanov3, как исправить?

5b202045c4af9916535399.png
первая строка выходит при старте, 2-я когда ввожу цыфру, а остальные 3 откуда? по логике программы вообше только 1 раз должно входит в if по тому что я ровняю ети 2 переменных (xBase i xBase0) и во всех случаях так происходит когда использую Serial и Software Serial (через блутус) тожэ самое, и тожэ строго 3 раза( 2 раза лишние)

код вот
const int baza = 5;
const int col = 6;
const int emi = A5;
int xBaza = 0;
int xCol = 255;
//int xEmi = 0;
int xBaza0 = 0;

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

void loop() {
  analogWrite(col, xCol);
  xBaza = Serial.read();
  if(xBaza != xBaza0) {
    xBaza0 = xBaza;
    analogWrite(baza, xBaza);
    writes();
  }
}

void writes(void) {
  Serial.print(analogRead(emi));
  Serial.write("  baza: ");
  Serial.print(xBaza);
  Serial.write("  colector: ");
  Serial.print(xCol);
  Serial.write('\n');
}
  • Вопрос задан
  • 217 просмотров
Подписаться 1 Простой 11 комментариев
Ответ пользователя Алексей Макареня К ответам на вопрос (3)
makarenya
@makarenya
программист
https://www.arduino.cc/en/Serial/Read
А точнее абзац

Returns
the first byte of incoming serial data available (or -1 if no data is available) - int

метод read() возвращает прочитанные данные, если таковые есть и -1 - если данных нет.

Исправьте код на следующий

void loop() {
  analogWrite(col, xCol);
  xBaza = Serial.read();
  if(xBaza >= 0 && xBaza != xBaza0) {
    xBaza0 = xBaza;
    analogWrite(baza, xBaza);
    writes();
  }
}
Ответ написан
Комментировать