Simplify main sketch

This commit is contained in:
GHOSCHT 2022-02-05 21:05:21 +01:00
parent 61b57c8a9e
commit 24b8c9ca40
No known key found for this signature in database
GPG key ID: A35BD466B8871994

View file

@ -1,119 +1,27 @@
#include <Arduino.h> #include <Arduino.h>
#include <EEPROM.h> #include <LightController.h>
#include <Wire.h> #include <SerialCommunicator.h>
#include <I2CCommunicator.h>
#define SLAVE_ADDR 9 StreamCommunicator *computer;
const int bjtCount = 4; StreamCommunicator *console;
LightController *light;
const int bjtPin[bjtCount] = {6, 5, 3, 10}; const int STEPS = 5;
int bjtState[bjtCount] = {255, 255, 255, 255}; //255 -> bjt max "open"
char receivedSerialData[4];
char receivedI2cData[4];
String pendingSerialData;
void changeLights(char data[])
{
for (int i = 0; i < bjtCount; i++)
{
char numChar[2];
itoa(i, numChar, 10);
if (data[0] == numChar[0])
{
if (data[1] == 't')
{
if (bjtState[i] != 0)
{
bjtState[i] = 0;
}
else
{
bjtState[i] = 255;
}
}
else if (data[1] == 'i')
{
bjtState[i] += 5;
}
else if (data[1] == 'd')
{
bjtState[i] -= 5;
}
}
//clamp state between 0 and 255
if (bjtState[i] > 255)
{
bjtState[i] = 255;
}
if (bjtState[i] < 0)
{
bjtState[i] = 0;
}
//set absolute state for all
if (!strcmp(data, "off"))
{
bjtState[i] = 0;
}
if (!strcmp(data, "on"))
{
bjtState[i] = 255;
}
analogWrite(bjtPin[i], bjtState[i]);
EEPROM.update(i, bjtState[i]);
}
memset(data, ' ', 3);
}
void receiveEvent(int byteCount)
{
char buffer[byteCount];
for (int i = 0; i < byteCount; i++)
{
buffer[i] = Wire.read();
}
memset(receivedI2cData, ' ', 3);
strcpy(receivedI2cData, buffer);
}
void setup() void setup()
{ {
Serial.begin(9600); int bjtCount = 4;
Serial.setTimeout(5); const int bjtPin[bjtCount] = {6, 5, 3, 10};
Wire.begin(SLAVE_ADDR); computer = new SerialCommunicator(Serial, 9600, 5, 50);
Wire.onReceive(receiveEvent); console = new I2CCommunicator(Wire, 9, 5, 50);
light = new LightController(bjtPin, bjtCount);
for (int i = 0; i < bjtCount; i++)
{
pinMode(bjtPin[i], OUTPUT);
bjtState[i] = EEPROM.read(i);
analogWrite(bjtPin[i], bjtState[i]);
}
} }
void loop() void loop()
{ {
while (Serial.available()) light->updateState(console->receiveMessage(), STEPS);
{ light->updateState(computer->receiveMessage(), STEPS);
strcpy(receivedSerialData, Serial.readString().c_str()); computer->sendMessage(light->getBjtState(), light->getBjtCount());
} computer->clearBuffer();
console->clearBuffer();
changeLights(receivedSerialData);
changeLights(receivedI2cData);
pendingSerialData = "";
for (int i = 0; i < bjtCount; i++)
{
noInterrupts();
pendingSerialData += String(bjtState[i]) + ",";
interrupts();
}
pendingSerialData.remove(pendingSerialData.length() - 1);
Serial.println(pendingSerialData);
} }