Stappen doorlopen doormiddel van een switchcase

IDE gerelateerde berichten
Berichten: 2
Geregistreerd: 08 Jan 2020, 12:31

Stappen doorlopen doormiddel van een switchcase

Berichtdoor maxie533 » 08 Jan 2020, 12:42

Beste leden,

Voor een opdracht bij ons op school moeten wij een portaalkraan laten lopen. Deze moet hierbij verschillende stappen doorlopen. Hij moet namelijk iets oppakken dan omhoog gaan, vervolgens naar rechts verplaatsen, stoppen en vervolgens naar onderen gaan en het onderdeel weer neerzetten. Nu moeten we dit met een switch case doen, en deze mag pas beginnen te lopen wanneer de letter s op het toetsenbord is ingedrukt en doorgestuurd is via de seriële monitor. Echter kunnen we nergens vinden hoe we dit voor elkaar moeten krijgen. Weet een van jullie misschien hoe we dit het beste kunnen doen? Alvast bedankt!

Advertisement

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

Re: Stappen doorlopen doormiddel van een switchcase

Berichtdoor Koepel » 08 Jan 2020, 14:10

In zo'n situatie is het altijd de vraag wanneer iets moet stoppen. Dat kan door een motor een bepaalde tijd aan te zetten, of een schakelaar die je steeds inleest. Dan krijg je dus voor iedere situatie een ander stukje code. Ik denk dat daar de switch-case voor bedoeld is.

Begin met kleine brokjes die te behappen zijn.
Heb je al een sketch die kijkt of de 's' wordt ingedrukt ?

Daarna kun je een switch-case maken en in iedere situatie iets anders doen (een ledje aan- of uitzetten, iets naar de seriele monitor sturen).
Voor de switch-case zijn er twee mogelijkheden:
1) Eenvoudig, met code en delay in ieder stukje code. Je kunt maar één ding tegelijk doen.
2) Moeilijk (maar wel mooier), met millis() en een "Finite State Machine". Die loopt ook door verschillende stappen, maar kan meerdere dingen tegelijk doen. Dit is hoe je begint met een "Finite State Machine": https://majenko.co.uk/blog/finite-state-machine.

Je begint natuurlijk eenvoudig.

Dit is de Arduino uitleg van switch-case: https://www.arduino.cc/reference/en/language/structure/control-structure/switchcase/. En er is ook een tutorial: https://www.arduino.cc/en/Tutorial/switchCase.
Maak eens zo'n switch-case en bij de eerste een led aan zetten en 1 seconde wachten, dan door naar de volgende stap. Bij de volgens stap de led uitzetten, enzovoorts. Probeer maar iets.

Als iets niet goed werkt, dan graag je sketch laten zien.

Ik kan alvast antwoord op je vraag geven: meestal heeft de switch-case die stappen doorloopt een 'idle' en de variabele voor een switch-case heet in zo'n situatie vaak 'state'. Een 'idle' is bijvoorbeeld bij de waarde 0. Dan gebeurt er dus niets. Drukt iemand op een 's', dan krijgt de variabele 'state' de waarde van bijvoorbeeld 1 en dan begint de kraan te bewegen. Dat je een 'idle' gebruikt en je die variabele 'state' noemt kun je gewoon in je sketch vermelden dat je dat is verteld in dit forum met een link naar dit onderwerp.

Berichten: 2
Geregistreerd: 08 Jan 2020, 12:31

Re: Stappen doorlopen doormiddel van een switchcase

Berichtdoor maxie533 » 08 Jan 2020, 15:06

int programCount = 0;//variable to move through the program
int button = 5;


void setup() {
Serial.begin(9600);// initialize serial communication:
if (digitalRead (button==HIGH)){
programCount = 0;}

pinMode (button, INPUT);
}//end setup

void loop() {


switch (programCount) {
case 0:
Serial.println("0");
programCount ++;

case 1:
Serial.println("1");
programCount ++;
break;

case 2:
delay(1000);//wait 1 second
Serial.println("2");//print the number
programCount ++;
break;

case 3:
delay(1000);//wait 1 second
Serial.println("3");//print the number
programCount ++;
break;

case 4:
delay(1000);//wait 1 second
Serial.println("4");//print the number
programCount ++;
break;

case 5:
delay(1000);//wait 1 second
Serial.println("5");//print the number
programCount ++;
break;

case 6:
delay(1000);//wait 1 second
Serial.println("6");//print the number
programCount ++;
break;

default:
Serial.print("Counting done");
delay (500);
while (1); //freeze the program here
programCount =0;

}//end switch
}//end loop

