#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Arduino_JSON.h>
//{"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\":[0x0A,0x0A,0x00,0x1B,0x12,0x1B,0x0A,0x1B]}"
//"{\"dispositivo\":\"display\", \"posicao\":0, \"dados\":[10,10,0,27,18,27,10,27]}"
//{"dispositivo":"display", "posicao":0, "dados":[10,10,0,27,18,27,10,27]}
// Define o endereço do LCD no barramento I2C e o
// número de colunas e linhas (16x2)
LiquidCrystal_I2C lcd(0x27,16,2);
int posicao=0;
int dado[8] ={};
void setup()
{
Serial.begin(9600);// Inicializa serial
lcd.init(); // Inicializa LCD
lcd.backlight(); // Liga luz do LCD
lcd.print("Custom Chars");// Escreve no LCD
//uint8_t se[8] PROGMEM = {10,10,0,27,18,27,10,27};
// uint8_t se[8] PROGMEM = {B01010,B01010,B00000,B11011,B10010,B11011,B01010,B11011};
//lcd.createChar(0,se);
// uint8_t hi[8] PROGMEM = {B10101,B11101,B10101,B00000,B11111,B00000,B10001,B11011};
// lcd.createChar(1,hi);
// uint8_t lo[8] PROGMEM = {B10111,B10101,B11111,B00000,B11111,B00000,B10001,B11011};
// lcd.createChar(2,lo);
// uint8_t si[8] PROGMEM = {B01001,B10101,B10001,B01001,B00101,B10101,B01001,B00000};
// lcd.createChar(3,si);
// uint8_t yes[8] PROGMEM = {B01010,B00100,B00100,B11011,B10010,B11011,B10001,B11011};
// lcd.createChar(5,yes);
// uint8_t no[8] PROGMEM = {B10010,B11010,B10110,B10010,B00000,B11110,B10010,B11110};
// lcd.createChar(4,no);
int16_t n = 0;
char rx[200];
lcd.setCursor(0,1); //Coluna, Linha
lcd.print("o o o ");
//lcd.write((uint8_t)0);lcd.print(" ");
// lcd.write((uint8_t)1);lcd.print(" ");
// lcd.write((uint8_t)2);lcd.print(" ");
// lcd.write((uint8_t)3);lcd.print(" ");
// lcd.write((uint8_t)4);lcd.print(" ");
//lcd.write((uint8_t)5);lcd.print(" ");
Serial.println(Serial.available());
while(Serial.available())
{
Serial.println("Loop Serial Available");
/*
rx[n] = (char)Serial.read();
if (rx[n] == '{')
{
n = n + 1;
while(Serial.available() > 0)
{
Serial.println("Entrou2");
rx[n] = (char)Serial.read();
if(rx[n] == '}')
{
rx[n+1] = '\0';
n = 0;
//Serial.println("Saiu");
while (Serial.available() > 0) // esvazia o buffer serial
{
Serial.read();
}
}
else
{
n = n + 1;
}
}
//Serial.println("teste1");
//for(int i=0; i< strlen(rx); i++)
//{Serial.println(rx[i]);}
JSONVar myObject = JSON.parse(rx);
//Serial.println(myObject);
Serial.println(JSON.typeof(myObject));
if (myObject.hasOwnProperty("dispositivo"))
{
//JSONVar dispos = myObject["dispositivo"];
if (!strcmp((const char*)myObject["dispositivo"],"display"))
{
Serial.println((const char*)myObject["dispositivo"]);
Serial.print("myObject[\"dispositivo\"] = ");
Serial.println(myObject["dispositivo"]);
if (myObject.hasOwnProperty("dados"))
{
Serial.println(myObject["dados"]);
JSONVar valor = myObject["dados"];
for(int j=0; j<8; j++)
{
dado[j] = valor[j];
}
if (myObject.hasOwnProperty("posicao"))
{
Serial.println("DADO:");
for(int i=0; i < 8; i++)
{
Serial.print(dado[i]);
}
//JSONVar posic = myObject["posicao"];
posicao = (int)myObject["posicao"];
Serial.print("\n");
Serial.println(posicao);
lcd.createChar((uint8_t)posicao,(uint8_t)dado);
lcd.write((uint8_t)posicao);lcd.print(" ");
Serial.println("aqui");
//lcd.createChar(1,hi);
//lcd.write((uint8_t)1);lcd.print(" ");
}
}
}
}
//Serial.println("passou por aqui");
//lcd.createChar((uint8_t)posicao,(uint8_t)dado);
//lcd.write((uint8_t)posicao);lcd.print(" ");
}
n = 0;
*/
}
}
void loop()
{}
/* int16_t n = 0;
char rx[200];
lcd.setCursor(0,1); //Coluna, Linha
//lcd.write((uint8_t)0);lcd.print(" ");
// lcd.write((uint8_t)1);lcd.print(" ");
// lcd.write((uint8_t)2);lcd.print(" ");
// lcd.write((uint8_t)3);lcd.print(" ");
// lcd.write((uint8_t)4);lcd.print(" ");
//lcd.write((uint8_t)5);lcd.print(" ");
lcd.print("o o o ");
if (Serial.available() > 0);
{
rx[n] = (char)Serial.read();
}
if (rx[n] == '{')
{
n = n + 1;
while(Serial.available() > 0)
{
Serial.println("Entrou2");
rx[n] = (char)Serial.read();
if(rx[n] == '}')
{
rx[n+1] = '\0';
n = 0;
//Serial.println("Saiu");
while (Serial.available() > 0) // esvazia o buffer serial
{
Serial.read();
}
}
else
{
n = n + 1;
}
}
//Serial.println("teste1");
//for(int i=0; i< strlen(rx); i++)
//{Serial.println(rx[i]);}
JSONVar myObject = JSON.parse(rx);
//Serial.println(myObject);
Serial.println(JSON.typeof(myObject));
if (myObject.hasOwnProperty("dispositivo"))
{
//JSONVar dispos = myObject["dispositivo"];
if (!strcmp((const char*)myObject["dispositivo"],"display"))
{
Serial.println((const char*)myObject["dispositivo"]);
Serial.print("myObject[\"dispositivo\"] = ");
Serial.println(myObject["dispositivo"]);
if (myObject.hasOwnProperty("dados"))
{
Serial.println(myObject["dados"]);
JSONVar valor = myObject["dados"];
//int dado[8] = {};
for(int j=0; j<8; j++)
{
dado[j] = valor[j];
}
if (myObject.hasOwnProperty("posicao"))
{
Serial.println("DADO:");
for(int i=0; i < 8; i++)
{
Serial.print(dado[i]);
}
//JSONVar posic = myObject["posicao"];
posicao = (int) myObject["posicao"];
Serial.print("\n");
Serial.println(posicao);
//lcd.createChar((uint8_t)posicao,(uint8_t)dado);
//lcd.write((uint8_t)posicao);lcd.print(" ");
//Serial.println("aqui");
//lcd.createChar(1,hi);
//lcd.write((uint8_t)1);lcd.print(" ");
}
}
}
}
}
}
*/
// if (JSON.typeof(myObject) != "undefined") {
//Serial.println("Parsing input failed!");
//return;
//}
// Lê caractere
// É chaves {
//Ler até }
//Parse
// Verificar se tem a chave "display"
// Verifciar a posição
// Criar o caractere na CGRAM
//Mostrar o caractere no LCD
/*
{
for(int i=8; i<=15; i++)
{
lcd.setCursor(i-1,1); //Coluna, Linha
lcd.print(" ");lcd.write(5);
delay(300);
lcd.setCursor(i,1); //Coluna, Linha
lcd.write((uint8_t)6);
delay(300);
}
lcd.setCursor(15,1); //Coluna, Linha
lcd.write((uint8_t)4);
delay(1000);
for(int i=15; i>=8; i--)
{
lcd.setCursor(i,1); //Coluna, Linha
lcd.write((uint8_t)7);lcd.print(" ");
delay(300);
lcd.setCursor(i,1); //Coluna, Linha
lcd.write((uint8_t)6);
delay(300);
}
lcd.setCursor(8,1); //Coluna, Linha
lcd.write((uint8_t)4);
delay(1000);
}
*/