17-12-2017, 10:35
Znowu mam problem, i mam nadzieję że przez jakąś głupotę a nie kompletnie odwrotne myślenie
Może najpierw nakreślę co chciałbym by mój program robił, biblioteka która mi pomaga to OneButton:
Gdzie popełniam karygodny błąd ?
Przekaźniki są sterowane stanem niskim jakby co.
Może najpierw nakreślę co chciałbym by mój program robił, biblioteka która mi pomaga to OneButton:
- Klikam guzik - załącza się przekaźnik 1
- Klikam guzik ponownie - załącza się przekaźnik 2, a wyłącza 1:
a) W tym trybie jak przytrzymam guzik 1, załączy się przekaźnik 3, 1 i 2 się wyłączy i wróci do trybu 2.
- Klikam guzik ponownie - wyłączają się wszystkie przekaźniki
Kod:
#include "OneButton.h"
#define guzik 13
#define rel 5
#define rel2 6
#define rel3 7
OneButton start(13, true);
typedef enum {
ACTION_OFF,
ACTION_1,
ACTION_2,
}
MyActions;
MyActions nextAction = ACTION_OFF;
void setup() {
Serial.begin(9600);
pinMode(guzik, INPUT_PULLUP);
pinMode(rel, OUTPUT);
pinMode(rel2, OUTPUT);
pinMode(rel3, OUTPUT);
digitalWrite(rel, HIGH);
digitalWrite(rel2, HIGH);
digitalWrite(rel3, HIGH);
start.attachClick(click1);
start.attachDuringLongPress(longPress1);
start.setDebounceTicks(50);
}
void loop() {
// keep watching the push buttons:
start.tick();
if (nextAction == ACTION_OFF) {
digitalWrite(rel, HIGH);
digitalWrite(rel2, HIGH);
digitalWrite(rel3, HIGH);
}
else if (nextAction == ACTION_1) {
digitalWrite(rel, HIGH);
digitalWrite(rel2, LOW);
digitalWrite(rel3, HIGH);
}
else if (nextAction == ACTION_2) {
digitalWrite(rel, LOW);
digitalWrite(rel2, LOW);
digitalWrite(rel3, HIGH);
}
}
void click1() {
if (nextAction == ACTION_OFF) {
nextAction = ACTION_1;
}
else if (nextAction == ACTION_1) {
nextAction == ACTION_2;
}
else if (nextAction == ACTION_2) {
nextAction == ACTION_OFF;
}
}
void longPress1 () {
if (nextAction == ACTION_2) {
digitalWrite(rel, HIGH);
digitalWrite(rel2, HIGH);
digitalWrite(rel3, LOW);
}
}
void doubleclick1() {
nextAction == ACTION_OFF;
}
Przekaźniki są sterowane stanem niskim jakby co.