ขอคำแนะนำหน่อยครับพอดีกำลังทำรถวิ่งตามเส้น มีเงื่อนไขอยู่ว่าให้มันจอดตามจุดที่กำหนด เช่น มีจุดอยู่4 จุด จุดที่1คือจุดเริ่มต้น(และเมือทำงานเสร็จให้กลับมาจุดเดิม) โดยจะแบ่งเป็น3โปรแกรม โปรแกรมที่ 1 ให้รถไปจอดที่จุดที่ 1 2 3 และมีการหน่วงเวลาในจอดแต่ละจุด และกลับมาจุดเริ่มต้นรอรับคำสั่งต่อไป ส่วนโปรแกรมที่ 2 และ 3 ก็เช่นกันแต่ จะเปลี่ยนจุดจอดไปไม่ซ้ำกัน
แต่ผมยังติดอยุ่ที่ว่ามันยังทำงาน วนๆ อยู่ใน while โดยไม่ออกมารอรับคำสั่งต่อไปเมื่อมันวิ่งมาถึงจุดเริ่มต้น อีกครั้ง
คำสั่งตามนี้เลยครับ
void menuUsed(MenuUseEvent used){
lcd.setCursor(0,0);
lcd.print("Working ");
while ((used.item.getName()) == "NodeStop A B C")
{
value = digitalRead(SensorStop);
if (HIGH == value) {
digitalWrite(ledPin,LOW );
TrackNodeABC();
} else {
digitalWrite(ledPin,HIGH );
Break();
}
}
while ((used.item.getName()) == "NodeStop B C")
{
value = digitalRead(SensorStop);
if (HIGH == value) {
digitalWrite(ledPin,LOW );
TrackNodeBC();
} else {
digitalWrite(ledPin,HIGH );
Break();
}
}
while ((used.item.getName()) == "NodeStop A B")
{
value = digitalRead(SensorStop);
if ( value == HIGH) {
//for (counter = 0; counter > 5; counter++)
digitalWrite(ledPin, LOW );
TrackNodeAB();
if (counter == 4)
break;
} else {
digitalWrite(ledPin,HIGH );
Break();
}
}
lcd.setCursor(0,1);
lcd.print(used.item.getName());
delay(300); //delay to allow message reading
lcd.setCursor(0,0);
lcd.print("Select Program");
menu.toRoot(); //back to Main
}
การออกจากคำสั่ง while ใน Arduino
แต่ผมยังติดอยุ่ที่ว่ามันยังทำงาน วนๆ อยู่ใน while โดยไม่ออกมารอรับคำสั่งต่อไปเมื่อมันวิ่งมาถึงจุดเริ่มต้น อีกครั้ง
คำสั่งตามนี้เลยครับ
void menuUsed(MenuUseEvent used){
lcd.setCursor(0,0);
lcd.print("Working ");
while ((used.item.getName()) == "NodeStop A B C")
{
value = digitalRead(SensorStop);
if (HIGH == value) {
digitalWrite(ledPin,LOW );
TrackNodeABC();
} else {
digitalWrite(ledPin,HIGH );
Break();
}
}
while ((used.item.getName()) == "NodeStop B C")
{
value = digitalRead(SensorStop);
if (HIGH == value) {
digitalWrite(ledPin,LOW );
TrackNodeBC();
} else {
digitalWrite(ledPin,HIGH );
Break();
}
}
while ((used.item.getName()) == "NodeStop A B")
{
value = digitalRead(SensorStop);
if ( value == HIGH) {
//for (counter = 0; counter > 5; counter++)
digitalWrite(ledPin, LOW );
TrackNodeAB();
if (counter == 4)
break;
} else {
digitalWrite(ledPin,HIGH );
Break();
}
}
lcd.setCursor(0,1);
lcd.print(used.item.getName());
delay(300); //delay to allow message reading
lcd.setCursor(0,0);
lcd.print("Select Program");
menu.toRoot(); //back to Main
}