Arduino goto语句求解

2017-04-151.8万
AI 快速预览详细 收起
本文讨论了如何在Arduino程序中使用goto语句解决小车避障后无法继续前进的问题。通过具体的报错现象和解决方法,帮助用户修复程序,让小车恢复正常运行。文章提供了详细的代码示例和解释,适合初学者和有一定基础的Arduino开发者。
最近编了一个小车的程序
利用碰撞传感器实现避障
但是小车后退转弯了以后就不能向前走了
只能不停的转圈圈
所以我想在最后的if语句上加上goto语句但是不知道怎么用
求大神帮忙让小车能再动起来!!!
程序如下:

#include <IRremote.h>
int RECV_PIN = 10;
int potpin = 0;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setRomeoMotor(int motorId, int speed)
{
  int speedPin, directionPin;
  if (motorId == 1)
  {
    speedPin = 5;
    directionPin = 4;
  }
  else
  {
    if (motorId == 2)
    {
      speedPin = 6;
      directionPin = 7;
    }
    else
    {
      return;
    }
  }


  if (speed == 0)
  {
    digitalWrite(speedPin, LOW);
  }
  if (speed > 0)
  {
    digitalWrite(directionPin, HIGH);
    analogWrite(speedPin, speed);
  }
  else
  {
    digitalWrite(directionPin, LOW);
    analogWrite(speedPin, -speed);
  }
}

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode( 11, INPUT);
  pinMode( 12, INPUT);
  pinMode( 4, OUTPUT);
  pinMode( 5, OUTPUT);
  pinMode( 6, OUTPUT);
  pinMode( 7, OUTPUT);
  digitalWrite(4, LOW);

  digitalWrite(5, LOW);

  digitalWrite(6, LOW);

  digitalWrite(7, LOW);

}

void loop()
{
  int sensorValue = analogRead(potpin);
  int outputValue = map(sensorValue, 0, 1023, 50, 150);
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();
    if (results.value == 0xFD00FF) {
      setRomeoMotor(1, -outputValue);
      setRomeoMotor(2, -outputValue);
    }
    if  (results.value == 0xFD40BF) {
      setRomeoMotor(1, 0);
      setRomeoMotor(2, 0);
    }
  }
  if (!( digitalRead(11) ))
  {
    setRomeoMotor(1, 50);
    setRomeoMotor(2, 50);
    delay( 1000 );
    setRomeoMotor(1, -30);
    setRomeoMotor(2, -100);
    delay( 400 );
  }
  if (!( digitalRead(12) ))
  {
    setRomeoMotor(1, 50);
    setRomeoMotor(2, 50);
    delay( 1000 );
    setRomeoMotor(1, -100);
    setRomeoMotor(2, -30);
    delay( 400 );
  }
}


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
nicho
nicho

后退之后需要复位setRomeoMotor(),可以通过设置标志位(相当于开关)来控制运动
Understand
Understand
作者
回复nicho
那应该如何编程啊?
nicho
nicho
一般情况下不要用goto,容易破坏程序的逻辑
- 没有更多了 -