2015-04-18 1 views
0

У меня есть Arduino код, который делает такие задачи, как это:Комбинированные петли не работает в Arduino

while (a=='A') 
{ 
    //do the task A 
} 

while (a=='B') 
{ 
    //do the task B 
} 

Эти петли работать правильно, когда они работают отдельно. Но проблема возникает, когда я пытаюсь объединить обе петли, т.е.

void loop() 
{ 
    while (a=='A') 
    { 
    //do the task A 
    } 

    while (a=='B') 
    { 
    //do the task B 
    } 
} 

Ниже приведен код в подробных деталях:

void loop()     
{ 
    ////// admin 
    Serial.println("A or B"); 
    delay(500); 
    char a = userinput(); 
    delay(500); 
    while(a== 'A'){ 
    Serial.println("Type Your Starting ID Number..."); 
    while(1){ 
     while (Serial.available()==false); 
     char e = Serial.read(); 
     if(isdigit(e)==false) break; 
     startid = (startid*10)+(e - 48); 
    } 
    if(startid<=endid){ 
     for(pageid=startid; pageid<=endid; pageid++) 
     { 
     Serial.print("Your Biometric ID # is "); 
     Serial.println(pageid); 
     delay(2000); 
     fingerenrollment(pageid); 
     delay(2000); 
     if(pageid == endid){ 
      Serial.println("......Memory Is Full....");  
      while(1); 
     } 
     } 
    } 
    else{ 
     Serial.println("Wrong Entry.......Please Reset Your Device....."); 
     while(1); 
    } 
    } 
    ////// user 
    while(a=='B'){ 
    lcd.print("WELCOME TO iPoll"); 
    delay(2000); 
    lcd.clear(); 
    lcd.print("Place Your Thumb"); 
    delay(2000); 
    lcd.clear(); 
    tempid = '\0'; 
    Serial.println("Place your Thumb For Authentication"); 
    delay(500); 
    while(true){ 
     ID = fingerauthentication(); 
     delay(500); 
     if(tempid != '\0') break; 
    } 
    delay(100); 
    resp = userinput(); 
    delay(100); 
    lcd.clear(); 
    datatrans(ID, resp); 
    } 
} 

Если вам нужна дополнительная помощь, я здесь. Просто комментарий.

ответ

0

Вы, кажется, застряли в бесконечном цикле. Попробуйте изменить while(a=='A') и while(a=='B') на if (a == 'A') и if (a == 'B'). Метод void loop() в Arduino автоматически действует как бесконечный цикл while, зацикливая код внутри него навсегда.

0

while (a == 'A') цикл никогда не заканчивается, потому что вы никогда не меняете значение a. Вам нужно немного a = something; где-то в вашем коде, или сделайте то, что сказал @ Dan12-16. То же самое относится к 'B'.

И пару советов, которые помогут сделать код более удобным для чтения (на мой взгляд). Вместо использования if (condition == false) вы можете использовать if (!condition). Выберите while (1) или while (true), но не смешивайте их (я бы выбрал второй).