<commit_before>//Os pinos de serial são os pinos 9 e 10 do Arduino.

/*  PARTES IMPORTANTES:
 *   
 *   Linha | Parte
 *      17 | Declaração de variáveis
 *      41 | Comunicação serial
 *      72 | Configurações
 *      84 | Loop
 */    

#include "EmonLib.h"
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>

const byte    numChars        = 48;     // O programa só recebe 48 caracteres de cada vez
char          receivedChars[numChars];  // Array pra guardar os dados enviados por serial
boolean       newData         = false;  // Muda quando há dados novos pelo serial
unsigned long previousMillis  = 0;      // Salva a última vez em que o display foi atualizado
unsigned long previousMillis1 = 0;      // Usado para contar o tempo em que o IP fica no display
const long    interval        = 200;    // Intervalo de atualização do display
String        comandos;                 // Mesma coisa que o array receivedChars, porém em formato de string.
boolean       ocupado         = true;   // Usada em outra versão, pode ser excluída.

const int     pino_sct        = 0;
const int     botao           = 11;
int           estadoBotaoIP;
int           tensao          = 220;
int           calibra         = 18;
String        ip = "(conectando)";
String        dados;
String        t, cal;

EnergyMonitor emon1;
SoftwareSerial esp8266(9, 10);
LiquidCrystal lcd(4, 3, 5, 6, 7, 8);

#include "easteregg.h"

//Comunicação serial
void recvWithEndMarker() {
  static byte ndx = 0;
  char endMarker = '\n';
  char rc;

  while (esp8266.available() > 0 && newData == false) {
    rc = esp8266.read();

    if (rc != endMarker) {
      receivedChars[ndx] = rc;
      ndx++;
      if (ndx >= numChars) {
        ndx = numChars - 1;
      }
    }
    else {
      receivedChars[ndx] = '\0'; // Termina a string
      ndx = 0;
      newData = true;
    }
  }
}

void showNewData() {
  if (newData == true) {
    comandos = receivedChars;
    newData = false;
  }
}

//Configurações
void setup() {
  pinMode (botao, INPUT);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0); lcd.print("SMCP      0.5.1");
  lcd.setCursor(0, 1); lcd.print("Iniciando... ");
  emon1.current(pino_sct, calibra);
  esp8266.begin(9600);
  esp8266.println("Ligado");
  ocupado = false;
}

