Arduino if утверждение всегда верно
Я создаю программу для моего мега Arduino с моторным щитом L293D и модулем Bluetooth на контакте rx для моего автомобильного проекта arduino rc.
#include <AFMotor.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11); // RX, TX
AF_DCMotor motor1(3);
AF_DCMotor motor2(4);
char intra = '0';
void setup()
{
// set the data rate for the SoftwareSerial port
motor1.setSpeed(200);
mySerial.begin(9600);
}
void loop() // run over and over
{
if(mySerial.available()>0) {
intra = mySerial.read();
mySerial.write(intra);
}
if(intra == '1'){
up();
}
}
void up(){
motor1.run(FORWARD);
}
Таким образом, проблема в основном заключается в том, что оператор if выполняется, даже если переменная "intra = 0". Таким образом, в результате двигатель на определенном порту всегда вращается.
Кроме того, rx1,tx1 или rx2,tx2 или rx3,tx3 ни один из них не отвечает, когда я использую
Serial1.begin(9600);
Serial1.read();
или так далее.... он все еще читает из rx0,tx0, т.е. выводов 1 и 0.
1 ответ
Ваш код имеет строку (в оригинальном вопросе до того, как он был изменен)
if(intra = 1) {
Это всегда займет истинную ветвь. Эту ошибку легко упустить из-за проблемы с кодом C. Правильное выражение, которое вы хотели:
if(intra == 1) {
Обратите внимание на два знака равенства. Один знак равенства - это присвоение. Два знака равенства - это тест на равенство.
Простой способ предотвратить этот трудно видимый сбой состоит в том, чтобы привыкнуть печатать так:
if(1 == intra) {
Если один день по ошибке вы вводите:
if(1 = intra) {
вы получите ошибку компилятора.
Второй метод обнаружения этого типа ошибки - включить предупреждения компилятора. Выберите пункт меню Файл> Настройки. В диалоге о середине внизу есть выпадающий список "Предупреждения компилятора". Выберите все".
Компилятор предупредит вас об этой строке:
_yourfilename_.ino:41:11: warning: suggest parentheses around assignment
used as truth value [-Wparentheses]
if(intra = 1) {