Hur hoppar jag utanför slingan? i programmet nedan hur man använder goto eller något annat hopprelaterat program

const int analogPin1 = A1; const int analogPin2 = A2; const int analogPin3 = A3; const int ledPin = 13; const int ledPin2 = 7; const int thresold = 400; unsigned int x1, x2, x3, fault = 0; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void Config() { delay(1000); Serial.print("ATE0r"); Response(); Serial.print("ATr"); Response(); Serial.print("AT+CMGF=1r"); Response(); Serial.print("AT+CNMI=1,2,0,0,0r"); Response(); } void Response() { int count = 0; Serial.println(); while (1) { if (Serial.available()) { char data = Serial.read(); if (data == "K") { Serial.println("OK"); break; } if (data == "R") { Serial.println("GSM Not Working"); break; } } count++; delay(10); if (count == 1000) { Serial.println("GSM not Found"); break; } } } void loop() { int analogValue1 = analogRead(analogPin1); int analogValue2 = analogRead(analogPin2); int analogValue3 = analogRead(analogPin3); if (analogValue1 < thresold) { x1 = 1; fault = x1; } if (analogValue2 < thresold) { x2 = x1 + 3; fault = x2; } if (analogValue3 < thresold) { x3 = x1 + x2 + 5; fault = x3; } switch (fault) { case 1: digitalWrite(ledPin, HIGH); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("PHASE 1 HAS GONE"); delay(1000); Serial.write(0x1A); delay(1000); goto nsr; break; case 3: digitalWrite(ledPin, HIGH); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("2 HAS GONE"); delay(1000); Serial.write(0x1A); delay(1000); goto nsr; break; case 4: digitalWrite(ledPin, HIGH); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("1 AND 2 HAS GONE"); delay(1000); Serial.write(0x1A); delay(1000); goto nsr; break; case 5: digitalWrite(ledPin, HIGH); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("3 HAS GONE"); delay(1000); Serial.write(0x1A); delay(1000); Serial.print("AT+CNMI=2,2,0,0,0"); goto nsr; break; case 6: digitalWrite(ledPin, HIGH); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("1 AND 3 HAS GONE"); delay(1000); Serial.write(0x1A); delay(1000); goto nsr; break; case 8: digitalWrite(ledPin, HIGH); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("2 AND 3 HAS GONE"); delay(1000); Serial.write(0x1A); delay(1000); goto nsr; break; case 10: digitalWrite(ledPin, HIGH); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("ALL 3 HAS GONE"); delay(1000); Serial.write(0x1A); delay(1000); goto nsr; break; default: x1, x2, x3, fault = 0; digitalWrite(ledPin, LOW); break; } x1, x2, x3, fault = 0; digitalWrite(ledPin, LOW); do { int analogValue1 = analogRead(analogPin1); int analogValue2 = analogRead(analogPin2); int analogValue3 = analogRead(analogPin3); } while (analogValue1 < thresold || analogValue2 < thresold || analogValue3 < thresold); } do { int analogValue1 = analogRead(analogPin1); int analogValue2 = analogRead(analogPin2); int analogValue3 = analogRead(analogPin3); } while ((analogValue1 > th) && (analogValue2 > th) && (analogValue3 > th)); } nsr : if ((analogValue1 > th) && (analogValue2 > th) && (analogValue3 > th)) { digitalWrite(ledPin, HIGH); Serial.begin(9600); Serial.print("\r"); delay(1000); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("ALL 3 Phase Restored"); delay(1000); Serial.write(0x1A); delay(1000); Serial.print("\r"); delay(1000); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("ALL 3 Phase Restored"); delay(1000); Serial.write(0x1A); delay(1000); do { int analogValue1 = analogRead(analogPin1); int analogValue2 = analogRead(analogPin2); int analogValue3 = analogRead(analogPin3); } while ((analogValue1 > th) && (analogValue2 > th) && (analogValue3 > th)); } 

Kommentarer

  • Formatera koden ordentligt. Jag kan ' inte följa vad som går med vad där.
  • Ja, otäck bit spagettikod (riktigt snyggt sagt).
  • Och efter att ha använt C ++ formater är det ' ganska uppenbart varför det kan ' t fungerar
  • Bara för nyfikenheten x1, x2, x3, fault = 0; ska sätta dessa variabler till noll? Jag har dåliga nyheter för dig.

Svar

Du vill skapa en separat funktion nsr och använd det istället för att gå.

void nsr(void){ if ((analogValue1 > th) && (analogValue2 > th) && (analogValue3 > th)) { digitalWrite(ledPin, HIGH); Serial.begin(9600); Serial.print("\r"); delay(1000); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("ALL 3 Phase Restored"); delay(1000); Serial.write(0x1A); delay(1000); Serial.print("\r"); delay(1000); Serial.print("AT+CMGF=1\r"); delay(1000); Serial.print("AT+CMGS=\"+919\"\r"); delay(1000); Serial.print("ALL 3 Phase Restored"); delay(1000); Serial.write(0x1A); delay(1000); do { int analogValue1 = analogRead(analogPin1); int analogValue2 = analogRead(analogPin2); int analogValue3 = analogRead(analogPin3); } while ((analogValue1 > th) && (analogValue2 > th) && (analogValue3 > th)); } } 

Svar

I stället för att använda

goto nsr 

Använd en boolean för att hoppa över delar som du inte vill utföra. Det är (nästan) aldrig en bra idé att använda goto.

På grund av felinställningen av {och} vet jag inte vad du exakt vill utföra.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *