Here is my code, I think there is not to much junk but if you have an idea to optimize the code feel free to tell me !
#include "application.h"
#include "HttpClient.h"
#include "jsmnSpark.h"
#define TOKEN_EQ(t, tok_start, tok_end, tok_type) \
((t).start == tok_start \
&& (t).end == tok_end \
&& (t).type == (tok_type))
#define TOKEN_STRING(js, t, s) \
(strncmp(js+(t).start, s, (t).end - (t).start) == 0 \
&& strlen(s) == (t).end - (t).start)
#define TOKEN_PRINT(t) \
HttpClient http;
byte red[22];
byte green[22];
byte blue[22];
http_request_t request;
http_response_t response;
const char *js;
const char *js1;
unsigned long int js_value[45];
unsigned long int js_value_last[45];
int mode;
int mode_last;
int modif;
int on;
int rotation;
int rotation_order;
int rotation_time;
int aleatory_mode;
int mode_time;
int mood;
int mood_type;
String spark_id = Spark.deviceID();
String request_url = "/app/data.php?id=";
http_header_t headers[] = {
{ "Accept" , "*/*"},
{ NULL, NULL } // NOTE: Always terminate headers will NULL
};
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
request_url = request_url + "" + spark_id;
}
void loop() {
modif = 0;
request.hostname = "luxontower.com";
request.port = 80;
request.path = request_url;
int i, r;
jsmn_parser p;
jsmntok_t tok[256];
char obj[20];
http.get(request, response, headers);
Serial.println(response.body);
js = response.body.c_str();
nextTime = millis();
Serial.println(js);
obj[0] = Serial.read();
jsmn_init(&p);
r = jsmn_parse(&p, js, tok, 256);
if (r == JSMN_SUCCESS)
Serial.println("parsed successfuly");
else {
Serial.println("parse failed");
return;
}
int js_size = tok[1].size + 2;
for (i = 3; i < 41; i++) {
if (tok[i].type != JSMN_STRING)
Serial.println("error: expected string");
else {
strlcpy(obj, &js[tok[i].start], (tok[i].end - tok[i].start + 1));
js_value[i] = strtol(obj,NULL,16);
}
}
for (i=3;i<41;i++) {
if (js_value[i]!=js_value_last[i]) {
modif = 1;
Serial.println(js_value[i]);
Serial.println(js_value_last[i]);
Serial.println("not equals");
}}
/*if(js_value[24]!=js_value_last[24] || js_value[26]!=js_value_last[26]){
modif = 1;
Serial.println("not equals");
}*/
if (modif == 1) {
mode = js_value[24];
on = js_value[26];
rotation = js_value[28];
rotation_order = js_value[30];
rotation_time = js_value[32]/2.56;
aleatory_mode = js_value[34];
mode_time = js_value[36]/2.56;
mood = js_value[38];
mood_type = js_value[40];
for(int i = 4; i < 23; i = i+2){
red[i] = js_value[i] >> 16 ;
green[i] = (js_value[i] & 0x00ff00) >> 8;
blue[i] = (js_value[i] & 0x0000ff);
}
Serial.println(js_value[14]);
//Conversion hex to RGB
int var[39] = {
red[4], green[4], blue[4],
red[6], green[6], blue[6],
red[6], green[8], blue[8],
red[10], green[10], blue[10],
red[12], green[12], blue[12],
red[14], green[14], blue[14],
red[16], green[16], blue[16],
red[18], green[18], blue[18],
red[20], green[20], blue[20],
red[22], green[22], blue[22],
mode, on, rotation, rotation_order,
rotation_time, aleatory_mode, mode_time,
mood, mood_type
};
Serial.println("mood");
Serial.println(mood);
Serial.println("Sending values to arduino");
for(int i = 0; i < 39; i++){
Serial1.write (var[i]); // send the number
Serial.println(var[i]);
// Serial.println (var[i]);
}
Serial.println("Data sent");
for(i=3 ;i<41;i++) {
js_value_last[i] = js_value[i];
}
}
delay(10);
}