我正在为arduino rc汽车项目的RX引脚上的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);
}
所以问题基本上是即使变量'intra = 0”也要执行的if语句。因此,特定端口的电动机始终在旋转。
此外,当我使用
时,rx1,tx1或rx2,tx2或rx3,tx3都没有响应Serial1.begin(9600);
Serial1.read();
等等。 它仍然从rx0,tx0读取,即引脚1和0。
答案 0 :(得分:0)
您的代码中有这一行(更改之前是原始问题)
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) {