我正在为我的Arduino rc汽车项目创建一个带有L293D电机屏蔽和蓝牙模块的arduino mega程序。
#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都不会响应
Serial1.begin(9600);
Serial1.read();或者诸如此类的……它仍然从rx0,tx0,即引脚1和0读取。
发布于 2018-09-23 10:00:31
您的代码中有行(在更改前的原始问题中)
if(intra = 1) {这将始终采用真正的分支。这个错误是一个很容易遗漏的C代码问题。您想要的正确表达式是:
if(intra == 1) {请注意two等号。一个等号是赋值。两个等号是相等的检验。
防止这种难以察觉的失败的一个简单方法是养成键入以下内容的习惯:
if(1 == intra) {如果有一天你错误地键入:
if(1 = intra) {你会得到一个编译器错误。
检测此类错误的第二种方法是打开编译器警告。选择菜单项File > Preferences。在关于中间向下的对话框中有一个下拉框“编译器警告”。选择“全部”。
编译器将警告您关于该行的信息:
_yourfilename_.ino:41:11: warning: suggest parentheses around assignment
used as truth value [-Wparentheses]
if(intra = 1) {https://stackoverflow.com/questions/52462306
复制相似问题