switch case / button state ?

Arduino specifieke Software
Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

switch case / button state ?

Berichtdoor dirk ambu » 07 Okt 2013, 12:16

beste

hoe kan ik een schakeling maken waar bij ik gebruik maak van 1 button die 2 relais schakelt in een patroon
bij 1 maal drukken gaat relais 1 dicht
bij nog een keer drukken gaat relais 2 dicht
bij nog een keer drukken gaan relais 1 open
en bij nog een keer drukken gaat relais 1 en 2 open

als ik op internet zoek dan kom ik wel iets tegen maar dat werkt via serial
zoals hieronder maar hoe zou ik dit kunnen veranderen ?

Code: Alles selecteren
 
void setup() {
  // initialize serial communication:
  Serial.begin(9600);
   // initialize the LED pins:
      for (int thisPin = 2; thisPin < 7; thisPin++) {
        pinMode(thisPin, OUTPUT);
      }
}

void loop() {
  // read the sensor:
  if (Serial.available() > 0) {
    int inByte = Serial.read();
    // do something different depending on the character received. 
    // The switch statement expects single number values for each case;
    // in this exmaple, though, you're using single quotes to tell
    // the controller to get the ASCII value for the character.  For
    // example 'a' = 97, 'b' = 98, and so forth:

    switch (inByte) {
    case 'a':   
      digitalWrite(2, HIGH);
      break;
    case 'b':   
      digitalWrite(3, HIGH);
      break;
    case 'c':   
      digitalWrite(4, HIGH);
      break;
    case 'd':   
      digitalWrite(5, HIGH);
      break;
    case 'e':   
      digitalWrite(6, HIGH);
      break;
    default:
      // turn all the LEDs off:
      for (int thisPin = 2; thisPin < 7; thisPin++) {
        digitalWrite(thisPin, LOW);
      }
    }
  }
}



kan iemand een voorzetje geven ?

groet dirk ambu

Advertisement

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

Re: switch case / button state ?

Berichtdoor nicoverduin » 07 Okt 2013, 13:02

Tellertje maken:
Na elke button teller++
En als de teller gelijk aan 4 dan teller op 0.
switch teller etc

Case 1:

Case 2:

etc

Tutti
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: switch case / button state ?

Berichtdoor dirk ambu » 07 Okt 2013, 17:48

hoi nico

ik loop vast
voor als nog heb ik het volgende
Code: Alles selecteren
const int  buttonPin1 = 8;     // the pin that the pushbutton is attached to
const int ledPin = 2;         // the pin that the LED is attached to
const int ledPin1 = 4;        // the pin that the LED is attached to


// Variables will change:
int buttonPushCounter1 = 0;    // counter for the number of button presses
int buttonState1 = 0;          // current state of the button
int lastButtonState1 = 0;      // previous state of the button


void setup() {
                               
  pinMode(buttonPin1, INPUT);
  digitalWrite(buttonPin1, HIGH);                     // turn on pullup resistors 
  pinMode(ledPin, OUTPUT);                            // initialize the LED as an output
  pinMode(ledPin1,OUTPUT);
}

void loop() {

  buttonState1 = digitalRead(buttonPin1);              // read the pushbutton input pin1
  if (buttonState1 != lastButtonState1)                // compare the buttonState to its previous state
    {                                                  // if the state has changed, increment the counter
      if (buttonState1 == HIGH)                        // if the current state is HIGH then the button
          {                                            // went from off to on.
          buttonPushCounter1++;                           
          }
      lastButtonState1 = buttonState1;                 // save the current state as the last state for next time through the loop
      if (buttonPushCounter1 %3  == 0)                // turns on the LED every four button pushes by checking the modulo of the button push counter.
          switch   (buttonPushCounter1)                                         
       case 1:   {
              digitalWrite(ledPin, HIGH);
              digitalWrite(ledPin1, LOW);
           break;     
       
       case 2:
           {
             digitalWrite(ledPin, HIGH);
             digitalWrite(ledPin1, HIGH);
           break;
           
           
       case 3:
           {
             digitalWrite(ledPin, LOW);
             digitalWrite(ledPin1, LOW);
           break;
           }

           }
       }
        }

}


           


