void toepassen en ( Printen op scherm)

Hardware die niet past in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: void toepassen en ( Printen op scherm)

Berichtdoor nicoverduin » 30 Aug 2014, 08:11

Redundant schreef:Er is een Pull Down 15K weerstand aanwezig, werkt goed.
je gebruikt:

cpp code
while (! digitalRead(Drukknop));


Die is dus altijd waar zolang je hem niet indrukt. Omdat je een pull down gebruikt. Als je hem dan indrukt, zal hij (zoals Shooter al aangeeft), 300mS aan gaan en gelijk door met het volgende statement. Waar hij dan weer uit gaat.

Een niet nette oplossing maar wel passend binnen jouw stijl van codering zou zijn om nadat je de knop hebt ingedrukt, dit toe te voegen:

cpp code
while (digitalRead(Drukknop));


Die wacht tot je de toets weer hebt losgelaten.

In feite heb je hier een 4-tal stappen die je wilt doorlopen:
a) wacht tot knop is ingedrukt
b) wacht tot knop is losgelaten
c) wacht tot knop weer is ingedrukt
d) wacht tot knop is losgelaten.

Ik had hier: viewtopic.php?f=9&t=892 al eens een voorbeeld neergezet waarbij je verschillende stappen kan doorlopen en pas naar de volgende stap gaat als de huidige stap is afgewikkeld.

@edit: hier nogmaals het voorbeeld:

cpp code
// Do not remove the include below
#include "testSwitchCase.h"

#define LED1 12 // een LED op pin 12
#define LED2 13 // een LED op Pin 13
#define BLINKTIJD1 500 // elke 1/2 seconden LED1 wisselen
#define BLINKTIJD2 250 // elke 1/4 seconden LED1 wisselen

unsigned long timer; // nodig om na een bepaalde tijd iets te doen
uint16_t volgendeStap; // geeft aan welke stap verwerkt moet worden
uint16_t teller; // zomaar een tellertje
uint8_t ledState = 0; // geeft de LED output aan

void setup()
{
pinMode(LED1, OUTPUT); // Zet de outputs
pinMode(LED2, OUTPUT);
volgendeStap = 0; // we beginnen bij stap 0
teller = 0; // tellertje voor de eerste keer opzetten
timer = millis(); // timertje idem
}

/** Besturing van de stappen */
enum {
initieerStap2 ,
stap2 ,
initieerStap1 ,
stap1 ,
beginOpnieuw
};

void loop()
{
//
// verwerk de relevante stap
//
switch (volgendeStap) {

case initieerStap1:
teller = 0; // reset de teller
digitalWrite(LED2, LOW); // zet de LED uit
volgendeStap++;
break;

case stap1:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
ledState = !ledState;
digitalWrite(LED1, ledState); // Flip led 1
teller++; // verhoog teller
if (teller > 10) { // alles gehad?
volgendeStap++; // we zijn hier klaar
} else {
timer = millis() + BLINKTIJD1; // we zijn er nog niet dus de timer zetten
}
}
break;

case initieerStap2:
teller = 0; // reset de teller
digitalWrite(LED1, LOW); // zet de LED uit
volgendeStap++;
break;

case stap2:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
ledState = !ledState;
digitalWrite(LED2, ledState); // Flip led 1
teller++; // verhoog teller tot 10
if (teller > 10) { // alles gehad
volgendeStap++;
} else {
timer = millis() + BLINKTIJD2; // we zijn er nog niet dus de timer zetten
}
}
break;

case beginOpnieuw:
volgendeStap = 0; // begin bij de eerste stap
timer = millis() + BLINKTIJD1; // we zijn er nog niet dus de timer zetten
break;

default:
break;
}
}


Het leuke is dat in de enum staat de volgorde van de stappen die het programma doorloopt. Er wordt een timer gebruikt die bepaalt of de stap afgewikkeld is. Maar hier kan je dus je eigen code neerzetten.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: void toepassen en ( Printen op scherm)

Berichtdoor Redundant » 29 Sep 2014, 11:22

Eindelijk ben ik zover om een opzet te laten zien die ik wil gaan gebruiken als Basis.
Ik hoop dat jullie niet boos worden dat ik alweer opnieuw ben begonnen.
Dit werkt geheel zoals ik het resultaat verwacht voor het complete programma.

Als dit goedkeuring kan krijgen en geen gekke dingen bevat kan ik een volgende stap inbrengen etc.

gr, Martin


[ccp]// Programma opbouw testen

int Drukknop = A1; // Start
int PKS = 0;
int DWW = 0;


void setup ()
{
Serial.begin(9600);
pinMode(Drukknop, INPUT ); // Drukknop poort 1 PWM_TX1 // Start c.q. Enter

{
Serial.println("Start ");
delay(500);
Serial.println("druk op Witte knop"); // Drukknop Start c.q. Enter uitvoeren
Routine_Drukknop(); // Drukknop Start c.q. Enter uitvoeren
Routine_PKS(); // Waarde Programma Schakelaar = enkel Duimwiel
Routine_Drukknop(); // Drukknop Start c.q. Enter uitvoeren
Routine_DWW(); // DuimWielWaarde
Routine_Drukknop(); // Drukknop Start c.q. Enter uitvoeren
Routine_Case(); // Uitvoeren bewerkingen.
}
}



void loop() {
//Reset();
}

void Routine_Drukknop() { //
while (digitalRead(Drukknop) == HIGH) ; // Wachten op indrukken Drukknop
while (digitalRead(Drukknop) == LOW) ; // Wachten op loslaten Drukknop
Serial.println(" ");
delay(300);
}


