I've got a function that takes a variable called nullTermedPayload and splits it into firstToken and secondToken.
nullTermedPayload can be something like "A0:33.33" or "relay1:OFF"
I then want to run a comparison on firstToken. If the first five characters are equal to "relay" then I call the controlRelay function, passing in firstToken and secondToken, which goes directly into the call to digitalWrite(relay1,OFF)
char *firstToken, *secondToken, tempBuffer[25];
// strtok mutates the char array given it!!!
strcpy(tempBuffer, (const char *)nullTermedPayload);
firstToken = strtok(tempBuffer, ":");
Serial.print("First Token = ");
Serial.println(firstToken);
secondToken = strtok(NULL, ":");
Serial.print("Second Token = ");
Serial.println(secondToken);
if (strncmp(firstToken, "relay", 5)) {
controlRelay(firstToken, secondToken);
};
void controlRelay(const char* relay, const char* state) {
digitalWrite(relay, state);
}
The error that I'm getting is, yet again, a problem with invalid data types, which constitute 99% of my errors.
/home/admin/Workspace/Arduino/WemosD1MiniCloudMQTT/WemosD1MiniCloudMQTT.ino: In function 'void controlRelay(const char*, const char*)':
WemosD1MiniCloudMQTT:146: error: invalid conversion from 'const char*' to 'uint8_t {aka unsigned char}' [-fpermissive]
digitalWrite(relay, state);
^
In file included from sketch/WemosD1MiniCloudMQTT.ino.cpp:1:0:
/home/admin/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/Arduino.h:195:6: error: initializing argument 1 of 'void digitalWrite(uint8_t, uint8_t)' [-fpermissive]
void digitalWrite(uint8_t pin, uint8_t val);
^
WemosD1MiniCloudMQTT:146: error: invalid conversion from 'const char*' to 'uint8_t {aka unsigned char}' [-fpermissive]
digitalWrite(relay, state);
^
In file included from sketch/WemosD1MiniCloudMQTT.ino.cpp:1:0:
/home/admin/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/cores/esp8266/Arduino.h:195:6: error: initializing argument 2 of 'void digitalWrite(uint8_t, uint8_t)' [-fpermissive]
void digitalWrite(uint8_t pin, uint8_t val);
^
exit status 1
invalid conversion from 'const char*' to 'uint8_t {aka unsigned char}' [-fpermissive]
Do I need to convert from const char* to uint_8?
digitalWrite takes two arguments - what datatype is the first argument (the pin) and what data type is the second argument (HIGH or LOW)?