-
Notifications
You must be signed in to change notification settings - Fork 277
Description
I made a very simple sketch and I defined 2 functions to use with aREST.
I use an Arduino UNO with Ethernet shield.
I use VSCode with PlatformIO.
The first function is working as expected, only if I don't call it with a query string, BUT if I pass it a query string, the second function is called instead.
The second function doesn't read params I pass to it: the params string is just empty.
Source code:
`
#include <SPI.h>
#include <SD.h>
#include <Ethernet.h>
#include <aREST.h>
#include <avr/wdt.h>
#define PORT 1977
// Enter a MAC address for your controller below.
byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0xFE, 0x40};
// IP address in case DHCP fails
IPAddress ip(192, 168, 1, 77);
// Ethernet server
EthernetServer server(PORT);
// Create aREST instance
aREST rest = aREST();
// Variables to be exposed to the API
int ev1, ev2, ev3;
boolean sd;
// Declare functions to be exposed to the API
int StartSD(String);
int AFunction(String);
void setup(void)
{
// Start Serial
Serial.begin(9600);
while (!Serial)
{
;
}
pinMode(10, OUTPUT);
// Init variables and expose them to REST API
sd = false;
ev1 = HIGH;
ev2 = HIGH;
ev3 = HIGH;
// rest.variable("humidity", &humidity);
rest.variable("ev1", &ev1);
rest.variable("ev2", &ev2);
rest.variable("ev3", &ev3);
rest.variable("sd", &sd);
// Function to be exposed
char init[] = "init";
char prova[] = "prova";
rest.function(init, StartSD);
rest.function(prova, AFunction);
// Give name & ID to the device (ID should be 6 characters long)
static const char name[] = "ev";
rest.set_id("008");
rest.set_name(name);
// Start the Ethernet connection and the server
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.print(Ethernet.localIP());
Serial.print(":");
Serial.println(String(PORT));
// Start watchdog
wdt_enable(WDTO_4S);
}
void loop()
{
// listen for incoming clients
EthernetClient client = server.available();
if (client)
{
Serial.print("client connected ");
Serial.println(client.remoteIP());
rest.handle(client);
}
wdt_reset();
}
// Custom function accessible by the API
int StartSD(String params)
{
Serial.print("Parameters: ");
Serial.println(params);
if (!sd)
{
if (SD.begin(4))
{
sd = true;
Serial.println("Init SD: OK");
return 1;
}
else
{
sd = false;
Serial.println("Init SD: error");
return 0;
}
}
else
{
Serial.println("Init SD: already init");
return 1;
}
}
int AFunction(String params)
{
Serial.print("Function Params: ");
Serial.println(params);
return 1;
}
`