2013-02-19 29 views
0

基本上我的Arduino電路跳轉功能,我想提出一個Arduino歐諾項目,包括創建一個聰明的服務員說:試圖避免在試圖建立一個「智能服務員」

  1. 將在有玻璃架基本的Arduino機箱的頂部。這些傳感器將是:
    • 4個紅外傳感器,每邊一個
    • 2線傳感器,一個左和一個右
    • 光傳感器,一個杯架
  2. 它也將有:
    • 2臺伺服電機,一個左和右
    • 1 LED示出杯狀態
  3. 它將:
    • 移動沿着一條黑線,將在HOP的地板被錄音
    • 會感覺在各方面的人,並暫停時,感覺接近機構
    • 將無限期地停止,如果它檢測玻璃已被擡起
    • 如果它不感應玻璃的移動,將在15秒內重新開始或當玻璃放下時再次開始
    • 玻璃放下後,LED將從綠色變爲紅色
    • 機器人將繼續m奧雅納,無視一切障礙,直到它到達加油站
    • 將停在加油站,其中填充物將取代玻璃,然後按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) 
    } 
    } 
} 

我想用我的代碼做的是在最後避免goto函數。但是,我無法找到任何方法來重新構造這個僅限於2個函數的限制。在這種情況下,goto功能看起來很好,但我不確定。有沒有簡單的方法來重組呢?

+0

轉到什麼功能? 2個功能有什麼限制? 您可以根據需要定義許多功能;沒有限制。 – 2013-02-19 17:53:09

回答

0

製作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); 
    } 
    } 
}