Push button probleem

algemene C code
Berichten: 3
Geregistreerd: 08 Okt 2013, 14:30

Push button probleem

Berichtdoor Sander1994 » 08 Okt 2013, 14:33

Ik heb een probleem.
Ik wil een code maken waarbij je een push button hebt en 5 ledjes. wanneer je de pushbutton 1x indrukt gaat er 1 led branden. bij 2x 2 ledjes enzovoort. Ik kom er maar niet uit. Dit is de code die ik tot nu toe heb:

// constants won't change. They're used here to
// set pin numbers:
int buttonPin = 8; // the number of the pushbutton pin
int ledPin1 = 1; // led connected to digital pin 1
int ledPin2 = 2; // led connected to digital pin 2
int ledPin3 = 3; // led connected to digital pin 3
int ledPin4 = 4; // led connected to digital pin 4
int ledPin5 = 5; // led connected to digital pin 5


// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
int buttonPushCounter = 0; // counter for the number of button presses
int lastButtonState = 0; // previous state of the button


void setup() {
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
for (int thisPin = 1; thisPin < 6; thisPin++) {
pinMode(thisPin, OUTPUT);
}
Serial.begin(9600);
}

void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);

if(lastButtonState != buttonState){
if(buttonState == LOW){
delay(100);
Serial.println("Button is OFF");
//print button is off if button is not pushed and a LOW is returned

}
else{
delay(500);
Serial.println("Button was turned ON");
buttonPushCounter++;
delay(1000);
Serial.print("Times button was pushed ");
Serial.print(buttonPushCounter);
Serial.println(" times");
}
}
}
Kunnen jullie mij helpen?

Advertisement

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

Re: Push button probleem

Berichtdoor nicoverduin » 08 Okt 2013, 16:05

Dit heeft wel een hoog Dirk Ambu gehalte..... :) Zitten jullie elkanders programmatuur uit te wisselen?

Sander1994 schreef:// constants won't change. They're used here to
// set pin numbers:
int buttonPin = 8; // the number of the pushbutton pin
int ledPin1 = 1; // led connected to digital pin 1
int ledPin2 = 2; // led connected to digital pin 2
int ledPin3 = 3; // led connected to digital pin 3
int ledPin4 = 4; // led connected to digital pin 4
int ledPin5 = 5; // led connected to digital pin 5
zet voor de int een "const" anders ben je geheugen aan het verbruiken wat geen enkel nut heeft.

Sander1994 schreef:
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
int buttonPushCounter = 0; // counter for the number of button presses
int lastButtonState = 0; // previous state of the button


Sander1994 schreef:
void setup() {
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
for (int thisPin = 1; thisPin < 6; thisPin++) {
pinMode(thisPin, OUTPUT);
}
Serial.begin(9600);
}


Schakelaar

Ik weet niet of je Pull-up weerstand gebruikt voor de button? Daarnaast is het onduidelijk of je de ON state hebt als de switch open of dicht staat. Je hebt hier meerdere opties. Als je standaard bijvoorbeeld een 10K weerstand van de input aan GND trekt, dan praat je over pull-down. De schakelaar wordt dan verbonden tussen de input en Vcc (=5V). Als jje dan de schakelaar aanzet, dan wordt de input HIGH.

Als je gebruik maakt van een interne PULLUP of een externe PULLUP (via een weerstand)dan wordt de input naar GND getrokken en wordt de AAN gelijk aan LOW.

Leds:
Dit gaat toevallig goed omdat je de pinnen gelijk houd. Als je gewoon een rijtje LEDS wil hebben, dan zou je beter een tabel kunnen maken.


dus als volgt:
Code: Alles selecteren
//
// pin definities
//
#define LED1  1
#define LED2  2
#define LED3  3
#define LED4  4
#define LED5  5
//
// de tabel
//
uint8_t ledTabel[5] = {LED1, LED2, LED3, LED4, LED5};


Dan in de init():
Code: Alles selecteren
//
// input is PULL-UP. Dus AAN = LOW
//
pinmode (buttonPin, INPUT_PULLUP);
//
// zet de led pinnen als output. En vergeet niet een weerstand van rond de 270 ohm in serie met de led. anders ben je bezig de CPU te koken.
//
for (i = 0; i < sizeof(ledTabel); i++) {
    pinMode(ledTabel[i], OUTPUT);
}


Sander1994 schreef:
void loop() {
// read the pushbutton input pin:
buttonState = digitalRead(buttonPin);

if(lastButtonState != buttonState){
if(buttonState == LOW){
delay(100);
Serial.println("Button is OFF");
//print button is off if button is not pushed and a LOW is returned

}
else{
delay(500);
Serial.println("Button was turned ON");
buttonPushCounter++;
delay(1000);
Serial.print("Times button was pushed ");
Serial.print(buttonPushCounter);
Serial.println(" times");
}
}
}

Hier wordt nog geen enkele LED aangezet. overigens.

Bijgaand een alternatief:
Code: Alles selecteren
//
// LED pin definities
//
#define LED1   1
#define LED2   2
#define LED3   3
#define LED4   4
#define LED5   5
//
// push button
//
#define BUTTONPIN   8

// Variables will change:
uint8_t    ledTabel[]    = {LED1, LED2, LED3, LED4, LED5}; // tabel met led pin definities
int       pushCtr    = sizeof(ledTabel) - 1;    // teller voor aantal keren knop ingedrukt
bool       buttonState;      // houdt bij of de knop is losgelaten

void setup() {

   pinMode(BUTTONPIN, INPUT_PULLUP);
   for (unsigned int i = 0; i < sizeof(ledTabel); i++) {
      pinMode(ledTabel[i], OUTPUT);
   }
   buttonState = false;      // er mag een button verwerkt worden
}

void loop() {
   if (digitalRead(BUTTONPIN) == 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
         //
         pushCtr++;
         if (pushCtr == sizeof(ledTabel)) {
            //
            // eventueel de leds uitzetten
            //
            for (unsigned int i = 0 ; i < sizeof(ledTabel); i++){
               digitalWrite(ledTabel[i], LOW);
            }
            pushCtr = 0;
         }
         //
         // button is processed so wait until released
         //
         buttonState = true;
      }
      //
      // verwerk de button counter. Daar er altijd een volgende led wordt aangezet, hoef je
      // alleen maar de huidige aan te zetten
      //
      digitalWrite(ledTabel[pushCtr], HIGH);
   } else {
      //
      // button is released
      //
      buttonState = false;
   }
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 3
Geregistreerd: 08 Okt 2013, 14:30

Re: Push button probleem

Berichtdoor Sander1994 » 10 Okt 2013, 10:56

avrdude: stk500_getsync(): not in sync: resp=0x00

dit krijg ik als foutmelding?

help!

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

Re: Push button probleem

Berichtdoor nicoverduin » 10 Okt 2013, 11:02

redenen kunnen zijn:
- driver niet goed geÏnstalleerd
- juiste port niet geselecteerd in de IDE
Het komt wel meer voor dat als je een andere USB jack neemt van de pc/laptop dat hij een andere com port selecteerd.
Ook wil het wel eens helpen als de plug er ff uit getrokken wordt en er weer ingedaan wordt.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 3
Geregistreerd: 08 Okt 2013, 14:30

Re: Push button probleem

Berichtdoor Sander1994 » 10 Okt 2013, 11:35

Bedankt voor alle hulp, de opdracht is gelukt.

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten