blijft hangen in een stap
5 berichten
• Pagina 1 van 1
blijft hangen in een stap
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.
}
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
- Gij Kieken
- Berichten: 635
- Geregistreerd: 15 Nov 2015, 11:54
Re: blijft hangen in een stap
Met een stukje programma kan niet veel gedaan worden.
Een ding is al zeker ,haal die Delays eruit.
Een ding is al zeker ,haal die Delays eruit.
Re: blijft hangen in een stap
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;
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.
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.
- Gij Kieken
- Berichten: 635
- Geregistreerd: 15 Nov 2015, 11:54
Re: blijft hangen in een stap
Om je programma beter te laten lopen moet je even Blink without Delay onder de loep nemen.
Het zit ingebakken in de IDE.
Het zit ingebakken in de IDE.
Re: blijft hangen in een stap
in de loop de eerste drie regels weghalen dus inclusief de {}
paul deelen
shooter@home.nl
shooter@home.nl
5 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten