Finalize better reading of full string over i2c and splitting

This commit is contained in:
Kenwood 2021-07-03 23:57:17 -04:00
parent aa575f67a3
commit 83a33cc202
1 changed files with 28 additions and 7 deletions

View File

@ -11,7 +11,11 @@
Servo windowWiperServo; Servo windowWiperServo;
// This is a variable capable of storing up to 4 items // This is a variable capable of storing up to 4 items
char instruction[4] = ""; char instruction[32] = "";
// Values for the id, and raw value of an instruction
char * id;
char * raw_value;
void setup() { void setup() {
// Attach the wiper servo to pin 9 // Attach the wiper servo to pin 9
@ -21,12 +25,12 @@ void setup() {
Serial.begin(9600); Serial.begin(9600);
// This is the address the pi will speak to us at // This is the address the pi will speak to us at
Wire.begin(0x8); Wire.begin(0x4);
// Call receiveEvent when data received // Call receiveEvent when data received
Wire.onReceive(receiveEvent); Wire.onReceive(receiveEvent);
Serial.print("Finished Setup."); Serial.println("Finished Setup.");
} }
// Just loop to keep the running code alive, and wait for events to happen. // Just loop to keep the running code alive, and wait for events to happen.
@ -36,10 +40,27 @@ void loop() {
// This method runs when we receive a message // This method runs when we receive a message
void receiveEvent(int n) { void receiveEvent(int n) {
for (int i = 0; i < n; i++) //n is equal to the number of data bytes received
{ for (int i = 0; i < n; i++) {
instruction[i] = Wire.read(); instruction[i] = Wire.read();
instruction[i + 1] = '\0'; //add null after ea. char
}
//RPi first byte is cmd byte so shift everything to the left 1 pos so temp contains our string
for (int i = 0; i < n; ++i)
instruction[i] = instruction[i + 1];
id = strtok (instruction, "-");
raw_value = strtok (NULL, "-");
int value = atoi(raw_value);
Serial.println(id);
Serial.println(value);
// Switch statements dont work on char *
if (strcmp(id,"WIPE") == 0) // if id, and WIPE cancel out
{
windowWiperServo.write(value);
} }
Serial.print(instruction);
} }