meerdere schakelaars

Arduino specifieke Software
Berichten: 46
Geregistreerd: 13 Jan 2016, 11:00

meerdere schakelaars

Berichtdoor dinoshop » 20 Jan 2016, 16:50

cpp code
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

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

Re: meerdere schakelaars

Berichtdoor nicoverduin » 20 Jan 2016, 20:16

Wat moet ie doen dan?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 46
Geregistreerd: 13 Jan 2016, 11:00

Re: meerdere schakelaars

Berichtdoor dinoshop » 20 Jan 2016, 20:40

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

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

Re: meerdere schakelaars

Berichtdoor nicoverduin » 20 Jan 2016, 21:10

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
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.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: meerdere schakelaars

Berichtdoor shooter » 20 Jan 2016, 21:33

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

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: meerdere schakelaars

Berichtdoor shooter » 20 Jan 2016, 21:36

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);
}
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

Berichten: 2
Geregistreerd: 09 Apr 2016, 12:44

Re: meerdere schakelaars

Berichtdoor tinkerspy » 09 Apr 2016, 13:03

Een oplossing met het Automaton framework:

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

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

Re: meerdere schakelaars

Berichtdoor nicoverduin » 09 Apr 2016, 15:08

Mooie library!!! In hoeverre kun je dit nu vergelijken met de laatste varianten van RTOS voor Arduino die wel een hele kleine footprint hebben?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 2
Geregistreerd: 09 Apr 2016, 12:44

Re: meerdere schakelaars

Berichtdoor tinkerspy » 10 Apr 2016, 09:34

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.

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

Re: meerdere schakelaars

Berichtdoor nicoverduin » 10 Apr 2016, 11:58

Rtos op arduino is gewoon freertos maar dan gestript. Je moet wel:)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 70 gasten