首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino if语句始终为真

Arduino if语句始终为真
EN

Stack Overflow用户
提问于 2018-09-23 09:49:53
回答 1查看 254关注 0票数 0

我正在为我的Arduino rc汽车项目创建一个带有L293D电机屏蔽和蓝牙模块的arduino mega程序。

代码语言:javascript
复制
    #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语句中,if语句即使在变量'intra =0‘的情况下也会被执行,因此,电机在特定端口总是在旋转。

此外,当我使用时,rx1、tx1或rx2、tx2或rx3、tx3都不会响应

代码语言:javascript
复制
Serial1.begin(9600);
Serial1.read();

或者诸如此类的……它仍然从rx0,tx0,即引脚1和0读取。

EN

回答 1

Stack Overflow用户

发布于 2018-09-23 10:00:31

您的代码中有行(在更改前的原始问题中)

代码语言:javascript
复制
if(intra = 1) {

这将始终采用真正的分支。这个错误是一个很容易遗漏的C代码问题。您想要的正确表达式是:

代码语言:javascript
复制
if(intra == 1) {

请注意two等号。一个等号是赋值。两个等号是相等的检验。

防止这种难以察觉的失败的一个简单方法是养成键入以下内容的习惯:

代码语言:javascript
复制
if(1 == intra) {

如果有一天你错误地键入:

代码语言:javascript
复制
if(1 = intra) {

你会得到一个编译器错误。

检测此类错误的第二种方法是打开编译器警告。选择菜单项File > Preferences。在关于中间向下的对话框中有一个下拉框“编译器警告”。选择“全部”。

编译器将警告您关于该行的信息:

代码语言:javascript
复制
_yourfilename_.ino:41:11: warning: suggest parentheses around assignment 
used as truth value [-Wparentheses]
if(intra = 1) {
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52462306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档