Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <pt.h>
- static struct pt pt1, pt2;
- int rlpin = 6;
- int ledpin = 7;
- int btpin = 9;
- int pinstate[10] = {0, 0, 0 , 0, 0, 0, 0, 0, 0, 0};
- int pinpstate[10] = {0, 0, 0 , 0, 0, 0, 0, 0, 0, 0};
- unsigned long chrono[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- int count = 0;
- void setup() // exucute au lancement du programme
- {
- pinMode(ledpin, OUTPUT); // Init
- pinMode(rlpin, OUTPUT);
- pinMode(btpin, INPUT);
- PT_INIT(&pt1);
- PT_INIT(&pt2);
- //digitalWrite(ledpin, pinstate[ledpin]);
- }
- int timer_expired(int n, int timeout){
- return (millis() - chrono[n]) >= ( timeout * 1000);
- }
- void timer_set(int n){
- chrono[n] = millis(); // millis() renvoit l'uptime en ms.
- }
- int etat(int pin){
- pinstate[pin] = digitalRead(pin);
- if (pinstate[pin] == 1 && pinpstate[pin] == 0) pinpstate[pin] = pinstate[pin]; return 1;
- if (pinstate[pin] == 0 && pinpstate[pin] == 1) pinpstate[pin] = pinstate[pin]; return 2;
- return 0;
- }
- void toggle(int pin)
- {
- pinstate[pin] ^= 1;
- digitalWrite(pin, pinstate[pin]);
- }
- PT_THREAD(onoff(struct pt *pt, int pin, int delay1, int delay2))
- {
- PT_BEGIN(pt);
- while(1)
- {
- PT_WAIT_UNTIL(pt, pinstate[pin] == 0 && timer_expired(pin, delay2)); // pin utilisé comme ident pr chrono[]
- toggle(pin);
- timer_set(1);
- PT_WAIT_UNTIL(pt, pinstate[pin] == 1 && timer_expired(pin, delay1));
- toggle(pin);
- timer_set(1);
- }
- PT_END(pt);
- }
- void loop() // boucle while (1)
- {
- onoff(&pt1, rlpin, 3, 5);
- }
Add Comment
Please, Sign In to add comment