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电路中的goto功能,该功能试图创建一个;“聪明的服务员”;_Arduino_Goto - Fatal编程技术网

试图避免我的Arduino电路中的goto功能,该功能试图创建一个;“聪明的服务员”;

试图避免我的Arduino电路中的goto功能,该功能试图创建一个;“聪明的服务员”;,arduino,goto,Arduino,Goto,基本上,我正在制作一个Arduino Uno项目,该项目涉及创建一个智能服务生: 在基本的Arduino底盘上有一个玻璃支架。传感器将: 4个红外传感器,每侧一个 2个线路传感器,一个左侧和一个右侧 光传感器,一个位于杯托上 它还将有: 2个伺服电机,左右各一个 1个LED显示杯子状态 它将: 沿着一条黑线移动,这条黑线将被贴在酒花的地板上 它会感知四周的人,当它感知到近身时会暂停 如果感应到玻璃被提起,将无限期停止 如果感觉不到玻璃的移动,将在15秒内再次启动,或者在放下玻璃后再次启

基本上,我正在制作一个Arduino Uno项目,该项目涉及创建一个智能服务生:

  • 在基本的Arduino底盘上有一个玻璃支架。传感器将:
    • 4个红外传感器,每侧一个
    • 2个线路传感器,一个左侧和一个右侧
    • 光传感器,一个位于杯托上
  • 它还将有:
    • 2个伺服电机,左右各一个
    • 1个LED显示杯子状态
  • 它将:
    • 沿着一条黑线移动,这条黑线将被贴在酒花的地板上
    • 它会感知四周的人,当它感知到近身时会暂停
    • 如果感应到玻璃被提起,将无限期停止
    • 如果感觉不到玻璃的移动,将在15秒内再次启动,或者在放下玻璃后再次启动
    • 玻璃放下后,LED将从绿色变为红色
    • 机器人将继续移动,忽略所有障碍物,直到到达加油站
    • 将在加油站停止,加油站将更换玻璃并按下Arduino硬复位按钮
  • 我的代码是:

    #include <Servo.h>
    int redLED = 5;
    int yellowLED = 6;
    int greenLED = 7;
    int cup1 = 0;
    int picked = 1;
    int lineright = 0;
    int lineleft = 0;
    int sensorright = 0;
    int sensorleft = 0;
    int sensorfront = 0;
    int sensorback = 0;
    int sensorpinright = 1;
    int sensorpinleft = 2;
    int sensorpinfront = 3;
    int sensorpinback = 4;
    Servo servoright;
    Servo servoleft;
    void setup ()
    {
      servoright.attach (9);
      servoleft.attach (10);
      pinMode (redLED, OUTPUT);
      pinMode (greenLED, OUTPUT);
      pinMode (greenLED, OUTPUT);
    }
    void loop()
    {
       sensorright = digitalRead (sensorpinright);
       sensorleft = digitalRead (sensorpinleft);
       sensorfront = digitalRead (sensorpinfront);
       sensorback = digitalRead (sensorpinback);
       lineleft = analogRead (1);
       lineright = analogRead (2);
       cup1 = analogRead (3);
     if (sensorright < 0 && sensorleft < 0 && sensorfront < 0 && sensorback < 0)
      {
        digitalWrite (led1, GREEN);
        startfresh:
        if (lineleft < 800)
        {
          servoleft.write (180);
          servoright.write (180);
        }
        else
        {
          if (lineright < 800)
          {
            servoright.write (0);
            servoleft.write (0);
          }
          else
          {
            servoright.write (0);
            servoleft.write (180);
          }
        }
      }
      else
      {
        for (int i=0;i<5;i++)
        {
          servoright.write (93);
          servoleft.write (93);
          if (picked < 1)
          {
            while (cup1<500)
            {
              digitalWrite (yellowLED, HIGH);
              picked = 1;
            }
          }
          else
          {
            digitalWrite (yellowLED, LOW);
            digitalWrite (redLED, HIGH);
            goto startfresh;
          }
          delay (2000)
        }
      }
    }
    
    #包括
    int redLED=5;
    int黄色发光二极管=6;
    int绿色发光=7;
    int cup1=0;
    int=1;
    int lineright=0;
    int lineleft=0;
    int-sensorright=0;
    int-sensorleft=0;
    int-sensorfront=0;
    int sensorback=0;
    int sensorpinright=1;
    int sensorpinleft=2;
    int sensorpinfront=3;
    int-sensorpinback=4;
    伺服权;
    伺服左;
    无效设置()
    {
    附件(9);
    伺服左。连接(10);
    引脚模式(红色LED,输出);
    引脚模式(绿色LED,输出);
    引脚模式(绿色LED,输出);
    }
    void循环()
    {
    sensorright=数字读取(sensorpinright);
    sensorleft=数字读取(sensorpinleft);
    sensorfront=数字读取(sensorpinfront);
    sensorback=数字读取(sensorpinback);
    lineleft=模拟读取(1);
    lineright=analogRead(2);
    cup1=模拟读数(3);
    if(传感器右<0和传感器左<0和传感器前<0和传感器后<0)
    {
    数码写入(led1,绿色);
    开始刷新:
    如果(左行<800)
    {
    servoleft.write(180);
    servoright.write(180);
    }
    其他的
    {
    如果(lineright<800)
    {
    servoright.write(0);
    servoleft.write(0);
    }
    其他的
    {
    servoright.write(0);
    servoleft.write(180);
    }
    }
    }
    其他的
    {
    
    对于(inti=0;i将startfresh作为函数

     if (sensorright < 0 && sensorleft < 0 && sensorfront < 0 && sensorback < 0)
      {
        digitalWrite (led1, GREEN);
        startfresh();
      }
      else
      {
        for (int i=0;i<5;i++)
        {
          servoright.write (93);
          servoleft.write (93);
          if (picked < 1)
          {
            while (cup1<500)
            {
              digitalWrite (yellowLED, HIGH);
              picked = 1;
            }
            delay (2000);
          }
          else
          {
            digitalWrite (yellowLED, LOW);
            digitalWrite (redLED, HIGH);
            startfresh();
          }
        }
      }
    }
    
    void startfresh() {
      if (lineleft < 800)
      {
        servoleft.write (180);
        servoright.write (180);
      }
      else
      {
        if (lineright < 800)
        {
          servoright.write (0);
          servoleft.write (0);
        }
        else
        {
          servoright.write (0);
          servoleft.write (180);
        }
      }
    }
    
    if(传感器右<0&&sensorleft<0&&sensorfront<0&&sensorback<0)
    {
    数码写入(led1,绿色);
    startfresh();
    }
    其他的
    {
    
    对于(int i=0;i什么goto函数?2个函数的限制是多少?您可以定义任意多个函数;没有限制。