Не работает проверка условия if ( Serial.read() == 1)

Делаю код для управления двумя моторами одновременно. Суть в том, что когда в serial monitor вводится 1, вращаются в одну сторону, а когда 0 - в другую. Но проверка условия if (incomingByte == 1) не производится. В чем моя ошибка? Может я не туда ввожу 1?
Код:

byte ena = 3;
byte in1 = 5;
byte in2 = 4;
byte enb = 9;
byte in3 = 6;
byte in4 = 7;
int incomingByte = 0;
void setup() {
pinMode( ena, OUTPUT );
pinMode( in1, OUTPUT );
pinMode( in2, OUTPUT );
pinMode( in3, OUTPUT );
pinMode( in4, OUTPUT );
pinMode( enb, OUTPUT );
Serial.begin(9600);
}

void loop() {
analogWrite (ena, 255);
analogWrite (enb, 255);
incomingByte = Serial.read();
if (incomingByte == 1) {
  //clockwise
  digitalWrite (in1, HIGH);
  digitalWrite (in2, LOW);
  digitalWrite (in3, HIGH);
  digitalWrite (in4, LOW);}
else {
  //counterclockwise
  digitalWrite (in1, LOW);
  digitalWrite (in2, HIGH);
  digitalWrite (in3, LOW);
  digitalWrite (in4, HIGH);}
}

Вы вводите цифру, число, символ или ascii-код?

А можно узнать, каким именно способом в serial monitor вводятся служебные коды?

Может для начала вставить после этого строку:
Serial.println(incomingByte);
и посмотреть что считалось ?

А если так?

if (incomingByte == '1') {

У него там int заявлен …

косяк конечно

incomingByte как int?
Посмотрел в код - и правда.
Вот и верь после этого людям…

1 лайк

Верить никому нельзя, мне можно …

byte incomingByte = 0;
void setup() {
  pinMode( ena, OUTPUT );
  pinMode( in1, OUTPUT );
  pinMode( in2, OUTPUT );
  pinMode( in3, OUTPUT );
  pinMode( in4, OUTPUT );
  pinMode( enb, OUTPUT );
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
}

void loop() {
  analogWrite (ena, 255);
  analogWrite (enb, 255);
  incomingByte = Serial.read();
  Serial.println((char)incomingByte);

  if (incomingByte == '1') {
    //clockwise
    digitalWrite (in1, HIGH);
    digitalWrite (in2, LOW);
    digitalWrite (in3, HIGH);
    digitalWrite (in4, LOW);
  }
  else if(incomingByte == '2'){
    //counterclockwise
    digitalWrite (in1, LOW);
    digitalWrite (in2, HIGH);
    digitalWrite (in3, LOW);
    digitalWrite (in4, HIGH);
  } else {
    /*
    digitalWrite (in1, LOW);
    digitalWrite (in2, LOW);
    digitalWrite (in3, LOW);
    digitalWrite (in4, LOW);  
    */
  }
  delay(500);
}

Это вы зря человека интом попрекаете. Read() возвращает int16_t

ну чё ТС, работает?

Реально глаза открыли :frowning:
Как теперь жить…все массивы размерность байт в моих поделках.

Да так же жить, как и раньше.

int16_t result = Serial.read();
If (0x00 > result) { return; }
byteArray[pos++] = result;

А если через available() проверка идёт - вообще ничего менять не нужно. Автоматом закастуется к unit8_t, а -1 при этом не вылезет никогда.