regelkring

Arduino specifieke Software
Berichten: 12
Geregistreerd: 22 Dec 2015, 12:51

regelkring

Berichtdoor pedro » 22 Dec 2015, 13:21

Ik ben een beginner mbt programmeren. Ik heb een regelkring opgezet waarbij via 2 potmeters analoge waardes (op A0 en A1)worden gegenereerd. Via 2 uitgangen moet er een motortje aangestuurd worden tot de analoge waardes weer in evenwicht zijn (met een kleine neutrale zone). Nu een simulatie dmv 2 leds (pin 12 en 13)
Als val2 groter is dan val1 werkt het systeem prima. Ledje gaat aan en blijft aan tot de waardes weer in balans zijn. Echter, als Val1 groter is dan knippert het bijbehorende ledje slechts. Via de seriele monitor zie ik dat de betreffende uitgang uitgezet wordt zodra de if instructie is uitgevoerd, terwijl de toestand van de analoge waardes ongewijzigd blijft. Kan iemand me verklaren hoe dit komt?
De sketch:
cpp code
//regelkring p1

const int led1=13;// sluiten
const int led2=12;// openen

int val1=0;
int val2=0;

void setup()
{
Serial.begin(9600);
pinMode(led1,OUTPUT);// sluiten
pinMode(led2,OUTPUT);// openen

}

void loop(){
val1 =analogRead(0); //gewenste positie
val2 =analogRead(1); // gerealiseerde positie
Serial.println("gewenste positie=");
Serial.println(val1);
Serial.println("gerealiseerde positie=");Serial.println (val2);
delay(2000);

if (val2 < val1-2){
digitalWrite(led2, HIGH);//raam gaat open
digitalWrite(led1,LOW);
Serial.println("openen");
delay(1 );
}
else {
digitalWrite(led2,LOW);
digitalWrite(led1,LOW);
}
if (val2 > val1+2){
digitalWrite(led2,LOW);
digitalWrite(led1, HIGH); //raam gaat dicht, werkt ok
Serial.println("sluiten");
}
else {
digitalWrite(led2,LOW);
digitalWrite (led1,LOW);
}
}

Advertisement

Gebruikers-avatar
Berichten: 270
Geregistreerd: 30 Dec 2012, 11:42

Re: regelkring

Berichtdoor Rudi » 22 Dec 2015, 20:09

Zelfs al voldoet de conditie val2 < val1-2 toch wordt daarna gecheckt of val2 > val1+2 en omdat aan deze voorwaarde niet voldaan is (want val1 is groter dan val2) zet je de ledpinnen weer laag.
Daardoor licht led1 maar even op.
Het tweede else statement is er te veel aan.
Deze laatse regels verwijderen en het zal wel werken:
Code: Alles selecteren
else {
digitalWrite(led2,LOW);
digitalWrite (led1,LOW);
}
Arduinows!
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: regelkring

Berichtdoor shooter » 22 Dec 2015, 21:34

e lopen even door je programma:
de eerste if werkt prima, stel dat val2 < val1+2 dan is de eerste if waar dus dat gaat prima, zo te zien.
dan nu de tweede IF
die is dus niet waar!!!! dus wordt de else uitgevoerd en dat is je fout.
leuk he.


te laat, dus het wordt gourmetten.
trouwens vindt ik dat de eerste else ook weg moet.
paul deelen
shooter@home.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: regelkring

Berichtdoor shooter » 22 Dec 2015, 21:37

je moet nog wel even vertellen wat er moet gebeuren als de val1==val2 ofwel dicht in de buurt.

zoek maar eens naar het voorbeeld knob.
paul deelen
shooter@home.nl

Berichten: 12
Geregistreerd: 22 Dec 2015, 12:51

Re: regelkring

Berichtdoor pedro » 23 Dec 2015, 19:57

Hartelijk dank voor jullie heldere respons. Logisch dat het bij mij niet goed werkte.
Inderdaad moet ik ook nog een zekere neutrale zone inbouwen. Waar vind ik het voorbeeld met ''de knob''?

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: regelkring

Berichtdoor shooter » 24 Dec 2015, 10:21

onder examples in je programma en op arduino.cc
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 23 gasten