void Routine_PKS() {
PKS = 3; // Testwaarde
Serial.print("Kies Programma, en "); // Serial.println (PKS);
Serial.println("druk op Witte knop"); // Drukknop Start c.q. Enter uitvoeren
delay(300); // regel kan weg
}


void Routine_DWW() {
DWW = 13; // Test waarde
Serial.print("Kies Aantal bewerkingen en "); // Drievoudige Duimwielschakelaars instellen
Serial.println("druk op Witte knop"); // Drukknop Start c.q. Enter uitvoeren
delay(300);
}


void Routine_Case() { //Weergeven waarde PKS, omzetten naar Tekst en gekozen Programma afwerken
Serial.print("Programma "); Serial.print(PKS); Serial.println(" is in werking ");
}





void Routine_CW() {
Serial.print("Motor Rechtsom "); Serial.println(DWW);
delay(300);
}


void Routine_CCW() {
Serial.print("Motor Linksom "); Serial.println(DWW);
delay(300);
}[/ccp]

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

Re: void toepassen en ( Printen op scherm)

Berichtdoor nicoverduin » 29 Sep 2014, 11:49

Zet je code ff tussen de code2=cpp tags dat leest ff prettiger :)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: void toepassen en ( Printen op scherm)

Berichtdoor Redundant » 29 Sep 2014, 13:24

cpp code
// Programma opbouw  testen

int Drukknop = A1; // Start
int PKS = 0;
int DWW = 0;


void setup ()
{
Serial.begin(9600);
pinMode(Drukknop, INPUT ); // Drukknop poort 1 PWM_TX1 // Start c.q. Enter

{
Serial.println("Start ");
delay(500);
Serial.println("druk op Witte knop"); // Drukknop Start c.q. Enter uitvoeren
Routine_Drukknop(); // Drukknop Start c.q. Enter uitvoeren
Routine_PKS(); // Waarde Programma Schakelaar = enkel Duimwiel
Routine_Drukknop(); // Drukknop Start c.q. Enter uitvoeren
Routine_DWW(); // DuimWielWaarde
Routine_Drukknop(); // Drukknop Start c.q. Enter uitvoeren
Routine_Case(); // Uitvoeren bewerkingen.
}
}



void loop() {
//Reset();
}

void Routine_Drukknop() { //
while (digitalRead(Drukknop) == HIGH) ; // Wachten op indrukken Drukknop
while (digitalRead(Drukknop) == LOW) ; // Wachten op loslaten Drukknop
Serial.println(" ");
delay(300);
}


void Routine_PKS() {
PKS = 3; // Testwaarde
Serial.print("Kies Programma, en "); // Serial.println (PKS);
Serial.println("druk op Witte knop"); // Drukknop Start c.q. Enter uitvoeren
delay(300); // regel kan weg
}


void Routine_DWW() {
DWW = 13; // Test waarde
Serial.print("Kies Aantal bewerkingen en "); // Drievoudige Duimwielschakelaars instellen
Serial.println("druk op Witte knop"); // Drukknop Start c.q. Enter uitvoeren
delay(300);
}


void Routine_Case() { //Weergeven waarde PKS, omzetten naar Tekst en gekozen Programma afwerken
Serial.print("Programma "); Serial.print(PKS); Serial.println(" is in werking ");
}





void Routine_CW() {
Serial.print("Motor Rechtsom "); Serial.println(DWW);
delay(300);
}


void Routine_CCW() {
Serial.print("Motor Linksom "); Serial.println(DWW);
delay(300);
}

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

Re: void toepassen en ( Printen op scherm)

Berichtdoor nicoverduin » 29 Sep 2014, 17:36

Redundant schreef:Eindelijk ben ik zover om een opzet te laten zien die ik wil gaan gebruiken als Basis.
Ik hoop dat jullie niet boos worden dat ik alweer opnieuw ben begonnen.
Dit werkt geheel zoals ik het resultaat verwacht voor het complete programma.

Als dit goedkeuring kan krijgen en geen gekke dingen bevat kan ik een volgende stap inbrengen etc.

gr, Martin

Ik zou niet weten wie er boos moet worden.... Het is immers jouw programma. Sterker nopg soms is het beter om gewoon alles opzij te gooien en opnieuw te beginnen :mrgreen: En daar ben je niet de eerste in.
Kijk nu heb je niet meer dan een paar routines (=functies) die je aanroept. Zoals ik ook al eerder bij een ander topic tegen Hanneman zei, is het (en zeker als je net begint) handiger om eerst een structuur neer te zetten van wat je wil bereiken. Er zijn legio programmeer methodieken te vinden dus daar kan het niet aan liggen. Keuze zat. Het voordeel van een gestructureerde wijze is dat je EERST na moet denken (en dan kan je al eerst op hoofdlijnen doen) wat je wilt en DAN pas gaat uitwerken en programmeren. Zoals in de dagelijkse praktijk tenslotte ook voor 95% gebeurt.... Eerst de blauwdruk (of ontwerp, of structuur... hoe je het ook noemen wilt) en dan de uitvoering..... Oftewel... Bezint eer ge begint :mrgreen:
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: void toepassen en ( Printen op scherm)

Berichtdoor Redundant » 29 Sep 2014, 18:14

Dankjewel voor je reactie.
Gr, Martin

Vorige

Terug naar Overige hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 30 gasten