Pushbutton moet deze uit de loop halen.

Software die niet past in bovenstaande onderwerpen
Berichten: 5
Geregistreerd: 21 Mrt 2014, 14:18

Pushbutton moet deze uit de loop halen.

Berichtdoor JeroenSAR » 15 Apr 2016, 14:49

beste forumleden,

heb mijn oude projectje weer eens opgepakt. nu zit ik met het volgende, ik heb een programmaatje geschreven wat mijn pager aan en uit kan zetten en aan kan zetten.
nu probeerde ik het met ipv 2 pushbuttons naar 1 te verwerken.

dus Pageroff moet hij stoppen met de loop
en Pager on moet hij ook maar 1 keer doen maar dan moet de loop wel blijven draaien. dus voor me gevoel moet ik bepaalde dingen een level hoger zetten.
ik heb het nu even gerealiseerd met een relaisboard maar dat worden optocouplers.

cpp code
// Include our library :)
#include <relay8.h>

//Digital Input
const int di_Pager_On_Off = 2; // the pin that the pushbutton is attached to


//digital Output
relay8 relay(12, 11, 10, 9);
/* Relay 1 = 12 (<) Pager Buttons
Relay 2 = 11 (>) Pager Buttons
Relay 3 = 10 (II) Pager Buttons
Relay 4 = 9 (O) Pager Buttons
*/
const int do_System_On = 6;

// Variables will change:
int buttonPushCounter_Pager_On_Off = 0; // counter for the number of button presses
int buttonState_Pager_On_Off = 0; // current state of the button
int lastbuttonState_Pager_On_Off = 0; // previous state of the button

void setup() {
// initialize the button pin as a input:
pinMode(di_Pager_On_Off, INPUT);
// initialize the LED as an output:
pinMode(do_System_On, OUTPUT);
// initialize serial communication:
Serial.begin(9600);
}


void loop() {

// read the pushbutton input pin:
buttonState_Pager_On_Off = digitalRead(di_Pager_On_Off);

// compare the buttonState_Pager_On_Off to its previous state
if (buttonState_Pager_On_Off != lastbuttonState_Pager_On_Off) {
// if the state has changed, increment the counter
if (buttonState_Pager_On_Off == HIGH) {
// if the current state is HIGH then the button
// wend from off to on:
buttonPushCounter_Pager_On_Off++;
Serial.println("on");
Serial.print("Pager: ");
Serial.println(buttonPushCounter_Pager_On_Off);
}
else {
Serial.println("off");
}
// Delay a little bit to avoid bouncing
delay(50);
}
// save the current state as the last state,
//for next time through the loop
lastbuttonState_Pager_On_Off = buttonState_Pager_On_Off;


// turns on the LED every 2 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 (buttonPushCounter_Pager_On_Off % 2 == 1) {
relay.on(4); //<
delay(500);
relay.off(4);
delay(5000);
relay.on(4); //<
delay(500);
relay.off(4);
delay(5000);
relay.on(4); //<
delay(500);
relay.off(4);
digitalWrite(do_System_On, HIGH);
} else {
relay.on(1); //<
delay(500);
relay.off(1);
delay(500);
relay.on(3);//II
delay(500);
relay.off(3);
delay(500);
relay.on(1); //<
delay(500);
relay.off(1);
delay(500);
relay.on(1); //<
delay(500);
relay.off(1);
delay(500);
relay.on(1); //<
delay(500);
relay.off(1);
delay(500);
relay.on(3); //<
delay(500);
relay.off(3);
delay(500);
relay.on(2); //<
delay(500);
relay.off(2);
digitalWrite(do_System_On, LOW);
}
}


ik hoop dat een van jullie een oplossing heeft.

Advertisement

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

Re: Pushbutton moet deze uit de loop halen.

Berichtdoor nicoverduin » 15 Apr 2016, 16:06

Bij de Arduino kun je namelijk ook output poorten lezen.
Nu zet je aan het eind van de laatste if-else de digital poort HIGH cq LOW. Als je nu na de if ook nog eens checked die uitgang LOW is dan weet je dat je dit stukje code nog niet hebt uitgevoerd en moet je het dus nog uitvoeren. En bij de Else kant hetzelfde verhaal. Ik had natuurlijk zo de oplossing hier kunnen zetten maar dat mag je zelf ff uitvogelen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Pushbutton moet deze uit de loop halen.

Berichtdoor shooter » 15 Apr 2016, 17:54

en een ingang is HIGH of LOW (gelijk aan true en false en is geen integer.
(het werkt wel maar is niet slim.
verder de delay eruit halen en je loop snel laten lopen dan kun je een druk tenminste gelijk zien.
paul deelen
shooter@home.nl

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten