net met arduino bezig en loop klem op iets simpels
28 berichten
• Pagina 1 van 3 • 1, 2, 3
net met arduino bezig en loop klem op iets simpels
beste
wie kan mij helpen
ik wil met behulp van een arduino uno 4 led lampjes laten branden die geschakeld worden door 2 knopjes
het zou als volgens moeten werken
druk op knop 1 led 1 gaat branden na 1 seconden gaat ook led 2 aan als ik weer op knop 1 druk gaat eerst led 2 uit en na 1 seconde gaat ook led 1 weer uit
druk ik op knop 2 dan gaat led 3 branden en na 1 seconden gaat led 4 ook aan druk ik weer op knop 2 dan gaat led 4 uit en 1 seconde later ook led 3 uit
nu lukt het mij met wat knip en plak werk om 1 knop werkend te krijgen maar het lukt mij niet om de 2de knop toe te voegen dan krijg ik fout meldingen
en als ik die niet krijg dan werkt het gewoon kan iemand mij vertellen wat ik verkeerd doe
ik hoor graag wat ik fout doe dan kan ik snel weer verder wat als het lukt is het wel erg leuk om mee bezig te zijn zeg
zelf denk ik dat het in de void loop mis gaat
groet dirk ambu
wie kan mij helpen
ik wil met behulp van een arduino uno 4 led lampjes laten branden die geschakeld worden door 2 knopjes
het zou als volgens moeten werken
druk op knop 1 led 1 gaat branden na 1 seconden gaat ook led 2 aan als ik weer op knop 1 druk gaat eerst led 2 uit en na 1 seconde gaat ook led 1 weer uit
druk ik op knop 2 dan gaat led 3 branden en na 1 seconden gaat led 4 ook aan druk ik weer op knop 2 dan gaat led 4 uit en 1 seconde later ook led 3 uit
nu lukt het mij met wat knip en plak werk om 1 knop werkend te krijgen maar het lukt mij niet om de 2de knop toe te voegen dan krijg ik fout meldingen
en als ik die niet krijg dan werkt het gewoon kan iemand mij vertellen wat ik verkeerd doe
- Code: Alles selecteren
// this constant won't change:
const int buttonPin = 2; // the pin that the pushbutton is attached to
const int buttonPin1 = 4; // the pin that the pushbutton is attached to
const int ledPin1 = 12; // the pin that the LED is attached to
const int ledPin = 13; // the pin that the LED is attached to
const int ledPin2 = 7; // the pin that the LED is attached to
const int ledPin3= 8; // the pin that the LED is attached to
// Variables will change:
int buttonPushCounter1 = 0; // counter for the number of button presses
int buttonPushCounter = 0; // counter for the number of button presses
int buttonState1 = 0; // current state of the button
int buttonState = 0; // current state of the button
int lastButtonState1 = 0; // previous state of the button
int lastButtonState = 0; // previous state of the button
void setup() {
// initialize the button pin as a input:
pinMode(buttonPin, INPUT);
pinMode(buttonPin1, INPUT);
// initialize the LED as an output:
pinMode(ledPin, OUTPUT);
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3,OUTPUT);
}
void loop() {
// read the pushbutton input pin:
buttonState1 = digitalRead(buttonPin1);
buttonState = digitalRead(buttonPin);
// compare the buttonState to its previous state
if (buttonState1 != lastButtonState1) {
// if the state has changed, increment the counter
if (buttonState1 == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter1++;
}
// save the current state as the last state,
//for next time through the loop
lastButtonState1 = buttonState1;
// turns on the LED every four button pushes by
// checking the modulo of the button push counter.
// the modulo function gives you the remainder of
// the division of two numbers:
if (buttonPushCounter1 % 2 == 0) {
digitalWrite(ledPin, HIGH);
delay(1000); // wait for a second
digitalWrite(ledPin1, HIGH);
} else {
digitalWrite(ledPin1, LOW);
delay(1000); // wait for a second
digitalWrite(ledPin, LOW);
// read the pushbutton input pin:
//buttonState = digitalRead(buttonPin1);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter++;
}
lastButtonState = buttonState;
if (buttonPushCounter % 2 == 0) {
digitalWrite(ledPin2, HIGH);
delay(1000); // wait for a second
digitalWrite(ledPin3, HIGH);
} else {
digitalWrite(ledPin3, LOW);
delay(1000); // wait for a second
digitalWrite(ledPin2, LOW);
}
}
}
}
}
ik hoor graag wat ik fout doe dan kan ik snel weer verder wat als het lukt is het wel erg leuk om mee bezig te zijn zeg
zelf denk ik dat het in de void loop mis gaat
groet dirk ambu
Advertisement
Re: net met arduino bezig en loop klem op iets simpels
jawel
Kom heus wel.
Het belangrijkste dat ik na een eerste 'scan' mis, is een zogenaamde debounce van de button. Misschien moet je dat eerst even opzoeken. Is ook op dit forum genoemd.
Nu geen tijd, maar ik wil daarna alsnog wel even naar je sketch kijken. Groet. Paul
Kom heus wel.
Het belangrijkste dat ik na een eerste 'scan' mis, is een zogenaamde debounce van de button. Misschien moet je dat eerst even opzoeken. Is ook op dit forum genoemd.
Nu geen tijd, maar ik wil daarna alsnog wel even naar je sketch kijken. Groet. Paul
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
Re: net met arduino bezig en loop klem op iets simpels
Dirk check je haakjes groupen eens { } . die lijken niet goed te grouperen.
Een wat betere editor zoals notepad++ geeft dat wat beter aan wat de blokken zijn.
grtz
Een wat betere editor zoals notepad++ geeft dat wat beter aan wat de blokken zijn.
grtz
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate
Re: net met arduino bezig en loop klem op iets simpels
bedankt voor de info tot nu toe
wat ik niet begrijp en ook niet kan vinden op het net
is hoe ik er voor moet zorgen dat de arduino aan een nieuwe opdracht begint
wat ik heb geschreven werkt maar voor de helft de eerst knop werkt
alleen krijg ik de 2de knop niet werkend als ik de input veranderd van de eerst na de 2 de knop dan werkt de 2 de maar de eerst knop niet meer
de harware werkt en klopt maar de software krijg ik niet goed en dat klopt ook als ik het lees
want ik zeg
if (buttonPushCounter1 % 2 == 0) {
digitalWrite(ledPin, HIGH);
delay(1000); // wait for a second
digitalWrite(ledPin1, HIGH);
} else {
digitalWrite(ledPin1, LOW);
delay(1000); // wait for a second
digitalWrite(ledPin, LOW);
maar wat moet ik doen als het verder moet kijken dan else
iemand een idee
en sorry als ik erg onduidelijk ben maar dat komt omdat ik niet snap waar het mis gaat dat maakt het erg moeilijk om het uit te leggen
groet dirk
wat ik niet begrijp en ook niet kan vinden op het net
is hoe ik er voor moet zorgen dat de arduino aan een nieuwe opdracht begint
wat ik heb geschreven werkt maar voor de helft de eerst knop werkt
alleen krijg ik de 2de knop niet werkend als ik de input veranderd van de eerst na de 2 de knop dan werkt de 2 de maar de eerst knop niet meer
de harware werkt en klopt maar de software krijg ik niet goed en dat klopt ook als ik het lees
want ik zeg
if (buttonPushCounter1 % 2 == 0) {
digitalWrite(ledPin, HIGH);
delay(1000); // wait for a second
digitalWrite(ledPin1, HIGH);
} else {
digitalWrite(ledPin1, LOW);
delay(1000); // wait for a second
digitalWrite(ledPin, LOW);
maar wat moet ik doen als het verder moet kijken dan else
iemand een idee
en sorry als ik erg onduidelijk ben maar dat komt omdat ik niet snap waar het mis gaat dat maakt het erg moeilijk om het uit te leggen
groet dirk
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
Re: net met arduino bezig en loop klem op iets simpels
Ik denk gewoon dat je haakje verkeerd staan, het zal iets overzichtiger worden als je het wat opsplitst.
Het is een goed begin om de twee button afhandel blokken gewoon in een subroutine te gooien.
Wordt het een stuk leesbaarder en beheersbaarder:
bv :
ps buttons moeten inderdaad wel wat ontdenderd worden.
Het is een goed begin om de twee button afhandel blokken gewoon in een subroutine te gooien.
Wordt het een stuk leesbaarder en beheersbaarder:
bv :
- Code: Alles selecteren
void ProcessButton1(void)
{
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 != lastButtonState1)
{ if (buttonState1 == HIGH)
{ buttonPushCounter1++;
}
lastButtonState1 = buttonState1;
if (buttonPushCounter1 % 2 == 0)
{ digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin1, HIGH);
}
else
{ digitalWrite(ledPin1, LOW); delay(1000); digitalWrite(ledPin, LOW);
}
}
}
//-------------------------------------------------------------------
void ProcessButton2(void)
{
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState)
{ if (buttonState == HIGH)
{ buttonPushCounter++;
}
lastButtonState = buttonState;
if (buttonPushCounter % 2 == 0)
{ digitalWrite(ledPin2, HIGH); delay(1000); digitalWrite(ledPin3, HIGH);
}
else
{ digitalWrite(ledPin3, LOW);delay(1000); digitalWrite(ledPin2, LOW);
}
}
}
//-------------------------------------------------------------------
void loop()
{
ProcessButton1();
ProcessButton2();
}//loop
ps buttons moeten inderdaad wel wat ontdenderd worden.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate
Re: net met arduino bezig en loop klem op iets simpels
Zoals opgemerkt moet je je accolades checken.
Er staat er nu een heel bosje onderaan je code. Het lijkt erop dat er alleen wat wordt uitgevoerd als de eerste knop is ingedrukt.
Een handige methode is om na iedere '{' de kantlijn 2 of 3 posities te laten inspringen, en pas met de '}' terug te springen.
Nu heb je soms na 2 x een '{' wel 4 posities ingesprongen, maar spring je na één '}' weer helemaal terug. Dat maakt het verwarrend om je code te lezen, en daardoor ontstaan heel gemakkelijk fouten.
Voorbeeldje met alleen commentaar:
Door bij de sluithaak te vermelden welk statement je afsluit blijft je code leesbaar, ook als je er naar 6 maanden opnieuw naar kijkt.
Verder is het misschien beter om te beginnen met een eenvoudiger probleempje. Probeer eerst eens de actie met alleen de eerste button en eerste led te programmeren. Breidt dan een werkend stuk code stap voor stap uit.
Onthoud: het is een stuk gemakkelijker om een werkend stuk code ingewikkeld te maken, dan een ingewikkeld stuk code werkend.
Succes, Karel
Er staat er nu een heel bosje onderaan je code. Het lijkt erop dat er alleen wat wordt uitgevoerd als de eerste knop is ingedrukt.
Een handige methode is om na iedere '{' de kantlijn 2 of 3 posities te laten inspringen, en pas met de '}' terug te springen.
Nu heb je soms na 2 x een '{' wel 4 posities ingesprongen, maar spring je na één '}' weer helemaal terug. Dat maakt het verwarrend om je code te lezen, en daardoor ontstaan heel gemakkelijk fouten.
Voorbeeldje met alleen commentaar:
- Code: Alles selecteren
loop() {
if (....) {
// iets doen na de if
} else {
// iets doen bij de else
if ( .. ) {
//iets doen op het tweede if-niveau
} // sluithaak van de tweede if
} // sluithaak van de else van de eerste if
} // sluithaak van loop()
Door bij de sluithaak te vermelden welk statement je afsluit blijft je code leesbaar, ook als je er naar 6 maanden opnieuw naar kijkt.
Verder is het misschien beter om te beginnen met een eenvoudiger probleempje. Probeer eerst eens de actie met alleen de eerste button en eerste led te programmeren. Breidt dan een werkend stuk code stap voor stap uit.
Onthoud: het is een stuk gemakkelijker om een werkend stuk code ingewikkeld te maken, dan een ingewikkeld stuk code werkend.
Succes, Karel
If you think education is expensive, try ignorance! (Derek Bok)
Re: net met arduino bezig en loop klem op iets simpels
bedankt voor de informatie
ik heb de code wat duidelijker gemaakt en opgeruimd in de hoop dat het beter te lezen is
maar ook nu zie ik niet wat ik fout doe
als ik boven in de code de inputs veranderd dan werken ook de ander knop maar twee knoppen werkt niet
hier de aangepaste code
dat met die hekjes dat begrijp ik niet helemaal kan iemand mij vertellen wat je wel en niet ertussen moet zetten
volgens mij sluit ik nu teveel af
groet dirk
ik heb de code wat duidelijker gemaakt en opgeruimd in de hoop dat het beter te lezen is
maar ook nu zie ik niet wat ik fout doe
als ik boven in de code de inputs veranderd dan werken ook de ander knop maar twee knoppen werkt niet
hier de aangepaste code
- Code: Alles selecteren
//dubbelen schakeling met vertraging zowel opkomend als afgaand
const int buttonPin1 = 2; // drukschakelaar 1 schakeld led 1 en 2
const int buttonPin2 = 4; // drukschakelaar 2 schakeld led 3 en 4
const int ledPin1 = 7; // led 1 rood
const int ledPin2 = 8; // led 2 geel
const int ledPin3 = 12; // led 3 rood
const int ledPin4 = 13; // led 4 geel
// drukschakelaar 1
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
// drukschakelaar 2
int buttonPushCounter2 = 0; // counter for the number of button presses
int buttonState2 = 0; // current state of the button
int lastButtonState2 = 0; // previous state of the button
//---------------------------------------------------------------------------------------------------------
void setup() {
// initialize the button pin as a input:
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
// initialize the LED as an output:
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
}
void ProcessButton1(void) {
// read the pushbutton input pin:
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 != lastButtonState1)
if (buttonState1 == HIGH)
buttonPushCounter1++;
lastButtonState1 = buttonState1;
if (buttonPushCounter1 % 2 == 0) {
digitalWrite(ledPin1, HIGH);
delay(1000); // wait for a second
digitalWrite(ledPin2, HIGH);
} else {
digitalWrite(ledPin2, LOW);
delay(1000); // wait for a second
digitalWrite(ledPin1, LOW);
}
}
//-------------------------------------------------------------------------------------------------
void ProcessButton2(void) {
// read the pushbutton input pin:
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 != lastButtonState2) {
if (buttonState2 == HIGH) {
buttonPushCounter2++;
lastButtonState2 = buttonState2;
}
if (buttonPushCounter2 % 2 == 0) {
digitalWrite(ledPin3, HIGH);
delay(1000); // wait for a second
digitalWrite(ledPin4, HIGH);
} else {
digitalWrite(ledPin4, LOW);
delay(1000); // wait for a second
digitalWrite(ledPin3, LOW);
}
}
}
//-------------------------------------------------------------------
void loop()
{
ProcessButton1();
ProcessButton2();
}//loop
dat met die hekjes dat begrijp ik niet helemaal kan iemand mij vertellen wat je wel en niet ertussen moet zetten
volgens mij sluit ik nu teveel af
groet dirk
Re: net met arduino bezig en loop klem op iets simpels
Je moet duidelijker inspringen aan de kantlijn. Neem dit stukje code:
Bedoel jij accolades ( { } ) waar je spreekt van hekjes( # # )?
Klopt het dat je in deze functie alleen code uitvoert als na de digitalRead(buttonPin2) geldt dat buttonState2 != lastButtonState2 ?
Als buttonState2 == LOW wordt lastButtonState2 nooit meer op LOW gezet. Er gebeurt alleen iets als buttonState2 = HIGH.
Je zou eens een stukje papier kunnen pakken, daarop in een aantal kolommen de variabelen schrijven, en dan regel voor regel zelf door je code lopen. Zodra een variabele wijzigt schrijf je die waarde in de kolom en zak je een regel op het papier. Als je in een statement een variabele moet lezen kijk je naar z'n laatste waarde. Zo kan je stap voor stap begrijpen wat je code doet, en waarom het fout gaat.
Verder heb je nog geen code toegevoegd om bouncing van de schakelaar op te vangen, zoals astrofrost suggereerde. Gebruik even de zoekfunctie om voorbeeldcode voor debouncing te vinden. Debouncing is noodzakelijk om een drukknop goed te kunnen gebruiken.
Tenslotte, nogmaals, probeer eerst eens iets met 1 schakelaar en 1 led werkend te krijgen en breidt dat dan uit.
- Code: Alles selecteren
void ProcessButton2(void) {
// read the pushbutton input pin:
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 != lastButtonState2) {
if (buttonState2 == HIGH) {
buttonPushCounter2++;
lastButtonState2 = buttonState2;
} // if (buttonState2 == HIGH)
if (buttonPushCounter2 % 2 == 0) {
digitalWrite(ledPin3, HIGH);
delay(1000); // wait for a second
digitalWrite(ledPin4, HIGH);
} else {
digitalWrite(ledPin4, LOW);
delay(1000); // wait for a second
digitalWrite(ledPin3, LOW);
} // else
} // if (buttonState2 != lastButtonState2)
} //ProcessButton2
Bedoel jij accolades ( { } ) waar je spreekt van hekjes( # # )?
Klopt het dat je in deze functie alleen code uitvoert als na de digitalRead(buttonPin2) geldt dat buttonState2 != lastButtonState2 ?
Als buttonState2 == LOW wordt lastButtonState2 nooit meer op LOW gezet. Er gebeurt alleen iets als buttonState2 = HIGH.
Je zou eens een stukje papier kunnen pakken, daarop in een aantal kolommen de variabelen schrijven, en dan regel voor regel zelf door je code lopen. Zodra een variabele wijzigt schrijf je die waarde in de kolom en zak je een regel op het papier. Als je in een statement een variabele moet lezen kijk je naar z'n laatste waarde. Zo kan je stap voor stap begrijpen wat je code doet, en waarom het fout gaat.
Verder heb je nog geen code toegevoegd om bouncing van de schakelaar op te vangen, zoals astrofrost suggereerde. Gebruik even de zoekfunctie om voorbeeldcode voor debouncing te vinden. Debouncing is noodzakelijk om een drukknop goed te kunnen gebruiken.
Tenslotte, nogmaals, probeer eerst eens iets met 1 schakelaar en 1 led werkend te krijgen en breidt dat dan uit.
If you think education is expensive, try ignorance! (Derek Bok)
Re: net met arduino bezig en loop klem op iets simpels
beste karel
met hekjes bedoel ik inderdaad de accolades ik wist de naam niet weer iets geleerd
ik begrijp de code gewoon niet
jou vraag (Klopt het dat je in deze functie alleen code uitvoert als na de digitalRead(buttonPin2) geldt dat buttonState2 != lastButtonState2 ?) kan ik dus ook niet goed beantwoorden
maar bedoel je dat ik nu in de code heb staan dat hij alleen digitalRead(buttonPin2) leest als buttonState2 != lastButtonState2 dus als dit anders is gaat hij niet verder ?
ik heb de code even kleiner gemaakt met alleen in button en 2 ledjes maar nog zonder de bouncing code want daar moet ik me vervolgens even goed in verdiepen
en dit werkt hoe kan ik nu het beste te werk gaan om het verder uit te breiden ?
groet dirk
met hekjes bedoel ik inderdaad de accolades ik wist de naam niet weer iets geleerd
ik begrijp de code gewoon niet
jou vraag (Klopt het dat je in deze functie alleen code uitvoert als na de digitalRead(buttonPin2) geldt dat buttonState2 != lastButtonState2 ?) kan ik dus ook niet goed beantwoorden
maar bedoel je dat ik nu in de code heb staan dat hij alleen digitalRead(buttonPin2) leest als buttonState2 != lastButtonState2 dus als dit anders is gaat hij niet verder ?
ik heb de code even kleiner gemaakt met alleen in button en 2 ledjes maar nog zonder de bouncing code want daar moet ik me vervolgens even goed in verdiepen
en dit werkt hoe kan ik nu het beste te werk gaan om het verder uit te breiden ?
- Code: Alles selecteren
void setup() {
// initialize the button pin as a input:
pinMode(buttonPin1, INPUT);
// initialize the LED as an output:
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop () {
// read the pushbutton input pin:
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 != lastButtonState1)
if (buttonState1 == HIGH)
buttonPushCounter1++;
lastButtonState1 = buttonState1;
if (buttonPushCounter1 % 2 == 0) {
digitalWrite(ledPin1, HIGH);
delay(1000); // wait for a second
digitalWrite(ledPin2, HIGH);
} else {
digitalWrite(ledPin2, LOW);
delay(1000); // wait for a second
digitalWrite(ledPin1, LOW);
}
}
groet dirk
28 berichten
• Pagina 1 van 3 • 1, 2, 3
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 26 gasten