根据编写的代码,发布运行带有H桥和Arduino的电机的Arduino代码
所以我有一个问题,当我用超声波传感器运行我的代码,用电机运行h桥时,一个电机始终旋转,另一个每6秒旋转2秒,但我不知道为什么。有什么帮助吗 代码如下:根据编写的代码,发布运行带有H桥和Arduino的电机的Arduino代码,arduino,arduino-uno,motordriver,arduino-ultra-sonic,Arduino,Arduino Uno,Motordriver,Arduino Ultra Sonic,所以我有一个问题,当我用超声波传感器运行我的代码,用电机运行h桥时,一个电机始终旋转,另一个每6秒旋转2秒,但我不知道为什么。有什么帮助吗 代码如下: int in1 = 2; int in2 = 3; int in3 = 4; int in4 = 5; int in5 = 6; int in6 = 7; int trig = 8; int echol = 9; int echor = 12; int echof = 11; long df, tf, dr, tr, dl, tl; void
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
int in5 = 6;
int in6 = 7;
int trig = 8;
int echol = 9;
int echor = 12;
int echof = 11;
long df, tf, dr, tr, dl, tl;
void setup() {
Serial.begin(9600);
}
void loop() {
pinMode (in1, OUTPUT);
pinMode (in2, OUTPUT);
pinMode (in3, OUTPUT);
pinMode (in4, OUTPUT);
pinMode (in5, OUTPUT);
pinMode (in6, OUTPUT);
pinMode (trig, OUTPUT);
pinMode (echol, INPUT);
pinMode (echor, INPUT);
pinMode (echof, INPUT);
forward();
digitalWrite (trig, HIGH);
delay (0.01);
tf = pulseIn (echof, HIGH);
digitalWrite (trig, LOW);
df = tf * 0.03156;
if (df < 1.5){
digitalWrite (trig, HIGH);
delay (0.01);
tr = pulseIn (echor, HIGH);
tl = pulseIn (echol, HIGH);
digitalWrite (trig, LOW);
dr = tr * 0.03156;
dl = tl * 0.03156;
if (dr > dl) {
right();
delay (5000);
forward();
}
else {
left();
delay (5000);
forward();
}
}
}
void forward(){
digitalWrite (in1, HIGH);
digitalWrite (in2, LOW);
digitalWrite (in3, HIGH);
digitalWrite (in4, LOW);
digitalWrite (in5, HIGH);
digitalWrite (in6, LOW);
}
void backward(){
digitalWrite (in1, LOW);
digitalWrite (in2, HIGH);
digitalWrite (in3, LOW);
digitalWrite (in4, HIGH);
digitalWrite (in5, LOW);
digitalWrite (in6, HIGH);
}
void left(){
digitalWrite (in1, LOW);
digitalWrite (in2, LOW);
digitalWrite (in3, HIGH);
digitalWrite (in4, LOW);
digitalWrite (in5, HIGH);
digitalWrite (in6, LOW);
}
void right(){
digitalWrite (in1, HIGH);
digitalWrite (in2, LOW);
digitalWrite (in3, LOW);
digitalWrite (in4, LOW);
digitalWrite (in5, HIGH);
digitalWrite (in6, LOW);
}
intin1=2;
int in2=3;
int in3=4;
int-in4=5;
int-in5=6;
int-in6=7;
int-trig=8;
int-echol=9;
int-echor=12;
int-echof=11;
长df、tf、dr、tr、dl、tl;
无效设置(){
Serial.begin(9600);
}
void循环(){
pinMode(in1,输出);
pinMode(in2,输出);
引脚模式(in3,输出);
pinMode(in4,输出);
引脚模式(in5,输出);
pinMode(in6,输出);
pinMode(触发、输出);
pinMode(回声,输入);
pinMode(回声器,输入);
pinMode(echof,输入);
前进();
数字写入(trig,高);
延迟(0.01);
tf=脉冲星(回声,高);
数字写入(触发器,低电平);
df=tf*0.03156;
如果(df<1.5){
数字写入(trig,高);
延迟(0.01);
tr=脉冲星(回声,高);
tl=脉冲星(回声,高);
数字写入(触发器,低电平);
dr=tr*0.03156;
dl=tl*0.03156;
如果(dr>dl){
对();
延迟(5000);
前进();
}
否则{
左();
延迟(5000);
前进();
}
}
}
作废远期汇票(){
数字写入(in1,高);
数字写入(in2,低);
数字写入(in3,高);
数字写入(in4,低电平);
数字写入(in5,高);
数字写入(in6,低电平);
}
向后作废(){
数字写入(in1,低);
数字写入(in2,高);
数字写入(in3,低电平);
数字写入(in4,高);
数字写入(in5,低电平);
数字写入(in6,高);
}
左空(){
数字写入(in1,低);
数字写入(in2,低);
数字写入(in3,高);
数字写入(in4,低电平);
数字写入(in5,高);
数字写入(in6,低电平);
}
无效权利(){
数字写入(in1,高);
数字写入(in2,低);
数字写入(in3,低电平);
数字写入(in4,低电平);
数字写入(in5,高);
数字写入(in6,低电平);
}
不确定所有错误,但将长的
乘以tl*0.03156并将值存储在长的
中可能并不是您想要的。您应该使用浮点值来包含此类计算的结果。首先,您应该在setup()中移动pin设置,无需在每个循环上重新初始化pin i/o设置
void Setup()
{
Serial.begin(9600);
pinMode (in1, OUTPUT);
pinMode (in2, OUTPUT);
pinMode (in3, OUTPUT);
pinMode (in4, OUTPUT);
pinMode (in5, OUTPUT);
pinMode (in6, OUTPUT);
pinMode (trig, OUTPUT);
pinMode (echol, INPUT);
pinMode (echor, INPUT);
pinMode (echof, INPUT);
}
根据我对H桥模块的了解,每个电机通常有3个输入,一次只能打开其中一个。我找不到任何与你的代码相关的影响。。。。这是一个约束,因此您应该围绕它组织代码。这将使它更易于阅读和调试。Arduino上没有调试器,因此组织代码确实很有帮助。如果您需要更多帮助,其他人肯定会更容易理解您的代码
void MotorA(int dir)
{
// dir = 0 = STOP, +1 = Forward, -1 = Reverse
digitalWrite(in1, dir > 0);
digitalWrite(in2, dir == 0); // You gave no details on the module
digitalWrite(in3, dir < 0); // you have. the actual logic may differ...
}
void MotorB(int dir)
{
// dir = 0 = STOP, +1 = Forward, -1 = Reverse
digitalWrite(in4, dir > 0);
digitalWrite(in5, dir == 0);
digitalWrite(in6, dir < 0);
}
void Stop()
{
MotorA(0);
MotorB(0);
}
void Forward()
{
MotorA(+1);
MotorB(+1);
}
void Reverse()
{
MotorA(-1);
MotorB(-1);
}
void Left()
{
MotorA(+1);
MotorB(-1);
}
void Right()
{
MotorA(-1);
MotorB(+1);
}
您使用的是什么H桥模块?
void Loop()
{
Forward()
delay(5000);
Stop()
delay(1000);
Reverse();
delay(1000);
// ---
}