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
根据编写的代码,发布运行带有H桥和Arduino的电机的Arduino代码_Arduino_Arduino Uno_Motordriver_Arduino Ultra Sonic - Fatal编程技术网

根据编写的代码,发布运行带有H桥和Arduino的电机的Arduino代码

根据编写的代码,发布运行带有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

所以我有一个问题,当我用超声波传感器运行我的代码,用电机运行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 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);
 // ---
}