For my program I have to sense 3 inputs (A1, A2 and A3 in Arduino). If any one or two or more signals become zero (low), it goes in different case as per below program.
However, I want to reset the Arduino when all signals become high again. Therefore I have to again write another program loop2().
So how can I exit from one loop and get into another loop. If I have to use goto, please tell me how to use it?
The Arduino program given below.
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=\"+919512700997\"\r");
delay(1000);
Serial.print("PHASE 1 HAS GONE");
delay(1000);
Serial.write(0x1A);
delay(1000);
loop2();
break;
case 3:
digitalWrite(ledPin, HIGH);
Serial.print("AT+CMGF=1\r");
delay(1000);
Serial.print("AT+CMGS=\"+919512700997\"\r");
delay(1000);
Serial.print("2 HAS GONE");
delay(1000);
Serial.write(0x1A);
delay(1000);
break;
case 4:
digitalWrite(ledPin, HIGH);
Serial.print("AT+CMGF=1\r");
delay(1000);
Serial.print("AT+CMGS=\"+919512700997\"\r");
delay(1000);
Serial.print("1 AND 2 HAS GONE");
delay(1000);
Serial.write(0x1A);
delay(1000);
break;
case 5:
digitalWrite(ledPin, HIGH);
Serial.print("AT+CMGF=1\r");
delay(1000);
Serial.print("AT+CMGS=\"+919512700997\"\r");
delay(1000);
Serial.print("3 HAS GONE");
delay(1000);
Serial.write(0x1A);
delay(1000);
Serial.print("AT+CNMI=2,2,0,0,0");
break;
case 6:
digitalWrite(ledPin, HIGH);
Serial.print("AT+CMGF=1\r");
delay(1000);
Serial.print("AT+CMGS=\"+919512700997\"\r");
delay(1000);
Serial.print("1 AND 3 HAS GONE");
delay(1000);
Serial.write(0x1A);
delay(1000);
break;
case 8:
digitalWrite(ledPin, HIGH);
Serial.print("AT+CMGF=1\r");
delay(1000);
Serial.print("AT+CMGS=\"+919512700997\"\r");
delay(1000);
Serial.print("2 AND 3 HAS GONE");
delay(1000);
Serial.write(0x1A);
delay(1000);
break;
case 10:
digitalWrite(ledPin, HIGH);
Serial.print("AT+CMGF=1\r");
delay(1000);
Serial.print("AT+CMGS=\"+919512700997\"\r");
delay(1000);
Serial.print("ALL 3 HAS GONE");
delay(1000);
Serial.write(0x1A);
delay(1000);
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));
}
void loop2()
{
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=\"+919512700997\"\r");
delay(1000);
Serial.print("Nikunjsinh2");
delay(1000);
Serial.write(0x1A);
delay(1000);
Serial.print("\r");
delay(1000);
Serial.print("AT+CMGF=1\r");
delay(1000);
Serial.print("AT+CMGS=\"+919712554766\"\r");
delay(1000);
Serial.print("Nikunjsinh2");
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));
}
}
x1,x2,x3,fault=0;doesn't do what you think it does.do { int analogValue1 = ...}you are creating new variables that only exist inside the loop body. Remove theints.gotoin arduino to hop around labels. serious/team programmers might cringe, but it works.