Buffer boundary check - test 1
This commit is contained in:
parent
383c903aa1
commit
1c0c744983
1 changed files with 122 additions and 118 deletions
|
@ -1,119 +1,123 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <EEPROM.h>
|
#include <EEPROM.h>
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
|
|
||||||
#define SLAVE_ADDR 9
|
#define SLAVE_ADDR 9
|
||||||
const int bjtCount = 4;
|
const int bjtCount = 4;
|
||||||
|
|
||||||
const int bjtPin[bjtCount] = {6, 5, 3, 10};
|
const int bjtPin[bjtCount] = {6, 5, 3, 10};
|
||||||
int bjtState[bjtCount] = {255, 255, 255, 255}; //255 -> bjt max "open"
|
int bjtState[bjtCount] = {255, 255, 255, 255}; //255 -> bjt max "open"
|
||||||
|
|
||||||
char receivedSerialData[4];
|
char receivedSerialData[4];
|
||||||
char receivedI2cData[4];
|
char receivedI2cData[4];
|
||||||
String pendingSerialData;
|
String pendingSerialData;
|
||||||
|
|
||||||
void changeLights(char data[])
|
void changeLights(char data[])
|
||||||
{
|
{
|
||||||
for (int i = 0; i < bjtCount; i++)
|
for (int i = 0; i < bjtCount; i++)
|
||||||
{
|
{
|
||||||
char numChar[2];
|
char numChar[2];
|
||||||
itoa(i, numChar, 10);
|
itoa(i, numChar, 10);
|
||||||
|
|
||||||
if (data[0] == numChar[0])
|
if (data[0] == numChar[0])
|
||||||
{
|
{
|
||||||
if (data[1] == 't')
|
if (data[1] == 't')
|
||||||
{
|
{
|
||||||
if (bjtState[i] != 0)
|
if (bjtState[i] != 0)
|
||||||
{
|
{
|
||||||
bjtState[i] = 0;
|
bjtState[i] = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bjtState[i] = 255;
|
bjtState[i] = 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (data[1] == 'i')
|
else if (data[1] == 'i')
|
||||||
{
|
{
|
||||||
bjtState[i] += 5;
|
bjtState[i] += 5;
|
||||||
}
|
}
|
||||||
else if (data[1] == 'd')
|
else if (data[1] == 'd')
|
||||||
{
|
{
|
||||||
bjtState[i] -= 5;
|
bjtState[i] -= 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//clamp state between 0 and 255
|
//clamp state between 0 and 255
|
||||||
if (bjtState[i] > 255)
|
if (bjtState[i] > 255)
|
||||||
{
|
{
|
||||||
bjtState[i] = 255;
|
bjtState[i] = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bjtState[i] < 0)
|
if (bjtState[i] < 0)
|
||||||
{
|
{
|
||||||
bjtState[i] = 0;
|
bjtState[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//set absolute state for all
|
//set absolute state for all
|
||||||
if (!strcmp(data, "off"))
|
if (!strcmp(data, "off"))
|
||||||
{
|
{
|
||||||
bjtState[i] = 0;
|
bjtState[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(data, "on"))
|
if (!strcmp(data, "on"))
|
||||||
{
|
{
|
||||||
bjtState[i] = 255;
|
bjtState[i] = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
analogWrite(bjtPin[i], bjtState[i]);
|
analogWrite(bjtPin[i], bjtState[i]);
|
||||||
EEPROM.update(i, bjtState[i]);
|
EEPROM.update(i, bjtState[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(data, ' ', 3);
|
memset(data, ' ', 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void receiveEvent(int byteCount)
|
void receiveEvent(int byteCount)
|
||||||
{
|
{
|
||||||
char buffer[byteCount];
|
char buffer[byteCount];
|
||||||
for (int i = 0; i < byteCount; i++)
|
for (int i = 0; i < byteCount; i++)
|
||||||
{
|
{
|
||||||
buffer[i] = Wire.read();
|
if (i == byteCount)
|
||||||
}
|
break;
|
||||||
memset(receivedI2cData, ' ', 3);
|
|
||||||
strcpy(receivedI2cData, buffer);
|
buffer[i] = Wire.read();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup()
|
memset(receivedI2cData, ' ', 3);
|
||||||
{
|
strcpy(receivedI2cData, buffer);
|
||||||
Serial.begin(9600);
|
}
|
||||||
Serial.setTimeout(5);
|
|
||||||
Wire.begin(SLAVE_ADDR);
|
void setup()
|
||||||
Wire.onReceive(receiveEvent);
|
{
|
||||||
|
Serial.begin(9600);
|
||||||
for (int i = 0; i < bjtCount; i++)
|
Serial.setTimeout(5);
|
||||||
{
|
Wire.begin(SLAVE_ADDR);
|
||||||
pinMode(bjtPin[i], OUTPUT);
|
Wire.onReceive(receiveEvent);
|
||||||
bjtState[i] = EEPROM.read(i);
|
|
||||||
analogWrite(bjtPin[i], bjtState[i]);
|
for (int i = 0; i < bjtCount; i++)
|
||||||
}
|
{
|
||||||
}
|
pinMode(bjtPin[i], OUTPUT);
|
||||||
|
bjtState[i] = EEPROM.read(i);
|
||||||
void loop()
|
analogWrite(bjtPin[i], bjtState[i]);
|
||||||
{
|
}
|
||||||
while (Serial.available())
|
}
|
||||||
{
|
|
||||||
strcpy(receivedSerialData, Serial.readString().c_str());
|
void loop()
|
||||||
}
|
{
|
||||||
|
while (Serial.available())
|
||||||
changeLights(receivedSerialData);
|
{
|
||||||
changeLights(receivedI2cData);
|
strcpy(receivedSerialData, Serial.readString().c_str());
|
||||||
|
}
|
||||||
pendingSerialData = "";
|
|
||||||
for (int i = 0; i < bjtCount; i++)
|
changeLights(receivedSerialData);
|
||||||
{
|
changeLights(receivedI2cData);
|
||||||
noInterrupts();
|
|
||||||
pendingSerialData += String(bjtState[i]) + ",";
|
pendingSerialData = "";
|
||||||
interrupts();
|
for (int i = 0; i < bjtCount; i++)
|
||||||
}
|
{
|
||||||
pendingSerialData.remove(pendingSerialData.length() - 1);
|
noInterrupts();
|
||||||
Serial.println(pendingSerialData);
|
pendingSerialData += String(bjtState[i]) + ",";
|
||||||
|
interrupts();
|
||||||
|
}
|
||||||
|
pendingSerialData.remove(pendingSerialData.length() - 1);
|
||||||
|
Serial.println(pendingSerialData);
|
||||||
}
|
}
|
Reference in a new issue