Я работаю над проектом, в котором Arduino должен делать разные вещи, основываясь на разных персонажах (a
, b
и т. Д.), Получаемых через Serial.Я получил его, чтобы ответить, но я столкнулся с логической ошибкой.Когда я ввожу a
, он делает так, как требуется, и выполняет процедуру мягкого сброса (заземление контакта сброса через резистор для удаленного сброса).Однако, когда я делаю b
(или любой другой из 30-ти других символов, ни один из которых не идентичен), он выполняет команду a
.Он должен, исходя из моей логики, не делать код a
начиная с incomingByte != 'a'
, но он делает = b
.Почему работает a
, а не что-нибудь еще?Спасибо за любую помощь.
PS Я знаю, что есть другие способы сделать это, которые, вероятно, более «правильные», но я бы хотел придерживаться этой логики if / then / elseif, если это возможно.
Я приложил часть кода ниже, есть намного больше, поэтому я знаю, что там может быть пропущен }
где-то в конце, но он есть в коде.
void loop() {
char incomingByte;
//wait for commands
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
bool alarmState = false;
//variable for storing status of the alarm system for use during unsilence controls, to ensure operator cannot
//unsilence a non-alarmed system and cause audible signals to activate prematurely
//use incomingByte as the command byte in ain if/then/elseif
if (incomingByte = "a") {
//code to soft-reset
//output reset confirmation
tone(buzzer, 600, 500);
Serial.println("System reset in progress...");
delay(100);
digitalWrite(powerLED, LOW);
delay(500);
digitalWrite(powerLED, HIGH);
delay(500);
digitalWrite(powerLED, LOW);
delay(500);
digitalWrite(powerLED, HIGH);
delay(500);
digitalWrite(powerLED, LOW);
delay(500);
digitalWrite(powerLED, HIGH);
delay(500);
digitalWrite(powerLED, LOW);
delay(250);
digitalWrite(resetPin, LOW);
digitalWrite(troubleLED, HIGH);
delay(100);
digitalWrite(resetPin, HIGH); //this is needed to complete the reset
}
else if (incomingByte = "b") {
//code to silence audible signals
if (alarmState = true) {
digitalWrite(NAC1, LOW);
digitalWrite(silenceLED, HIGH);
digitalWrite(silence1, HIGH);
Serial.println("Audible signals silenced");
}
else if (alarmState = false) {
Serial.println("The system is not in alarm and the NAC state could not be modified. If you need to manually override NAC states without system alarm, use the System menu.");
}
}
else if (incomingByte = "c") {
//code to unsilence audible signals
if (alarmState = true) {
digitalWrite(NAC1, HIGH);
digitalWrite(silenceLED, LOW);
digitalWrite(silence1, LOW);
Serial.println("Audible signals unsilenced");
}
else if (alarmState = false) {
Serial.println("The system is not in alarm and the NAC state could not be modified. If you need to manually override NAC states without system alarm, use the System menu.");
}