• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zmiana stanu przekaźników jednym guzikiem - OneButton
#1
Znowu mam problem, i mam nadzieję że przez jakąś głupotę a  nie kompletnie odwrotne myślenie Smile


Może najpierw nakreślę co chciałbym by mój program robił, biblioteka która mi pomaga to OneButton:
  1. Klikam guzik - załącza się przekaźnik 1
  2. 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.
  3. 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;

}
Gdzie popełniam karygodny błąd ? Smile
Przekaźniki są sterowane stanem niskim jakby co.
 
Odpowiedź
  


Wiadomości w tym wątku
Zmiana stanu przekaźników jednym guzikiem - OneButton - przez bullseye - 17-12-2017, 10:35

Skocz do:


Przeglądający: 1 gości