#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Arduino_JSON.h>
//https://github.com/adafruit/Adafruit_MPU6050
//https://github.com/adafruit/RTClib
//https://docs.wokwi.com/pt-BR/guides/logic-analyzer
//https://sigrok.org/wiki/Downloads
//O endereço I2C padrão do módulo LCD1602 é 0x27.
//O endereço I2C do DS1307 é 0x68
//O endereço I2C do MPU6050 é 0x68. Você pode alterar o endereço de 0x69 conectando o pino AD0 ao VCC.
//Arduino A4: SDA
//Arduino A5: SCL
//===============================================
//* EXERCICIO JSON LCD
//===============================================
/* STRINGS A ENVIAR
{"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]}
*/
// Define o endereço do LCD no barramento I2C e o
// número de colunas e linhas (16x2)
LiquidCrystal_I2C lcd(0x27,16,2);
long timer = 0;
String stringRead, componente;
int tamanho=0, endereco=0, dado0=0, dado1=0, dado2=0, dado3=0, dado4=0, dado5=0, dado6=0, dado7=0;
//uint8_t caracter_recebido[8];
void setup()
{
// Inicialização LCD
lcd.init(); // Inicializa LCD
lcd.backlight(); // Liga luz do LCD
lcd.print("PROT - Ex: JSON "); // Escreve no LCD
lcd.setCursor(2,1);
lcd.print(" Daniel M. "); // Escreve no LCD
delay(2000);
Serial.begin(115200);
Serial.println("--->> Inicio PROT - Ex: JSON <<---");
lcd.clear();
}
void loop()
{
if (Serial.available() > 0)
{
stringRead=Serial.readString();
Serial.println(">> String Recebida:");
Serial.println(stringRead);
JSONVar myObject = JSON.parse(stringRead);
Serial.println(">> JSON.typeof(myObject):");
Serial.println(JSON.typeof(myObject));
Serial.println(">> myObject[dispositivo]:");
componente=((const char*) myObject["dispositivo"]);
Serial.println(componente);
if (componente=="display")
{
if (myObject.hasOwnProperty("posicao"))
{
Serial.println(">> myObject[posicao]:");
endereco=myObject["posicao"];
Serial.println(endereco);
}
if (myObject.hasOwnProperty("dados"))
{
JSONVar value = myObject["dados"];
String tipo = JSON.typeof(value);
Serial.print(">> Tipo:");
Serial.println(tipo);
tamanho = value.length();
Serial.print(">> Tamanho = ");
Serial.println(tamanho);
dado0 = value[0];
dado1 = value[1];
dado2 = value[2];
dado3 = value[3];
dado4 = value[4];
dado5 = value[5];
dado6 = value[6];
dado7 = value[7];
Serial.print(">> Dado = ");
Serial.print(dado0);
Serial.print(",");
Serial.print(dado1);
Serial.print(",");
Serial.print(dado2);
Serial.print(",");
Serial.print(dado3);
Serial.print(",");
Serial.print(dado4);
Serial.print(",");
Serial.print(dado5);
Serial.print(",");
Serial.print(dado6);
Serial.print(",");
Serial.print(dado7);
Serial.println();
uint8_t caracter_recebido[8] PROGMEM = {dado0,dado1,dado2,dado3,dado4,dado5,dado6,dado7};
lcd.createChar(0,caracter_recebido);
}
}
else
{
Serial.println("--->> Dado p/ Outro Dispositivo <<---");
Serial.println((const char*) myObject["dispositivo"]);
Serial.println();
}
lcd.clear();
lcd.print("Caracter Enviado");
lcd.setCursor(0,1);
lcd.print("|> <|"); // Escreve no LCD
lcd.setCursor(2,1);
lcd.write((uint8_t)0);
}
}
//===============================================
// FIM EXERCICIO I2C
//=============================================*/
//===============================================
/* EXERCICIO JSON LCD
//===============================================
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// Define o endereço do LCD no barramento I2C e o
// número de colunas e linhas (16x2)
LiquidCrystal_I2C lcd(0x27,16,2);
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 bell[8] PROGMEM = {B00100,B01110,B01110,B01110,B11111,B00000,B00100,B00000};
lcd.createChar(0,bell);
uint8_t maisoumenos[8] PROGMEM = {B00100,B00100,B11111,B00100,B00100,B00000,B11111,B00000};
lcd.createChar(1,maisoumenos);
const char grau[8] PROGMEM = {B00111,B00101,B00111,B00000,B00000,B00000,B00000,B00000};
lcd.createChar(2,grau);
uint8_t omega[8] PROGMEM = {B01110,B10001,B10001,B10001,B01010,B01010,B11011,B00000};
lcd.createChar(3,omega);
uint8_t pacman0[8] PROGMEM = {B01110,B11111,B10101,B11111,B10001,B11011,B11111,B01110};
lcd.createChar(4,pacman0);
uint8_t pacman1[8] PROGMEM = {B01110,B11111,B11010,B11100,B11000,B11100,B11110,B01111};
lcd.createChar(5,pacman1);
uint8_t pacman2[8] PROGMEM = {B01110,B11111,B11011,B11111,B11111,B11111,B11111,B01110};
lcd.createChar(6,pacman2);
uint8_t pacman3[8] PROGMEM = {B01110,B11111,B01011,B00111,B00011,B00111,B01111,B11110};
lcd.createChar(7,pacman3);
}
void loop()
{
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.print("o o o ");
delay(1000);
while(1)
{
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);
}
}
//===============================================
// FIM EXERCICIO JSON LCD
//=============================================*/