Como pular para fora do loop? no programa abaixo, como usar goto ou qualquer outro programa relacionado a Jump

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

Comentários

  • Formate seu código corretamente. Não posso ' não seguir o que está acontecendo com o que está lá.
  • Sim, parte desagradável de código espaguete (muito bem dito).
  • E depois de usar o formatador C ++ , ' é bastante óbvio porque pode ' t estar funcionando
  • Apenas para a moeda x1, x2, x3, fault = 0; é suposto definir essas variáveis para zero? Tenho más notícias para você.

Resposta

Você deseja criar uma função separada nsr e use-o em vez de ir para.

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

Resposta

Em vez de usar

goto nsr 

Use um booleano para pular as partes que você não deseja executar. (Quase) nunca é uma boa ideia usar goto.

Devido ao desalinhamento de {e} não sei exatamente o que você deseja executar.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *