meerdere schakelaars
10 berichten
• Pagina 1 van 1
meerdere schakelaars
cpp code
deze werkt niet waarom niet ?
const int knopPin = 2; // De schakelaar of drukknop zit op Pin 2.
const int ledPin = 13; // De LED zit op Pin 13.
const int knopPin1 = 3;
const int ledPin1 = 12;
int knopStatus = 0;
int knopStatus1 = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(knopPin, INPUT);
pinMode(ledPin1,OUTPUT);
pinMode(knopPin1,INPUT);
}
void loop() {
knopStatus = digitalRead(knopPin);
knopStatus1 = digitalRead(knopPin1);
if (knopStatus == HIGH)
if (knopStatus1 == HIGH)
{
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin1,HIGH);
}
else {
digitalWrite(ledPin, LOW);
digitalWrite(ledPin1,LOW);
}
}
deze werkt niet waarom niet ?
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: meerdere schakelaars
Wat moet ie doen dan?
Re: meerdere schakelaars
zoals je kan zien probeer ik twee leds apart aan te zetten, liefst ook nog zo dat die aan blijft tot dat ik weer een puls geef en hij dan uit gaat.
zoals hij er nu uit ziet zet die meteen alle twee de leds aan en werken de knopjes niet
zoals hij er nu uit ziet zet die meteen alle twee de leds aan en werken de knopjes niet
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: meerdere schakelaars
a) Als je een knop aansluit moet je kiezen of je deze naar GND trekt of naar de VCC als aan. Je kunt bijvoorbeeld INPUT_PULLUP gebruiken ipv INPUT bij pinMode(). Dan moet je de knop naar GND schakelen en wordt hij LOW als de knop is ingedrukt.
b) Als je wilt dat de knop HIGH is bij aan, moet je een 10K weerstand nemen en deze van de datapin naar GND trekken. De schakelaar komt tussen de pin en VCC.
c) als je nu gewoon een knop tussen de GND en de datapin hebt aangesloten zonder een weerstand naar VCC dan zweeft de knop. EN als je hem dan indrukt wordt deze LOW.
Google eens op "button arduino tutorial". Dan vind je vast wel iets.
Om een knop aan te houden bij de eerste indruk en weer uit bij de tweede indruk, dan moet je een kleine aanpassing doen in de digitalWrite. namelijk:
cpp code
Dit is wel de meest eenvoudige vorig.
Overigens is de code nu zo dat er alleen iets gebeurt als beide pinnen zijn ingedrukt.
TIP
Als je werkt met if statements, gebruik dan ALTIJD een open en sluit accolade. Het hoeft niet maar zonder wordt alleen het volgende statement uitgevoerd. Het is handiger om consequent te zijn en het altijd toe te passen want dan gaat het altijd goed. Dan hoef je er namelijk nooit over na te denken.
Het argument over efficiëntere code gaat hier niet op. De compiler heeft ingebouwde optimalisaties. En als het echt nodig is, dan kun je beter assembly gaan leren en behoren tot een select gezelschap die het nog beheersen. Ik schat in dat 90% van de programmeurs (zo niet meer) dit niet beheersen.
b) Als je wilt dat de knop HIGH is bij aan, moet je een 10K weerstand nemen en deze van de datapin naar GND trekken. De schakelaar komt tussen de pin en VCC.
c) als je nu gewoon een knop tussen de GND en de datapin hebt aangesloten zonder een weerstand naar VCC dan zweeft de knop. EN als je hem dan indrukt wordt deze LOW.
Google eens op "button arduino tutorial". Dan vind je vast wel iets.
Om een knop aan te houden bij de eerste indruk en weer uit bij de tweede indruk, dan moet je een kleine aanpassing doen in de digitalWrite. namelijk:
cpp code
digitalWrite(ledPin, !digitalRead(ledPin));
Dit is wel de meest eenvoudige vorig.
Overigens is de code nu zo dat er alleen iets gebeurt als beide pinnen zijn ingedrukt.
TIP
Als je werkt met if statements, gebruik dan ALTIJD een open en sluit accolade. Het hoeft niet maar zonder wordt alleen het volgende statement uitgevoerd. Het is handiger om consequent te zijn en het altijd toe te passen want dan gaat het altijd goed. Dan hoef je er namelijk nooit over na te denken.
Het argument over efficiëntere code gaat hier niet op. De compiler heeft ingebouwde optimalisaties. En als het echt nodig is, dan kun je beter assembly gaan leren en behoren tot een select gezelschap die het nog beheersen. Ik schat in dat 90% van de programmeurs (zo niet meer) dit niet beheersen.
Re: meerdere schakelaars
cpp code
void loop() {
knopStatus = digitalRead(knopPin);
knopStatus1 = digitalRead(knopPin1);
if (knopStatus == HIGH){
digitalWrite(ledPin, HIGH);
}else {
digitalWrite(ledPin, LOW);
}
if (knopStatus1 == HIGH){
digitalWrite(ledPin1,HIGH);
}else{
digitalWrite(ledPin1,LOW);
}
}
paul deelen
shooter@home.nl
shooter@home.nl
Re: meerdere schakelaars
cpp code
opdracht: aan/uit zul je zelf moeten bedenken: je moet dus ook de status bijhouden en in de IF zetten.
void loop() {
knopStatus = digitalRead(knopPin);
knopStatus1 = digitalRead(knopPin1);
if (knopStatus == HIGH){
digitalWrite(ledPin, HIGH);
}else {
digitalWrite(ledPin, LOW);
}
if (knopStatus1 == HIGH){
digitalWrite(ledPin1,HIGH);
}else{
digitalWrite(ledPin1,LOW);
}
delay (10);
}
opdracht: aan/uit zul je zelf moeten bedenken: je moet dus ook de status bijhouden en in de IF zetten.
paul deelen
shooter@home.nl
shooter@home.nl
Re: meerdere schakelaars
Een oplossing met het Automaton framework:
cpp code
Wil je liever de led's aan laten gaan als je de knoppen indrukt en uit als je de knoppen loslaat? Gebruik dan deze callback variant:
cpp code
Automaton library: https://github.com/tinkerspy/Automaton
cpp code
#include <Automaton.h>
#include <Atm_button.h>
#include <Atm_led.h>
Atm_led led[2];
Atm_button button[2];
Factory factory;
void btn_change( int press, int idx )
{
if ( press ) {
led[idx].trigger( led[idx].state() ? Atm_led::EVT_OFF : Atm_led::EVT_ON ); // Toggle
}
}
void setup()
{
led[0].begin( 3 );
led[1].begin( 4 );
button[0].begin( 7 ).onPress( btn_change, 0 );
button[1].begin( 8 ).onPress( btn_change, 1 );
factory.add( led[0] ).add( led[1] ).add( button[0] ).add( button[1] );
}
void loop()
{
factory.cycle();
}
Wil je liever de led's aan laten gaan als je de knoppen indrukt en uit als je de knoppen loslaat? Gebruik dan deze callback variant:
cpp code
void btn_change( int press, int idx )
{
if ( press ) {
led[idx].trigger( Atm_led::EVT_ON );
} else {
led[idx].trigger( Atm_led::EVT_OFF );
}
}
Automaton library: https://github.com/tinkerspy/Automaton
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: meerdere schakelaars
Mooie library!!! In hoeverre kun je dit nu vergelijken met de laatste varianten van RTOS voor Arduino die wel een hele kleine footprint hebben?
Re: meerdere schakelaars
nicoverduin schreef:Mooie library!!! In hoeverre kun je dit nu vergelijken met de laatste varianten van RTOS voor Arduino die wel een hele kleine footprint hebben?
Dank je. Ik heb nooit serieus naar RTOS voor Arduino gekeken, ik heb wel dit platform gebruikt (gebaseerd op FreeRTOS) voor mijn garagedeurbesturing (de ethernetversie - rock solid):
https://en.wikipedia.org/wiki/OpenPicus
Dat was het eerste platform waarop ik met state machines ben gaan werken om ingewikkelde processen vorm te geven wat uiteindelijk heeft geleid tot Automaton.
Ik vind state machines een prettige manier om hardwarebesturing in te richten, je krijgt een heel duidelijke scheiding van functies. Het feit dat het geheel vervolgens multitasking wordt is een leuk extraatje.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: meerdere schakelaars
Rtos op arduino is gewoon freertos maar dan gestript. Je moet wel:)
10 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 70 gasten