Kort funktions beskrivning:
3 st analoga sensorer s0, s1 & s2.
När s1 är "trigg" lägre än s0 & s2 skall en buzzer pipa, när s1 åker upp till samma nivå som s0 & s2 skall det sluta pipa. Finns även en knapp "b1" som går att använda.
Försöker lösa det men en while loop, funkar inte. en if satts och en goto funkar. Varför?
Kan egentligen inte C är mer en assembler kille men ful kör lite i arduino miljö, hoppas nån kan förklara för mig varför förljande INTE funkar m.a.p. s0,s1 & s2, knappen b1 fungerar som den skall.
Problemet:
Den går in i while loopen men aldrig ut om den är triggad av s1.
Jag har provat att skicka ut s0,s1,s2 på serie monitorn och dom ligger i nivå med varandra när den ligger och vägrar hoppa ur
funkar INTE:
Kod: Markera allt
while ((s1+trigg<s0) &&(s1+trigg<s2) || (digitalRead(b1) == LOW )){
int s0 = analogRead(A0);
delay(10);
s0 = analogRead(A0);
int s1 = analogRead(A1);
delay(10);
s1 = analogRead(A1);
int s2 = analogRead(A2);
delay(10);
s2 = analogRead(A2);//read all analoge values from laser sensors, two reading to get stable results. First reading switches to correct channel, second takes valid reading
Serial.println(s0);
Serial.println(s1);
Serial.println(s2);
Serial.println("BEEPAAAAA!2 ");
}
MEN följande fungerar, den går in och ur som den skall.
(varför lipar jag då, jag har ju ett sätt att lösa det?
Jag har googlat och fått för mig att goto INTE är best practice i C och så vill jag veta för jag kan inte med min okunniga ögon se varför while loopen inte skulle funka!)
Funkar:
Kod: Markera allt
label:
int s0 = analogRead(A0);
delay(10);
s0 = analogRead(A0);
int s1 = analogRead(A1);
delay(10);
s1 = analogRead(A1);
int s2 = analogRead(A2);
delay(10);
s2 = analogRead(A2);
Serial.println("BEEPAAAAA!2 ");
if ((s1+trigg<s0) &&(s1+trigg<s2) || (digitalRead(b1) == LOW )) goto label;