Added quick guide
This commit is contained in:
parent
069020ef33
commit
713ace2919
107
parser/core2_C_Parser.ino
Normal file
107
parser/core2_C_Parser.ino
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
#define BAUDRATE 57600
|
||||||
|
#define DEBUGOUTPUT 0
|
||||||
|
|
||||||
|
// checksum variables
|
||||||
|
byte generatedChecksum = 0;
|
||||||
|
byte checksum = 0;
|
||||||
|
int payloadLength = 0;
|
||||||
|
byte payloadData[64] = {0};
|
||||||
|
byte poorQuality = 0;
|
||||||
|
byte attention = 0;
|
||||||
|
byte meditation = 0;
|
||||||
|
|
||||||
|
// system variables
|
||||||
|
long lastReceivedPacket = 0;
|
||||||
|
boolean bigPacket = false;
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
|
// Microprocessor Setup //
|
||||||
|
//////////////////////////
|
||||||
|
void setup(){
|
||||||
|
Serial1.begin(BAUDRATE); // Serial port 1 (ATMEGA2560)
|
||||||
|
Serial.begin(BAUDRATE); // USB
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
// Read data from Serial UART //
|
||||||
|
////////////////////////////////
|
||||||
|
byte ReadOneByte() {
|
||||||
|
int ByteRead;
|
||||||
|
while(!Serial1.available());
|
||||||
|
ByteRead = Serial1.read();
|
||||||
|
|
||||||
|
#if DEBUGOUTPUT
|
||||||
|
Serial.print((char)ByteRead); // echo the same byte out the USB serial (for debug purposes)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ByteRead;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////
|
||||||
|
//MAIN LOOP//
|
||||||
|
/////////////
|
||||||
|
void loop() {
|
||||||
|
// Look for sync bytes
|
||||||
|
if(ReadOneByte() == 170) {
|
||||||
|
if(ReadOneByte() == 170) {
|
||||||
|
payloadLength = ReadOneByte();
|
||||||
|
if(payloadLength > 169) //Payload length can not be greater than 169
|
||||||
|
return;
|
||||||
|
|
||||||
|
generatedChecksum = 0;
|
||||||
|
for(int i = 0; i < payloadLength; i++) {
|
||||||
|
payloadData[i] = ReadOneByte(); //Read payload into memory
|
||||||
|
generatedChecksum += payloadData[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
checksum = ReadOneByte(); //Read checksum byte from stream
|
||||||
|
generatedChecksum = 255 - generatedChecksum; //Take one's compliment of generated checksum
|
||||||
|
|
||||||
|
if(checksum == generatedChecksum) {
|
||||||
|
|
||||||
|
poorQuality = 200;
|
||||||
|
attention = 0;
|
||||||
|
meditation = 0;
|
||||||
|
|
||||||
|
for(int i = 0; i < payloadLength; i++) { // Parse the payload
|
||||||
|
switch (payloadData[i]) {
|
||||||
|
case 2:
|
||||||
|
i++;
|
||||||
|
poorQuality = payloadData[i];
|
||||||
|
bigPacket = true;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
i++;
|
||||||
|
attention = payloadData[i];
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
i++;
|
||||||
|
meditation = payloadData[i];
|
||||||
|
break;
|
||||||
|
case 0x80:
|
||||||
|
i = i + 3;
|
||||||
|
break;
|
||||||
|
case 0x83:
|
||||||
|
i = i + 25;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
} // switch
|
||||||
|
} // for loop
|
||||||
|
|
||||||
|
#if !DEBUGOUTPUT
|
||||||
|
// *** Add your code here ***
|
||||||
|
if(bigPacket) {
|
||||||
|
Serial.print("Attention: ");
|
||||||
|
Serial.print(attention);
|
||||||
|
Serial.print("\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
bigPacket = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Checksum Error
|
||||||
|
} // end if else for checksum
|
||||||
|
} // end if read 0xAA byte
|
||||||
|
} // end if read 0xAA byte
|
||||||
|
}
|
Loading…
Reference in a new issue