wat de } aangaan ik zie niet waar ik iets begin en iets stop in deze
maar boven standen werkt niet
waar ga ik fout of wat doe ik goed ?

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

Re: switch case / button state ?

Berichtdoor nicoverduin » 07 Okt 2013, 18:25

Je ging fout in:
- orde en netheid
- structuur in je programma
- geen slimme dingen doen (modulo is leuk maar je teller loopt door en wordt na 32768 negatief
- Je gebruikt pullups dus een button is AAN als je hem naar GND trekt (= LOW)
- Geen accolades bij case. Had je zo kunnen vinden op Google. En als je ze gebruikt, dan moet je ook de sluit accolade gebruiken . Immers dat bepaalt de scope van die regels code
- de state oplossing is veel te ingewikkeld.
Bijgaand de werkende versie
Code: Alles selecteren
// Do not remove the include below
#include "P1DAmbu.h"

const int buttonPin1 = 14;     // the pin that the pushbutton is attached to
const int ledPin = 2;         // the pin that the LED is attached to
const int ledPin1 = 4;        // the pin that the LED is attached to

// Variables will change:
int buttonPushCounter1 = 2;    // counter for the number of button presses. Start at 0 (will loop around first)
bool buttonState;

void setup() {

   pinMode(buttonPin1, INPUT);
   digitalWrite(buttonPin1, HIGH);       // turn on pullup resistors
   pinMode(ledPin, OUTPUT);             // initialize the LED as an output
   pinMode(ledPin1, OUTPUT);
   buttonState = false;
}

void loop() {
   if (digitalRead(buttonPin1) == LOW)    // if the current state is LOW (use of pullups) then the button
   {                                       // went from off to on.
      if (buttonState == false) {         // allows button to be read and will wait until release
         //
         // increment counter
         //
         buttonPushCounter1++;
         //
         // max 3 different possibilities
         //
         if (buttonPushCounter1 == 3) {
            buttonPushCounter1 = 0;
         }
         //
         // button is processed so wait until released
         //
         buttonState = true;
      }
      //
      // process button counter
      //
      switch (buttonPushCounter1) {
      case 0:
         digitalWrite(ledPin, HIGH);
         digitalWrite(ledPin1, LOW);
         break;

      case 1:

         digitalWrite(ledPin, HIGH);
         digitalWrite(ledPin1, HIGH);
         break;

      case 2:

         digitalWrite(ledPin, LOW);
         digitalWrite(ledPin1, LOW);
         break;

      }
   } else {
      //
      // button is released
      //
      buttonState = false;
   }
}

-
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: switch case / button state ?

Berichtdoor dirk ambu » 07 Okt 2013, 19:02

beste nico

dat ziet er een stuk netter uit dan bij mij dat zeker
maar heb je ook "P1DAmbu.h" voor mij
want deze heb ik niet of is mijn uitdaging nu om deze zelf te maken ??
dan wel het programma aan te passen zodat "P1DAmbu.h" niet nodig is

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

Re: switch case / button state ?

Berichtdoor nicoverduin » 07 Okt 2013, 19:03

delete die regel gewoon. Is alleen nodig voor de ECLIPSE omgeving
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: switch case / button state ?

Berichtdoor dirk ambu » 07 Okt 2013, 19:21

heb ik net gedaan en het werkt

alleen als ik snel druk of de knop ingedrukt houd dan slaat hij soms een stap over
is dat op te lossen via Debounce ? of zoek ik verkeert ?

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: switch case / button state ?

Berichtdoor dirk ambu » 07 Okt 2013, 19:26

of moet

// Variables will change:
int buttonPushCounter1 = 2; // counter for the number of button presses. Start at 0 (will loop around first)
bool buttonState;

zijn

// Variables will change:
int buttonPushCounter1 = 2; // counter for the number of button presses. Start at 0 (will loop around first)
boolean buttonState;


ik hoor het graag

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

Re: switch case / button state ?

Berichtdoor nicoverduin » 07 Okt 2013, 20:57

boolean = bool
Je kan altijd nog een debounce inbouwen.
delay van 10-50 milliseconden oid.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: uwigaqew en 43 gasten