Arduino if утверждение всегда верно - PullRequest
0 голосов
/ 23 сентября 2018

Я создаю программу для моего мегапикселя Arduino с L293D Motor shield и bluetooth Module at rx pin для моего автомобильного проекта 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 Ответ

0 голосов
/ 23 сентября 2018

В вашем коде есть строка (в исходном вопросе до того, как она была изменена)

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) {
...