//Loop
void loop() {
  unsigned long currentMillis = millis();
  double Irms = emon1.calcIrms(1480);
  double potencia = Irms * tensao;
  recvWithEndMarker();
  showNewData();

  if (comandos.indexOf("DADOS?") != -1) {
    dados = "DADOS:{ \"corrente\": ";
    dados += Irms;
    dados += ", \"potencia\":";
    dados += potencia;
    dados += " }";
    esp8266.println(dados);
  }
  if (comandos.indexOf("T:") != -1) {
    t = comandos.substring(comandos.indexOf("T:") + 2, comandos.indexOf('\r'));
    esp8266.print("Tensão ajustada para ");
    esp8266.println(t);
    tensao = t.toInt();
  }
  if (comandos.indexOf("CALIBRA:") != -1) {
    cal = comandos.substring(comandos.indexOf("CALIBRA:") + 8, comandos.indexOf('\r'));
    esp8266.print("Nível de calibração ajustado para: ");
    esp8266.println(calibra);
    calibra = cal.toInt();
  }

  if (comandos.indexOf("EASTEREGG") != -1) {
    EASTEREGG();
  }
  estadoBotaoIP = digitalRead(botao);
  if (estadoBotaoIP == HIGH) {
    lcd.clear();
    esp8266.println("IP?");
    delay(150);
    recvWithEndMarker();
    showNewData();
    if (comandos.indexOf("IP:") != -1) {
      ip = comandos.substring(comandos.indexOf("IP:") + 3, comandos.indexOf('\r'));
      ocupado = true;
      lcd.clear(); //Apaga a tela assim que achar o IP.
    }
    unsigned long previousMillis1 = millis();
    unsigned long currentMillis1 = millis();
    while (currentMillis1 - previousMillis1 <= 3000) {
      currentMillis1 = millis();
      lcd.setCursor(0, 0); lcd.print("IP:          "); 
      lcd.setCursor(0, 1); lcd.print(ip);
      recvWithEndMarker();
      showNewData();
    }
  }
  ip = "(desconectado)";
  ocupado = false;
  comandos = "";

  if (currentMillis - previousMillis >= interval) {<commit_msg>O Easter Egg tem que ser secreto<commit_after>//Os pinos de serial são os pinos 9 e 10 do Arduino.

/*  PARTES IMPORTANTES:
 *   
 *   Linha | Parte
 *      17 | Declaração de variáveis
 *      41 | Comunicação serial
 *      72 | Configurações
 *      84 | Loop
 */    

#include "EmonLib.h"
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>

const byte    numChars        = 48;     // O programa só recebe 48 caracteres de cada vez
char          receivedChars[numChars];  // Array pra guardar os dados enviados por serial
boolean       newData         = false;  // Muda quando há dados novos pelo serial
unsigned long previousMillis  = 0;      // Salva a última vez em que o display foi atualizado
unsigned long previousMillis1 = 0;      // Usado para contar o tempo em que o IP fica no display
const long    interval        = 200;    // Intervalo de atualização do display
String        comandos;                 // Mesma coisa que o array receivedChars, porém em formato de string.
boolean       ocupado         = true;   // Usada em outra versão, pode ser excluída.

const int     pino_sct        = 0;
const int     botao           = 11;
int           estadoBotaoIP;
int           tensao          = 220;
int           calibra         = 18;
String        ip = "(conectando)";
String        dados;
String        t, cal;

EnergyMonitor emon1;
SoftwareSerial esp8266(9, 10);
LiquidCrystal lcd(4, 3, 5, 6, 7, 8);

//#include "easteregg.h"

//Comunicação serial
void recvWithEndMarker() {
  static byte ndx = 0;
  char endMarker = '\n';
  char rc;

  while (esp8266.available() > 0 && newData == false) {
    rc = esp8266.read();

    if (rc != endMarker) {
      receivedChars[ndx] = rc;
      ndx++;
      if (ndx >= numChars) {
        ndx = numChars - 1;
      }
    }
    else {
      receivedChars[ndx] = '\0'; // Termina a string
      ndx = 0;
      newData = true;
    }
  }
}

void showNewData() {
  if (newData == true) {
    comandos = receivedChars;
    newData = false;
  }
}

//Configurações
void setup() {
  pinMode (botao, INPUT);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0); lcd.print("SMCP      0.5.1");
  lcd.setCursor(0, 1); lcd.print("Iniciando... ");
  emon1.current(pino_sct, calibra);
  esp8266.begin(9600);
  esp8266.println("Ligado");
  ocupado = false;
}

//Loop
void loop() {
  unsigned long currentMillis = millis();
  double Irms = emon1.calcIrms(1480);
  double potencia = Irms * tensao;
  recvWithEndMarker();
  showNewData();

  if (comandos.indexOf("DADOS?") != -1) {
    dados = "DADOS:{ \"corrente\": ";
    dados += Irms;
    dados += ", \"potencia\":";
    dados += potencia;
    dados += " }";
    esp8266.println(dados);
  }
  if (comandos.indexOf("T:") != -1) {
    t = comandos.substring(comandos.indexOf("T:") + 2, comandos.indexOf('\r'));
    esp8266.print("Tensão ajustada para ");
    esp8266.println(t);
    tensao = t.toInt();
  }
  if (comandos.indexOf("CALIBRA:") != -1) {
    cal = comandos.substring(comandos.indexOf("CALIBRA:") + 8, comandos.indexOf('\r'));
    esp8266.print("Nível de calibração ajustado para: ");
    esp8266.println(calibra);
    calibra = cal.toInt();
  }

  /*
  if (comandos.indexOf("EASTEREGG") != -1) {
    EASTEREGG();
  }
  */
  
  estadoBotaoIP = digitalRead(botao);
  if (estadoBotaoIP == HIGH) {
    lcd.clear();
    esp8266.println("IP?");
    delay(150);
    recvWithEndMarker();
    showNewData();
    if (comandos.indexOf("IP:") != -1) {
      ip = comandos.substring(comandos.indexOf("IP:") + 3, comandos.indexOf('\r'));
      ocupado = true;
      lcd.clear(); //Apaga a tela assim que achar o IP.
    }
    unsigned long previousMillis1 = millis();
    unsigned long currentMillis1 = millis();
    while (currentMillis1 - previousMillis1 <= 3000) {
      currentMillis1 = millis();
      lcd.setCursor(0, 0); lcd.print("IP:          "); 
      lcd.setCursor(0, 1); lcd.print(ip);
      recvWithEndMarker();
      showNewData();
    }
  }
  ip = "(desconectado)";
  ocupado = false;
  comandos = "";

  if (currentMillis - previousMillis >= interval) {
{'fraction_non_alphanumeric': 0.14104792649615097, 'fraction_numerical': 0.032778743481499874, 'mean_word_length': 2.4839965397923875, 'pattern_counts': {'":': 4, '<': 9, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '608067', 'n_tokens_mistral': 3074, 'n_tokens_neox': 2902, 'n_words': 724}