#define AH_PB_IN 16 // wejscie z przycisku autohold
#define AH_PB_OUT 14 // wyjscie na sterowanie przyciskiem (emulacja wcisniecia)
#define AH_LED_OUT 25 // wyjscie na sterowanie dioda LED na przycisku autohold
#define AH_LED_IN 4 // wejscie do sprawdzania stanu diody LED na przycisku - sprawdzanie statusu autohold
#include<EEPROM.h>
#include<Arduino.h>
bool lastState = HIGH;
bool currentState = LOW;
bool module_mode = true;
byte eeprom_value = 0;
unsigned long previousMillis_2 = 0;
unsigned long currentMillis = 0;
unsigned long pressedTime = 0;
unsigned long releasedTime = 0;
unsigned long pressDuration = 0;
void setup()
{
Serial.begin(9600);
delay(100);
Serial.println("Serial ready");
pinMode(AH_PB_IN, INPUT);
pinMode(AH_PB_OUT, OUTPUT);
pinMode(AH_LED_OUT, OUTPUT);
pinMode(AH_LED_IN, INPUT);
EEPROM.begin(4);
delay(100);
eeprom_value = EEPROM.read(0);
module_mode = bitRead(eeprom_value,0);
Serial.println("Serial ready");
Serial.println(module_mode);
if (module_mode == true)
{
digitalWrite(AH_LED_OUT, HIGH); // potwierdzenie dioda ze modul jest aktywny
delay(1000);
digitalWrite(AH_LED_OUT, LOW);
}
}
void loop()
{
currentMillis = millis(); //przypisanie wartosci czasu w chwili obecnej
currentState = digitalRead(AH_PB_IN);
if(lastState == HIGH && currentState == LOW) // przycisk wcisniety
{
pressedTime = millis();
}
else if(lastState == LOW && currentState == HIGH) // przycisk zwolniony
{
releasedTime = millis();
pressDuration = releasedTime - pressedTime;
if( pressDuration > 2000) //jesli czas wcisniecia przycisku byl dluzszy niz 2s wtedy nastepuje zmiana trybu na przeciwny i zapis do eeprom
{
Serial.println(module_mode);
//module_mode = !module_mode;
module_mode = !module_mode;
Serial.println(module_mode);
bitWrite(eeprom_value, 0, module_mode); // write 1 to the least significant bit of x
EEPROM.write(0, eeprom_value);
delay(100);
EEPROM.commit();
delay(100);
eeprom_value = EEPROM.read(0);
module_mode = bitRead(eeprom_value,0);
Serial.println(module_mode);
digitalWrite(AH_LED_OUT, HIGH); // zmiana trybu potwierdzona jest mignieciem diody
delay(250);
digitalWrite(AH_LED_OUT, LOW);
delay(250);
digitalWrite(AH_LED_OUT, HIGH);
delay(250);
digitalWrite(AH_LED_OUT, LOW);
pressDuration = 0;
releasedTime = 0;
pressedTime = 0;
}
}
lastState = currentState;
if (module_mode == true)
{
Serial.println("trtrt");
if (digitalRead(AH_LED_IN) == HIGH) //jesli dioda LED AH jest wylaczona
{
if ((currentMillis - previousMillis_2) >5000) //jesli jest wiecej niz 5s
{
digitalWrite(AH_PB_OUT, HIGH); // symuluj wcisniecie przycisku autohold
delay(500); // czekaj 500ms
digitalWrite(AH_PB_OUT, LOW); // zakoncz symulowanie wcisniecia przycisku autohold
previousMillis_2 = millis();
Serial.println("xxxxxxxxxxxxxxxxx");
Serial.println(module_mode);
}
}
}
}