Hi,
It seems the error for a non-class type happens a lot. I haven't found an answer to my particular instance. I'm trying to parse UDP strings for setting pwm outputs for led dimming. Should be an easy
task, but I keep getting the dreaded non-class type error. The error says "request for member 'substring' in 'packetBuffer', which is of non-class type 'char [20]'
'
I've tried various parsing methods and they all give the same type of error. Any help would be greatly appreciated. Thanks.
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
//int level = 0;
#define Dim1 12
// wifi connection variables
const char* ssid = "VIRUS DEMON";
const char* password = "765432112367890";
boolean wifiConnected = false;
// NETWORK: Static IP details...
IPAddress ip(192, 168, 123, 35);
IPAddress gateway(192, 168, 123, 1);
IPAddress subnet(255, 255, 255, 0);
// UDP variables
unsigned int localPort = 1234;
WiFiUDP UDP;
boolean udpConnected = false;
char packetBuffer[20]; //buffer to hold incoming packet,
char newbuffer[10];
char ReplyBuffer[] = "acknowledged"; // a string to send back
char load, brightness;
void setup() {
// Initialise Serial connection
Serial.begin(115200);
pinMode(Dim1, OUTPUT);
analogWrite(Dim1, 0);
analogWriteRange(255);
WiFi.config(ip, gateway, subnet);
// Initialise wifi connection
wifiConnected = connectWifi();
// only proceed if wifi connection successful
if(wifiConnected){
udpConnected = connectUDP();
}
}
void loop() {
// check if the WiFi and UDP connections were successful
if(wifiConnected){
if(udpConnected){
// if there’s data available, read a packet
int packetSize = UDP.parsePacket();
if(packetSize)
{
Serial.println("");
Serial.print("Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remote = UDP.remoteIP();
for (int i =0; i < 4; i++)
{
Serial.print(remote[i], DEC);
if (i < 3)
{
Serial.print(".");
}
}
Serial.print(", port ");
Serial.println(UDP.remotePort());
// read the packet into packetBufffer
UDP.read(packetBuffer,20);
Serial.println("Contents:");
Serial.println(packetBuffer);
if(strstr(packetBuffer,"one")){
for (int i = 0; i < 10; i++) {
if (packetBuffer.substring(i, i+1) == ",") {
load = packetBuffer.substring(0, i).toInt(); These two lines are that are making the error
brightness = packetBuffer.substring(i+1).toInt();
break;
}
}
//level=atoi(brightness);
analogWrite(Dim1,brightness);
}
for( int i = 0; i < 20; ++i )// clear the buffer
packetBuffer[i] = (char)0;
// send a reply, to the IP address and port that sent us the packet we received
UDP.beginPacket(UDP.remoteIP(), UDP.remotePort());
UDP.write(ReplyBuffer);
UDP.endPacket();
}
delay(10);
}
}
}
// connect to UDP – returns true if successful or false if not
boolean connectUDP(){
boolean state = false;
Serial.println("");
Serial.println("Connecting to UDP");
if(UDP.begin(localPort) == 1){
Serial.println("Connection successful");
state = true;
}
else{
Serial.println("Connection failed");
}
return state;
}
// connect to wifi – returns true if successful or false if not
boolean connectWifi(){
boolean state = true;
int i = 0;
WiFi.begin(ssid, password);
Serial.println("");
Serial.println("Connecting to WiFi");
// Wait for connection
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (i > 10){
state = false;
break;
}
i++;
}
if (state){
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
else {
Serial.println("");
Serial.println("Connection failed.");
}
return state;
}