73 lines
No EOL
1.6 KiB
C++
73 lines
No EOL
1.6 KiB
C++
#include <EEPROM.h>
|
|
|
|
const int bjtCount = 4;
|
|
|
|
const int bjtPin[bjtCount] = {6, 5, 3, 10};
|
|
const int btnPin[bjtCount] = {7, 8, 9, 4};
|
|
int bjtState[bjtCount] = {255, 255, 255, 255}; //255 -> bjt max "open"
|
|
|
|
byte btnState[bjtCount];
|
|
byte lastbtnState[bjtCount];
|
|
String receivedData;
|
|
String pendingData;
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(9600);
|
|
Serial.setTimeout(5);
|
|
|
|
for (int i = 0; i < bjtCount; i++)
|
|
{
|
|
pinMode(btnPin[i], INPUT_PULLUP);
|
|
pinMode(bjtPin[i], OUTPUT);
|
|
bjtState[i] = EEPROM.read(i);
|
|
digitalWrite(bjtPin[i], bjtState[i]);
|
|
}
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
while (Serial.available())
|
|
{
|
|
receivedData = Serial.readString(); //FORMAT: 0123 -> toggles all bjts | 12 -> toggles only bjts with the index 1 and 2
|
|
Serial.flush();
|
|
}
|
|
|
|
for (int i = 0; i < bjtCount; i++)
|
|
{
|
|
btnState[i] = digitalRead(btnPin[i]);
|
|
|
|
if ((btnState[i] == LOW && btnState[i] != lastbtnState[i]) || (receivedData.indexOf(String(i)) >= 0))
|
|
{
|
|
receivedData.replace(String(i), "");
|
|
|
|
if (bjtState[i] != 0)
|
|
{
|
|
bjtState[i] = 0;
|
|
}
|
|
else
|
|
{
|
|
bjtState[i] = 255;
|
|
}
|
|
}
|
|
|
|
if (receivedData == "off")
|
|
{
|
|
bjtState[i] = 0;
|
|
}
|
|
|
|
if (receivedData == "on")
|
|
{
|
|
bjtState[i] = 255;
|
|
}
|
|
|
|
analogWrite(bjtPin[i], bjtState[i]);
|
|
EEPROM.update(i, bjtState[i]);
|
|
lastbtnState[i] = btnState[i];
|
|
pendingData += String(bjtState[i]) + ",";
|
|
}
|
|
|
|
Serial.println(pendingData);
|
|
pendingData = "";
|
|
receivedData = "";
|
|
} |