#include <Arduino.h>

// Inicializa a comunicação Serial
void setup() {
  Serial.begin(9600);
  Serial.println("Inicializando Serial...");
}

// Variáveis para controle do parser
char serialData;
bool inicioComando = false;
bool aguardandoValor = false;
String comando;
String buffer;
int valor = 0;

// Função para parsear o progresso baseado nos dados recebidos
void parseData(char data) {
    // Checa se o dado é o início de um comando
    if (isalpha(data)) {
      comando = data;  // Guarda o comando
      inicioComando = true;
      buffer = "";  // Limpa o buffer para o novo valor
    } else if (inicioComando && data == ':') {
      aguardandoValor = true;  // Próximo estado, esperando o valor
    } else if (data == '\r' || data == '\n') {
      // Final do comando, processa o valor
      if (aguardandoValor && comando == "B") {
        valor = buffer.toInt();
        Serial.print("Meu valor: ");
        Serial.println(valor);
      } else if (aguardandoValor && comando == "C") {
        valor = buffer.toInt();
        Serial.print("Meu valor de C: ");
        Serial.println(valor);
      } else {
        Serial.println("Comando inválido ou sem valor.");
      }
      // Reset das variáveis para o próximo comando
      inicioComando = false;
      aguardandoValor = false;
      buffer = "";
    } else if (aguardandoValor && data != ':') {
      buffer += data;  // Acumula o valor
    }
}

// Loop principal que aguarda dados na porta serial
void loop() {
  if (Serial.available() > 0) {
    serialData = static_cast<char>(Serial.read());
    parseData(serialData);  // Chama o parser
  }
}