blijft hangen in een stap

IDE gerelateerde berichten
Berichten: 1
Geregistreerd: 08 Jan 2020, 15:09

blijft hangen in een stap

Berichtdoor rob23 » 09 Jan 2020, 20:54

Beste leden,

Ik ben al enige tijde bezig met het maken van een programma om een kraan aan te sturen. Ik heb dit in een switch case geprogrammeerd en nu loop ik tegen een probleem aan:
de switch case blijft hangen in stap 1 terwijl ik aangeef wanneer sensor1 hoog is de motor moet stoppen en naar stap 2 moet gaan. hieronder ziet u een klein stukje van het programma. Ik hoop dat iemand mij hierbij wilt helpen, alvast bedankt.

int microswitch1 = 2; // microswitch links
int microswitch2 = 3; // microswitch rechts
int sensor3 = 4; // sensor grijper boven
int sensor4 = 5; // sensor grijper onder
int cilinder_uitschuiven = 6; // cilinder uitschuiven
int cilinder_inschuiven = 7; // cilinder inschuiven
int motor1_Starten = 8; // motor 1 starten loopkat
int motor1_Linksom = 9; // loopkat naar links
int motor1_Rechtsom = 10; // loopkat naar rechts
int motor2_Starten = 11; // motor 2 starten grijper omhoog/omlaag
int motor2_Linksom = 12; // grijper omlaag
int motor2_Rechtsom = 13; // grijper omhoog

int volgende_stap = 0; // variable to move through the program

void setup() {
Serial.begin(9600); // initialize serial communication:
pinMode(microswitch1, INPUT_PULLUP); // bepalen of het input of output is
pinMode(microswitch2, INPUT_PULLUP); // bepalen of het input of output is
pinMode(sensor3, INPUT_PULLUP); // bepalen of het input of output is
pinMode(sensor4, INPUT_PULLUP); // bepalen of het input of output is

pinMode(motor1_Starten, OUTPUT); // bepalen of het input of output is
pinMode(motor1_Linksom, OUTPUT); // bepalen of het input of output is
pinMode(motor1_Rechtsom, OUTPUT); // bepalen of het input of output is
pinMode(motor2_Starten, OUTPUT); // bepalen of het input of output is
pinMode(motor2_Linksom, OUTPUT); // bepalen of het input of output is
pinMode(motor2_Rechtsom, OUTPUT); // bepalen of het input of output is
microswitch1 = LOW;

}

void loop() {

{
volgende_stap = 1; // ga naar stap 1
}

switch (volgende_stap) {
case 1:
delay(2000); // korte vertraging om zo de stand in de seriële monitor te lezen.
Serial.println("Grijper omlaag"); // deze regel beschrijft wat de case uitvoert in de seriële monitor.
analogWrite(motor2_Starten, 255); // snelheid motor grijper omlaag 100%
digitalWrite (motor2_Linksom, HIGH); // pin high motor gaat linksom
digitalWrite (motor2_Rechtsom, LOW); // pin low
{
if (digitalRead (sensor4) == HIGH) { // als sensor 4 hoog is, grijper staat onder

analogWrite (motor2_Starten, 0); // motor uitzetten
digitalWrite (motor2_Linksom, LOW); // pin low
digitalWrite (motor2_Rechtsom, LOW); // pin low
volgende_stap ++; // deze regel zorgt ervoor dat je naar de volgende stap gaat.
}
}
break;

case 2:
delay(2000); // korte vertraging om zo de stand in de seriële monitor te lezen.
Serial.println("Grijper dicht"); // deze regel beschrijft wat de case uitvoert in de seriële monitor.
digitalWrite(cilinder_inschuiven, HIGH);
delay(2000);
volgende_stap ++; // deze regel zorgt ervoor dat je naar de volgende stap gaat.
break;

case 3:
delay(1000); // korte vertraging om zo de stand in de seriële monitor te lezen.
Serial.println("Grijper omhoog"); // deze regel beschrijft wat de case uitvoert in de seriële monitor.
analogWrite(motor2_Starten, 255); // snelheid motor grijper omlaag 100%
digitalWrite (motor2_Linksom, LOW); // pin low
digitalWrite (motor2_Rechtsom, HIGH); // pin high motor gaat rechtsom
if (digitalRead(sensor3) == HIGH) {
analogWrite (motor2_Starten, 0); // motor uitzetten
digitalWrite (motor2_Linksom, LOW); // pin low
digitalWrite (motor2_Rechtsom, LOW); // pin low
volgende_stap ++; // deze regel zorgt ervoor dat je naar de volgende stap gaat.
}

Advertisement

Gebruikers-avatar
Berichten: 401
Geregistreerd: 15 Nov 2015, 11:54

Re: blijft hangen in een stap

Berichtdoor Gij Kieken » 09 Jan 2020, 22:54

Met een stukje programma kan niet veel gedaan worden.
Een ding is al zeker ,haal die Delays eruit.

Gebruikers-avatar
Berichten: 2336
Geregistreerd: 06 Aug 2016, 01:03

Re: blijft hangen in een stap

Berichtdoor Koepel » 09 Jan 2020, 23:16

Je variabele 'volgende_stap' is een globale variabele. Dat is wel zo handig, want die behoudt zijn waarde terwijl de loop() steeds opnieuw wordt uitgevoerd... tenzij je aan het begin van de loop() die variabele steeds opnieuw een vaste waarde geeft met volgende_stap = 1; :o

Van de naam "volgende_stap" schiet spontaan mijn haar in de krul ;) Het is de "stap" die je op dit moment uitvoert. De "volgende stap" komt daarna.
Een betere naam zou zijn: "hierna_komt_de_volgende_stap".
Of: "huidige_stap".
Of: "stap".

Is het een opdracht voor school ? Deze vraag is van gisteren: http://arduinoforum.nl/viewtopic.php?f=14&t=4115

Je hoeft geen 'u' te zeggen. We zijn hier als Arduino-enthousiastelingen onder elkaar. Als je uit België komt, dan mag je wel 'u' zeggen wanneer 'je' te frivool is.

Gebruikers-avatar
Berichten: 401
Geregistreerd: 15 Nov 2015, 11:54

Re: blijft hangen in een stap

Berichtdoor Gij Kieken » 09 Jan 2020, 23:27

Om je programma beter te laten lopen moet je even Blink without Delay onder de loep nemen.
Het zit ingebakken in de IDE.

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

Re: blijft hangen in een stap

Berichtdoor shooter » 10 Jan 2020, 13:20

in de loop de eerste drie regels weghalen dus inclusief de {}
paul deelen
shooter@home.nl

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 0 gasten