Hierboven mijn sketch op dit moment, ik zou graag willen dat hij wanneer ik op het knopje druk hij door de verschillende cases gaat. Echter heb ik al veel manier geprobeerd die ik heb gevonden door de research op internet, alleen deze werken allemaal niet. Kunt u mij hier misschien mee helpen.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Stappen doorlopen doormiddel van een switchcase

Berichtdoor nicoverduin » 08 Jan 2020, 17:00

En wat gebeurt er als de knop niet is ingedrukt inde setup()?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Stappen doorlopen doormiddel van een switchcase

Berichtdoor shooter » 08 Jan 2020, 17:11

cpp code
int programCount = 0;//variable to move through the program
int buttonpin = 5; andere naam gegeven voor duidelijkheid


void setup() {
Serial.begin(9600);// initialize serial communication:

pinMode (buttonpin, INPUT_PULLUP); // hoeft niet maar is handig
}//end setup

void loop() {
if (digitalRead (buttonpin)==HIGH)) // kijk naar het haakje
{programCount=0;}
// welke stap is actief
switch (programCount) {
case 0:
Serial.println("0");
programCount ++; // is wel handig hier
// acties in stap 1 bijvoorbeeld flikker licht aan
delay (100);
break;

case 1:
Serial.println("1");
// bijvoorbeeld haak omhoog
// en dan verder gaan als actie klaar is
programCount ++; // dit mag dus elke stap zijn
break;

case 2:
delay(1000);//wait 1 second
Serial.println("2");//print the number
// kraan bewegen
programCount ++;
break;

case 3:
delay(1000);//wait 1 second
Serial.println("3");//print the number
programCount ++;
break;

case 4:
delay(1000);//wait 1 second
Serial.println("4");//print the number
programCount ++;
break;

case 5:
delay(1000);//wait 1 second
Serial.println("5");//print the number
programCount ++;
break;

case 6:
delay(1000);//wait 1 second
Serial.println("6");//print the number
programCount ++;
break;

default:
Serial.print("Counting done");
delay (500);
// hier stopt alles dus weghalen en met de toets herbeginnen.
while (1); //freeze the program here
programCount =0; // hier komt je prog nooit

}//end switch
}//end loop

wat meer commentaar en nu nog de kraan zelf besturen
paul deelen
shooter@home.nl

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

Re: Stappen doorlopen doormiddel van een switchcase

Berichtdoor shooter » 08 Jan 2020, 17:13

als je indruk wilt maken maak dan de toren van hanoi met een paar objecten op elkaar waarbij de kleinere alleen maar op een grotere mag.
heb dat 40 jaar geleden eens in een omron PLC gestoken helemaal in stapjes met een soort case switch
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Stappen doorlopen doormiddel van een switchcase

Berichtdoor nicoverduin » 08 Jan 2020, 18:55

Ik denk dat ie meer indruk maakt als hij een programma maakt dat door hemzelf is geschreven. Ik stelde mijn vraag niet voor niets op deze wijze. Dat was om hem zelf te laten denken. Nu ga je het voorkauwen en leert hij niets. Maar goed dit is precies de reden waarom wij op de HU (Technische Informatica) geen Arduino achtige sketches accepteren van studenten. Dan ga ik straks mijn opgaven hier tegenkomen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Stappen doorlopen doormiddel van een switchcase

Berichtdoor shooter » 09 Jan 2020, 12:02

ach ik heb er alleen de foutjes uitgehaald , ik vond dat hij al heel goed bezig is, ik hoop altijd dat ze ervan leren.
en niet iedereen wil in het keurslijf van procedures en regels.
en ja ik vind het zelfs slim als je opgaven hier tegen zou komen, dan zijn ze aan het nadenken. je kent me goed genoeg om te weten dat ik nooit de oplossing geef maar een duwtje is juist de bedoeling van dit forum.
paul deelen
shooter@home.nl

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten