#include <Arduino.h>

// Definições de Entradas 
#define PINO_BOTAO_START         0 // Botão amarelo
#define PINO_SENSOR_PRESENCA     1 // Botão cinza
#define PINO_BOTAO_LIGA          2 // Botão verde
#define PINO_BOTAO_DESLIGA       3 // Botão vermelho
#define PINO_TERMO_PAR_FACA      26 // Azul escuro
#define PINO_TERMO_PAR_ESTUFA    27 // Azul claro

// Saídas
#define PINO_SAIDA_CIL_CORTE_SOLDA 9 // LED azul_FLUORESCENTE
#define PINO_SAIDA_MOTOR_esteira  10 // LED amarelo
#define PINO_SAIDA_CIL_EMPURRADOR 12 // LED azul
#define PINO_SAIDA_VENTILADOR     13 // LED laranja
#define PINO_SAIDA_AQUECER_FACA   14 // LED vermelho
#define PINO_SAIDA_AQUECER_ESTUFA 15 // LED verde
#define LED_TEMP_OK              11 // LED indicador de temperatura OK
//#define PINO_SAIDA_SINALIZACAO   12 // LED azul adicional

int liga = 0; // Variável auxiliar de controle

void setup() {
  Serial.begin(115200);
  Serial.println("Prova de Conceito: Leitura de termo par faca com o Raspberry Pi Pico W");
  
  pinMode(PINO_SAIDA_CIL_CORTE_SOLDA, OUTPUT); 
  pinMode(PINO_SAIDA_MOTOR_esteira  , OUTPUT);
  pinMode(PINO_SAIDA_CIL_EMPURRADOR, OUTPUT);
  pinMode(PINO_SAIDA_VENTILADOR, OUTPUT);
  pinMode(PINO_SAIDA_AQUECER_FACA, OUTPUT);
  pinMode(PINO_SAIDA_AQUECER_ESTUFA, OUTPUT);
  pinMode(LED_TEMP_OK, OUTPUT);
  //pinMode(PINO_SAIDA_SINALIZACAO, OUTPUT);

  // Ligar as saídas quando o programa inicia
  digitalWrite(PINO_SAIDA_CIL_CORTE_SOLDA, LOW);
  digitalWrite(PINO_SAIDA_MOTOR_esteira, LOW);
  digitalWrite(PINO_SAIDA_CIL_EMPURRADOR, LOW);
  digitalWrite(PINO_SAIDA_VENTILADOR, LOW);
  digitalWrite(PINO_SAIDA_AQUECER_FACA, LOW);
  digitalWrite(PINO_SAIDA_AQUECER_ESTUFA, LOW);
  digitalWrite(LED_TEMP_OK, LOW);
  //digitalWrite(PINO_SAIDA_SINALIZACAO, LOW);
}

void loop() {
  // Leitura do termopar / temperatura
  int valor_Faca = analogRead(PINO_TERMO_PAR_FACA);
  float tensao_Faca = (valor_Faca * 3.3) / 1023.0;
  float temperatura_Faca = (tensao_Faca  - 0.5) * 100.0; // Convertendo para temperatura em graus Celsius

  // Imprimir a temperatura
  Serial.print("Temperatura do Termo Par da Faca: ");
  Serial.print(temperatura_Faca);
  Serial.println("°C");

  // Verificar se a entrada 2 (PINO_BOTAO_LIGA) foi acionada
  if (digitalRead(PINO_BOTAO_LIGA) == LOW && liga == 0) {
    // Se o botão pressionado e a saída desligada
    liga = 1; // Liga
    digitalWrite(PINO_SAIDA_MOTOR_esteira, HIGH);
    digitalWrite(PINO_SAIDA_VENTILADOR, HIGH);
    digitalWrite(PINO_SAIDA_AQUECER_FACA, HIGH);
    digitalWrite(PINO_SAIDA_AQUECER_ESTUFA, HIGH);
    digitalWrite(LED_TEMP_OK, HIGH);
    sleep_ms(200); //500
  }
  else if (digitalRead(PINO_BOTAO_DESLIGA) == LOW && liga == 1) {
    // Se o botão pressionado e a saída ligada
    liga = 0; // Desliga
    digitalWrite(PINO_SAIDA_MOTOR_esteira, LOW);
    digitalWrite(PINO_SAIDA_VENTILADOR, LOW);
    digitalWrite(PINO_SAIDA_AQUECER_FACA, LOW);
    digitalWrite(PINO_SAIDA_AQUECER_ESTUFA, LOW);
    sleep_ms(200); //500
  }

  // Verificar temperatura esta entre 100e 200ºC,se sim, liga led rosa: temp ok!!!
  if (temperatura_Faca >= 100 && temperatura_Faca <= 200) {
    digitalWrite(LED_TEMP_OK, HIGH); // Aciona o LED indicador de temperatura OK
  } else {
    digitalWrite(LED_TEMP_OK, LOW); // Desliga o LED indicador de temperatura OK
  }

  //  temp.esta entre 100°C e 200°C e a entrada 0 (PINO_BOTAO_START) foi acionada
  if (temperatura_Faca >= 100 && temperatura_Faca <= 200 && digitalRead(PINO_BOTAO_START) == LOW) {
    digitalWrite(PINO_SAIDA_CIL_EMPURRADOR, HIGH); // Liga a saída 12
  } //else {
    // digitalWrite(PINO_SAIDA_CIL_EMPURRADOR, LOW); // Desliga a saída 12
  // }

  // Verificar se a entrada 1 (PINO_SENSOR_PRESENCA) foi acionada
  if (digitalRead(PINO_SENSOR_PRESENCA) == LOW && digitalRead(PINO_SAIDA_CIL_EMPURRADOR) == HIGH) {
    digitalWrite(PINO_SAIDA_CIL_EMPURRADOR, LOW); // Desliga a saída 12
    digitalWrite(PINO_SAIDA_MOTOR_esteira, LOW);
    //sleep_ms(500); // delay 1 segundo 1000

    digitalWrite(PINO_SAIDA_CIL_CORTE_SOLDA, HIGH); // Liga saída 9
    sleep_ms(3000); // depois de 3 segundos 5000

    digitalWrite(PINO_SAIDA_CIL_CORTE_SOLDA, LOW); // Desliga saída 9
    sleep_ms(200); // delay 1 segundo 1000

    digitalWrite(PINO_SAIDA_MOTOR_esteira, HIGH);
  }
}
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT