Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 无线电头RH_ASK.h干扰对电机的模拟写入_Arduino_Radio_Wireless - Fatal编程技术网

Arduino 无线电头RH_ASK.h干扰对电机的模拟写入

Arduino 无线电头RH_ASK.h干扰对电机的模拟写入,arduino,radio,wireless,Arduino,Radio,Wireless,我们试图用RF-433发射器和接收器远程控制elegoo机器人车()。该车有4个直流电机,由L298N控制器控制,电机由2个18650 4200mAh 3.7V锂离子电池供电,该电池也为Arduino Uno供电。当我们尝试在没有RF-433的情况下通过模拟写入用PWM控制汽车时,它工作正常,但当使用RF时 汽车一侧的马达不工作。我们已将问题缩小到代码的特定部分: if(!Radio.init()){ Serial.println(“初始化失败”); } 如果包含此部件,则会出现问题。但是,当

我们试图用RF-433发射器和接收器远程控制elegoo机器人车()。该车有4个直流电机,由L298N控制器控制,电机由2个18650 4200mAh 3.7V锂离子电池供电,该电池也为Arduino Uno供电。当我们尝试在没有RF-433的情况下通过模拟写入用PWM控制汽车时,它工作正常,但当使用RF时 汽车一侧的马达不工作。我们已将问题缩小到代码的特定部分:

if(!Radio.init()){
Serial.println(“初始化失败”);
}
如果包含此部件,则会出现问题。但是,当评论出来,汽车运行良好。这就是为什么我们认为RH_ASK库和arduino代码之间存在干扰。代码的其余部分在这里

#包括
#include//未实际使用,但需要编译
RH_ASK无线电(2000,0);
//L298n电机控制器的针脚连接
intin1=9;
int in2=8;
int-in3=7;
int-in4=6;
/*定义通道启用输出引脚*/
int=10;
int-ENB=5;
/*定义正向函数*/
无效{
(ENA,130);
模拟写入(ENB,130);
数字写入(in1,低);
数字写入(in2,高);
数字写入(in3,低电平);
数字写入(in4,高);
序列号。打印号(“转发”);
}
//右转功能
无效{
(ENA,130);
模拟写入(ENB,130);
数字写入(in1,高);
数字写入(in2,低);
数字写入(in3,低电平);
数字写入(in4,高);
序列号。打印号(“右”);
}
//停车功能
void_mFreeze(){
模拟写入(ENA,低);
模拟写入(ENB,低电平);
}
无效设置(){
Serial.begin(9600);//仅调试
pinMode(in1,输出);
pinMode(in2,输出);
引脚模式(in3,输出);
pinMode(in4,输出);
pinMode(ENA,输出);
pinMode(ENB,输出);
如果(!Radio.init()){//初始化射频通信
Serial.println(“初始化失败”);
}
}
void循环(){
_mForward();
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];//将传输的消息读入数组
uint8_t buflen=sizeof(buf);
//如果我们收到信息,请停车
while(Radio.recv(buf和buflen)){
_mFreeze();
}
}

另一个程序运行传输并在按下按钮时发送消息。

您的问题的答案是计时器。为了产生用于控制电机的PWM信号,Arduino使用硬件定时器。Arduino Uno中有三个定时器,每个定时器负责2个PWM输出(总共6个)。该主题在Arduino网站上有详细描述:

然而,RH_ASK库也使用计时器。从:

RH_ASK驱动程序使用定时器驱动的中断,每比特周期生成8个中断。RH_ASK在类似Arduino的平台上接管计时器。默认情况下,它接管计时器1。通过在RH_ASK.cpp顶部附近启用define RH_ASK_ARDUINO_use_TIMER2,可以强制它使用计时器2

如果程序的两个不同部分试图控制计时器,就会出现问题。定时器1负责在引脚9和10上生成PWM信号。因此,为了解决您的问题,您可以将ENA引脚连接到任何其他可用的模拟输出引脚(5、6、3、11)。

if_mFreeze();按照预期工作,我想你不需要radio.init。你能找到Radio.init()并在这里共享吗?