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