Push button probleem
5 berichten
• Pagina 1 van 1
- Sander1994
- Berichten: 3
- Geregistreerd: 08 Okt 2013, 14:30
Push button probleem
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?
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Push button probleem
Dit heeft wel een hoog Dirk Ambu gehalte..... Zitten jullie elkanders programmatuur uit te wisselen?
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:
Dan in de init():
Hier wordt nog geen enkele LED aangezet. overigens.
Bijgaand een alternatief:
zet voor de int een "const" anders ben je geheugen aan het verbruiken wat geen enkel nut heeft.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
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;
}
}
- Sander1994
- Berichten: 3
- Geregistreerd: 08 Okt 2013, 14:30
Re: Push button probleem
avrdude: stk500_getsync(): not in sync: resp=0x00
dit krijg ik als foutmelding?
help!
dit krijg ik als foutmelding?
help!
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Push button probleem
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.
- 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.
- Sander1994
- Berichten: 3
- Geregistreerd: 08 Okt 2013, 14:30
Re: Push button probleem
Bedankt voor alle hulp, de opdracht is gelukt.
5 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten