Potrzebuje sterować przekaźnikami w zależności od długości impulsu podanego na pin.
Dla przykładu podanie krótkiego impulsu załącza przekaźnik nr 1, następny impuls go wyłącza.
Podanie długiego impulsu załącza przekaźnik nr 1 i nr 2, następny impuls je wyłącza. Z tym że na początku impulsu załącza się nr 1 a po 1 sek nr 2.
Nie mogę poradzić sobie ze zmianą, która kolejnym krótkim impulsem wyłączyłaby oba przekaźniki
Dla przykładu podanie krótkiego impulsu załącza przekaźnik nr 1, następny impuls go wyłącza.
Podanie długiego impulsu załącza przekaźnik nr 1 i nr 2, następny impuls je wyłącza. Z tym że na początku impulsu załącza się nr 1 a po 1 sek nr 2.
Nie mogę poradzić sobie ze zmianą, która kolejnym krótkim impulsem wyłączyłaby oba przekaźniki
Kod:
int przekaznik1 = 10; //przekaznik1 podłączamy do pinu 10
int przekaznik2 = 11; //przekaznik2 podłączamy do pinu 11
unsigned long keyPrevMillis = 0;
const unsigned long keySampleIntervalMs = 25;
byte longKeyPressCountMax = 15; // 80 * 25 = 2000 ms
byte longKeyPressCount = 0;
byte prevKeyState = HIGH; // button is active low
const byte keyPin = 2; //przycisk podłączamy do pinu 2 - stan niski
bool sp1 = true; //zmienna boolowska sp1 do steowania stanem przekaznika1
bool sp2 = true; //zmienna boolowska sp2 do steowania stanem przekaznika2
// krótkie naciśniecie ponizej 1 sek
void shortKeyPress() {
Serial.println("krotkie wcisniecie");
sp1=!sp1; //zaneguj zmienną sp1
digitalWrite(przekaznik1, sp1); //stan przekaźnika 1 ustaw taki jak jest stan sp1
delay(1000); //odczekaj 1000ms
}
// dlugie nacisniecie powyzej 1 sek
void longKeyPress() {
Serial.println("dlugie wcisniecie");
sp2=!sp2; //zaneguj zmienną sp2
digitalWrite(przekaznik1, sp2); //stan przekaźnika 1 ustaw taki jak jest stan sp2
digitalWrite(przekaznik2, sp2); //stan przekaźnika 2 ustaw taki jak jest stan sp2
delay(1000);
}
// wcisniecie
void keyPress() {
Serial.println("przycisk wcisniety");
longKeyPressCount = 0;
}
// zwolnienie
void keyRelease() {
Serial.println("przycisk zwolniony");
if (longKeyPressCount >= longKeyPressCountMax) {
longKeyPress();
}
else {
shortKeyPress();
}
}
void setup() {
Serial.begin(115200);
pinMode(przekaznik1, OUTPUT); //przekaznik 1 jako wyjście
pinMode(przekaznik2, OUTPUT); //przekaznik 2 jako wyjście
pinMode(keyPin, INPUT_PULLUP); //przycisk1 jako wejście z programowym pull-upem
digitalWrite(przekaznik1, HIGH); //stan początkowy przekaznika 1 wysoki
digitalWrite(przekaznik2, HIGH); //stan początkowy przekaznika 2 wysoki
}
void loop() {
// Sekcja zarządzania przyciskiem
if (millis() - keyPrevMillis >= keySampleIntervalMs) {
keyPrevMillis = millis();
byte currKeyState = digitalRead(keyPin);
if ((prevKeyState == HIGH) && (currKeyState == LOW)) {
keyPress();
}
else if ((prevKeyState == LOW) && (currKeyState == HIGH)) {
keyRelease();
}
else if (currKeyState == LOW) {
longKeyPressCount++;
}
prevKeyState = currKeyState;
}
}