#include "MyClass.h"
const unsigned int SIZE = 16;
bool startUp = false;
int leds[] = {53, 51, 49, 47, 45, 43, 41, 39, 37, 35, 33, 31, 29, 27, 25, 23};
int switches[] = {21, 20, 19, 18, 17, 16, 15, 14, 2, 3, 4, 5, 6, 7, 8, 9};
int potMeter[] = {A1, A2};
int extraLeds[] = {50, 48};
int button = 13;
MyClass output[SIZE];
bool command;
bool state;
char *incomingMessage = "";
bool messageComplete = false;
const int maxBufferIndex = 26;
int bufferIndex = 0;
char buffer[maxBufferIndex];
int valueCS;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Starting up");
for (int i = 0; i < SIZE; i++) {
output[i]= MyClass(leds[i], switches[i], button);
}
}
void loop() {
}
void serialEvent(){
while (Serial.available()){
char inChar = Serial.read();
buffer[bufferIndex] = inChar;
bufferIndex++;
if(inChar == '\n'){
buffer[bufferIndex] = {0};
valueCS = makeCheckSum(buffer, valueCS);
seperateHeadBodyTail(buffer);
readPotMeter();
bufferIndex = 0;
}
}
}
void seperateHeadBodyTail(char *data){
const char *delimeter = "&";
const char *endDelimeter = "#";
char *head = strtok(data, delimeter);
char *body = strtok(NULL, delimeter);
char *tail = strtok(NULL, endDelimeter);
devideHead(head);
devideBody(body);
}
void devideHead(char *headInfo){
const char *delimeter = "/";
char *id = strtok(headInfo, delimeter);
char *messageType = strtok(NULL, delimeter);
char *requestNumber = strtok(NULL, delimeter);
}
void devideBody(char *bodyInfo){
const char *delimeter1 = "/";
const char *delimeter2 = "$";
const char *delimeter3 = "_";
const char *delimeter4 = ".";
char *dataType = strtok(bodyInfo, delimeter1);
char *digOut = strtok(NULL, delimeter2);
char *anaOut = strtok(NULL, delimeter3);
char *anaVal1 = strtok(NULL, delimeter4);
char *anaVal2 = strtok(NULL, delimeter4);
unsigned long anaVal[] = {anaVal1, anaVal2};
readDigOut(digOut);
// Serial.println("String value is:");
// for (int i = 0; i < 2; i++) {
// readAnaValue(anaVal[i], i);
// }
// Serial.println("----------------");
}
void readDigOut(char *hexValue){
//Serial.println(hexValue);
char *endptr;
unsigned long value = strtoul(hexValue, &endptr, 16);
for(int i = 0; i < SIZE; i++){
bool state = (value & (1<<i));
if(state){
digitalWrite(leds[i], true);
// Serial.print("Turning LED ");
// Serial.print(i+1);
// Serial.println(" on");
}
else{
digitalWrite(leds[i], false);
}
}
}
void readAnaValue(char *analog, int i){
char *endptr;
unsigned long anaVal = strtoul(analog, &endptr, 16);
writeAnaValue(anaVal , i);
}
void writeAnaValue(unsigned long analog, int i){
double value = map(analog, 0, 1023, 0, 500); //mapping analog value to voltage
value = value/100;
Serial.print("Voltage value ");
Serial.print(i+1);
Serial.print(" = ");
Serial.println(value);
}
void readPotMeter(){
unsigned long analog[2];
analog[0] = analogRead(potMeter[0]);
analog[1] = analogRead(potMeter[1]);
// Serial.println("Pot value is: ");
// for (int i = 0; i < 2; i++) {
// writeAnaValue(analog[i], i);
// }
// Serial.println("----------------");
}
int makeCheckSum(char *inputString, int cs){
inputString = strtok(inputString, "\n");
unsigned int stringSize = strlen(inputString);
int valueCS = 0;
if(stringSize <= maxBufferIndex){
for (int i = 0; i < stringSize; i++) {
valueCS ^= inputString[i];
}
}
else{
Serial.println("String to big for buffer");
}
if(cs != valueCS){
//Serial.println(inputString);
sprintf(inputString, "%s%X#", inputString, valueCS);
Serial.println(inputString);
}
return valueCS;
}
// 5/1/0&0/3FF$3_3FF.3FF&CS#