#include <SoftwareSerial.h>
// ***
// *** Define the RX and TX pins. Choose any two
// ***
#define RX PB1 // ***
#define TX PB2 // ***
SoftwareSerial Serial(RX, TX);
#define AH_PB_IN 3 // wejscie z przycisku autohold
#define AH_PB_OUT 4 // wyjscie na sterowanie przyciskiem (emulacja wcisniecia)
#define AH_LED_OUT 1 // wyjscie na sterowanie dioda LED na przycisku autohold
#define AH_LED_IN 0 // 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;
int eeprom_int = 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);
Serial.println("Press the button.");
pinMode(AH_PB_IN, INPUT);
pinMode(AH_PB_OUT, OUTPUT);
pinMode(AH_LED_OUT, OUTPUT);
pinMode(AH_LED_IN, INPUT);
eeprom_int = EEPROM.read(2);
delay(200);
module_mode = bitRead(eeprom_int,0);
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
{Serial.print("ddd");
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
{
module_mode = !module_mode;
eeprom_int = module_mode;
EEPROM.write(2, eeprom_int);
delay(300);
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)
{
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();
}
}
}
}