#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Arduino_JSON.h>
unsigned int cont = 0;
// Define o endereço do LCD no barramento I2C e o
// número de colunas e linhas (16x2)
LiquidCrystal_I2C lcd(0x27,16,2);
/*
{"dispositivo":"display", "posicao":0, "dados":[B01010,B01010,B00000,B11011,B10010,B11011,B01010,B11011]}
{"dispositivo":"display", "posicao":0, "dados":[0x0A,0x0A,0x00,0x1B,0x12,0x1B,0x0A,0x1B]}
{"dispositivo":"display", "posicao":0, "dados":[10,10,0,27,18,27,10,27]}
Enviar dado em decimal
*/
void setup()
{
Serial.begin(9600);// Inicializa serial
lcd.init(); // Inicializa LCD
lcd.backlight(); // Liga luz do LCD
lcd.print("JSON com LDC");// Escreve no LCD
}
void loop()
{
char inicio;
Serial.println("Envie uma string JSON");
//Espera chegar um caractere
while(!Serial.available());
//Lê o caractere
inicio = (char)Serial.read();
Serial.print("Recebido: ");
Serial.println(inicio);
//É uma {
if(inicio =='{')
{
//Ler até }
String rx = Serial.readStringUntil('}');
String inicio_pacote = String(inicio + rx);
String pacote = String(inicio_pacote + "}");
Serial.print("Recebido: ");
Serial.println(pacote);
//Parse (converte uma string em um JSONVar)
JSONVar myObject = JSON.parse(pacote);
Serial.print("myObject: ");
Serial.println(myObject);
//Verifica se tem a rótulo "dispositivo"
if(myObject.hasOwnProperty("dispositivo"))
{
JSONVar value = myObject["dispositivo"];
Serial.print("myObject[\"dispositivo\"] = ");
Serial.println(value);
String tipo_dispo = (const char*)value;
//Verifica se o valor é "display"
//if( !strcmp((const char*)myObject["dispositivo"],"display") )
if (tipo_dispo == "display")
{
//Verifica a posição
JSONVar valor = myObject["posicao"];
Serial.print("myObject[\"posicao\"] = ");
Serial.println(valor);
int posicao = (int)valor;
if(posicao >= 0 && posicao <= 7)
{
//Cria um vetor com os valores do caractere
uint8_t caractere[8] = {0};
JSONVar dados = myObject["dados"];
Serial.print("JSON.typeof(dados) = ");
Serial.println(JSON.typeof(dados)); // prints: array
Serial.print("myObject[\"dados\"] = [");
for(int i = 0; i < 8; i++)
{
caractere[i] = (int)dados[i];
Serial.print(caractere[i]);
if(i < 7)
Serial.print(",");
}
Serial.println("]");
//Cria o caractere na CGRAM
lcd.createChar(posicao,caractere);
}
//Mostrar o caractere no LDC
lcd.setCursor(7,1); //Coluna, Linha
lcd.write(posicao);
//Delay
delay(500);
}
else
{
Serial.println("Nao tem display!");
}
}
}
//Pula linha no final antes de começar uma nova recepção
Serial.println();
}