Arduino - CP V7.12

/* Wilson R Bueno 14/03/2024

 * >>>> Atenção: utilizar Arduino 1.8.12 <<<<<< * Projeto Medidor Contrapressão 

 * >>>> Editar usando o adm do computador para evitar travamentos no Arduino <<<<

  * V0.0 - base * V0.1 - retirando cartão ultrasson * V0.2 - gravando no cartão * V0.3 - Mesclando com o programa Enxugamento v13 NV

  * V1.0 - Funcional Base Enxugamento V13 NV * V2 - Adicionando teclado do programa Controle de Acesso * V2.1 - Condicionais

  * V2.1.1 - Simplificando para testar condicionais * V2.2 - Adicionando SwitchCase - Funcional * V2.2.1 - Limpando - Funcional  

  * V2.2.2 - Iniciando gravação * V3 - Reformulando menus - unido com projeto Menu Básico para CP V0 https://www.youtube.com/watch?v=Swr2Q1IFiBM&ab_channel=WRKits 

  * V3.1 - adicionando e mesclando * V3.1.1 - funcional * V3.1.2 / V3.1.3 - progressivo * V3.1.4 - retirada o menu de seleção básico da WR Kits - funcional

  * V3.1.5 - executar tarefas - progressivo * V3.1.6 - progressivo - menu OK - faltam os submenus * V3.1.7 - formatando submenus  

  * V3.1.8 - falta submenu - colocando função RESET soft * V4 - retirando menus WR Kits e colocando menu do Lacerda: MENU COM TRÊS BOTÕES

   ABRAÃO LACERDA - ACESSE O LINK https://www.youtube.com/channel/UCn_SRCloMrZ5y9XOHSIUFUQ 

  * V4.1 / 4.2 / 4.2.1 - progressivo * V5 - inclusão módulos de temperatura * V5.1 - acelerando a gravação  file.close() ??

  * V6.2 - retorno à ordem dos menus * V6.3 - retirando Menus do loop * V6.4 - inicializando submenus, zerando variáveis

  * V6.5 - progressivo * V6.6 - progressivo * V6.7 - inclusão do segundo submenu * V6.8 - problema

  * V6.9 - incluindo submenus - ok. Falta acertar sub sub menu calibração * V6.10 - incluindo Switch Case no sub sub menu calibração - não funcional

  * V6.11 - usando leitor de cartão externo * V6.12 -inserindo leitor umidade e temperatura - falta submenus

  * V7.0 - Incluindo timers diferentes para cada aquisição SD, serial, LCD e usando um timer confiável

  * https://josecintra.com/blog/arduino-controlando-intervalos-tempo/

  * V7.1 - progressivo e alterando frequÊncia de gravação * V7.2 - Ampliação dos submenus * V7.3.1 - progressivo - subsub menu não funcional

  * V7.4, V7.5 - não funcional * V7.6 - retirando WRKits e alterando submenus 

  * V7.6.7 - resolvendo reset e colocando submenus - funcional * V7.7 - zerar os canais e aplicar ganho

  * V7.8 - otimização 

  * V7.8.1 - adicionando submenu de ganho e média móvel para canal analógico WRKits#108 https://www.youtube.com/watch?v=cxPQ0AMQ5bo&ab_channel=WRKits

  * V7.8.2 - funcional

  * V7.8.2.1 - verificar falha no acesso dos menus - não funcional

  * média móvel = deixou o programa muito lento. Avaliando custo benefício

  * V7.8.4 ref: 0=0 - submenus usando case, para eliminar o problema de travamento no submenu, base  https://www.youtube.com/watch?v=Swr2Q1IFiBM&ab_channel=WRKits

  * V7.8.4.1 - inclusão da aquisição via Excel PLX e troca do Timing por timers separados - não funcional

  * V7.8.5 / V7.8.6 / V7.8.7 - progressivo e uso do return; - funcional

  * V7.9 - alteração menus - funcional

  * V7.9.1 - otimização e inclusão de subsubmenus

  * V7.10 - zero e ganho nos canais

  * V7.10.1 - descartar

  * V7.10.2 - incluir conversor 4-20mA - progressivo

  * V7.11 V7.11.1 - progressivo

  * V7.12 - média móvel - não compensa o atraso

  */


// --- Bibliotecas Auxiliares ---

  #include <LiquidCrystal_I2C.h>

  #include <Wire.h> //biblioteca I2C

  #include "RTClib.h" //biblioteca do RTC

  #include <SPI.h> // biblioteca comunicação serial

  #include <SD.h> // biblioteca cartão SD

  #include <Keypad.h> // Biblioteca para controle do teclado de matrizes

  #include "max6675.h" // biblioteca do shield max6675

  #include <Adafruit_AHT10.h> //biblioteca sensor umidade e temperatura


//Timers

  unsigned long Tgrava = 0;


const int lederroPin = 14;   

const int record = 13; 

int freqgrav = 1000; //record frequency

int w = 0;  // constante para gravação

int q = 0; //condicional

int a = 0;  // constante para gravação única do cabeçalho

int z = 0;  // constante para gravação //Serial


//Para o teclado

  const byte LINHAS = 4; // Linhas do teclado

  const byte COLUNAS = 5; // Colunas do teclado

  const char TECLAS_MATRIZ[LINHAS][COLUNAS] = { // Matriz de caracteres (mapeamento do teclado)

    {'7', '8', '9', 'U', 'C'},

    {'4', '5', '6', 'D', 'S'},

    {'1', '2', '3', 'O', 'F'},

    {'*', '0', 'E', 'P', 'R'}

  };

  const byte PINOS_LINHAS[LINHAS] = {23, 25, 27, 29}; // Pinos de conexao com as linhas do teclado

  const byte PINOS_COLUNAS[COLUNAS] = {31, 33, 35, 37, 39}; // Pinos de conexao com as colunas do teclado


  Keypad teclado_personalizado = Keypad(makeKeymap(TECLAS_MATRIZ), PINOS_LINHAS, PINOS_COLUNAS, LINHAS, COLUNAS); // Inicia teclado


// --- Protótipo das Funções Auxiliares ---

  void fileopen();                      //Função do menu1, data e hora

  void menuP();                         //Menu principal

  void subMenu();

  void resetando();                     //Reset geral

  void gravacao();                      //Função do menu2, gravacao

  void temperatures();

  void(* resetFunc) (void) = 0; // create a standard reset function

  

//Inicializa o display no endereco 0x27

  LiquidCrystal_I2C lcd(0x27,16,2);


//Relógio

  RTC_DS1307 rtc;

  //char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};


//Base de tempo

  //unsigned long millisdisplaytime = millis();


//Open file on SD card

  File logfile;

  int pinoCS = 49; // Pin CS Turn on


void error(char *str)  {

  Serial.print(F("error: "));

  Serial.println(str);

  while(1);

  }

  

  int tela = 1;     //variável para controlar a mudança de tela no menu

  float conv = 1.67; //variável para conversão em tensão 204.6


//vcp Variáveis cpp = resultado contrapressão, cpz = zerar, cp = leitura canais analógicos, cpg = ganho

  int cpp1 = 0;float cpz1 = 0;float cp1 = A0;int cpg1 = 0; 

  int cpp2 = 0;float cpz2 = 0;float cp2 = A1;int cpg2 = 0;   

  int cpp3 = 0;float cpz3 = 0;float cp3 = A2;int cpg3 = 0; 

  int cpp4 = 0;float cpz4 = 0;float cp4 = A3;int cpg4 = 0;  

  int cpp5 = 0;float cpz5 = 0;float cp5 = A4;int cpg5 = 0;  

 // float cpp6 = 0;float cpz6 = 0;float cp6 = A5;int cpg6 = 0; 

 // float cpp7 = 0;float cpz7 = 0;float cp7 = A6;int cpg7 = 0; 

 // float cpp8 = 0;float cpz8 = 0;float cp8 = A7;int cpg8 = 0; 

  

//Thermocouples modules max6675

  //1st thermocouple

  int so1Pin = 22;// SO=Serial Out do shield termopar

  int cs1Pin = 24;// CS = chip select CS pin do shield termopar

  int sck1Pin = 26;// SCK = Serial Clock pin do shield termopar

  //2nd thermocouple

  int so2Pin = 28;// SO=Serial Out do shield termopar

  int cs2Pin = 30;// CS = chip select CS pin do shield termopar

  int sck2Pin = 32;// SCK = Serial Clock pin do shield termopar

  //3rd thermocouple

  int so3Pin = 34;// SO=Serial Out do shield termopar

  int cs3Pin = 36;// CS = chip select CS pin do shield termopar

  int sck3Pin = 38;// SCK = Serial Clock pin do shield termopar

  //4th thermocouple

  int so4Pin = 40;// SO=Serial Out do shield termopar

  int cs4Pin = 42;// CS = chip select CS pin do shield termopar

  int sck4Pin = 44;// SCK = Serial Clock pin do shield termopar

  //5th thermocouple

  int so5Pin = 46;// SO=Serial Out do shield termopar

  int cs5Pin = 48;// CS = chip select CS pin do shield termopar

  int sck5Pin = 12;// SCK = Serial Clock pin do shield termopar

/*

  //6th thermocouple

  int so6Pin = 10;// SO=Serial Out do shield termopar -> não usar o pino 11

  int cs6Pin = 9;// CS = chip select CS pin do shield termopar

  int sck6Pin = 8;// SCK = Serial Clock pin do shield termopar

  //7th thermocouple

  int so7Pin = 7;// SO=Serial Out do shield termopar

  int cs7Pin = 6;// CS = chip select CS pin do shield termopar

  int sck7Pin = 5;// SCK = Serial Clock pin do shield termopar

  //8th thermocouple

  int so8Pin = 4;// SO=Serial Out do shield termopar

  int cs8Pin = 3;// CS = chip select CS pin do shield termopar

  int sck8Pin = 2;// SCK = Serial Clock pin do shield termopar

 */

  //MAX6675 instance

    MAX6675 robojax1(sck1Pin, cs1Pin, so1Pin);

    MAX6675 robojax2(sck2Pin, cs2Pin, so2Pin);

    MAX6675 robojax3(sck3Pin, cs3Pin, so3Pin);

    MAX6675 robojax4(sck4Pin, cs4Pin, so4Pin);

    MAX6675 robojax5(sck5Pin, cs5Pin, so5Pin);

   // MAX6675 robojax6(sck6Pin, cs6Pin, so6Pin);

   // MAX6675 robojax7(sck7Pin, cs7Pin, so7Pin);

   // MAX6675 robojax8(sck8Pin, cs8Pin, so8Pin);


//AHT10 card umidity and temperature

  Adafruit_AHT10 aht;

  //Degree simbol character

  byte grau[8] ={ B00001100,

              B00010010,

              B00010010,

              B00001100,

              B00000000,

              B00000000,

              B00000000,

              B00000000,};



// FUNÇÃO FILTRO - MÉTODO MÉDIA MÓVEL (MM)

    

    float mediaMovel(float xis) {

    static float media = 0.0;

    static int indice = 1;


    if (indice == 0 || indice == 33) {

        indice = 1;

        media = 0.0;

    }

    media = media + (xis - media) / indice++;

    return media;

    }


void setup() /////////////////////////////////////////////////

{

 

  Serial.begin(9600); //inicialização serial

  Serial.println(F("Initializing ..."));


  pinMode (lederroPin, OUTPUT);  //Alimentação Led de erro

  pinMode (record, OUTPUT); //Alimentação Led 13 de gravação


  //Initialize AHT10 card umidity and temperature

    if (! aht.begin()) {

      Serial.println(F("Could not find AHT10? Check wiring"));

      while (1) delay(10);

      }

      Serial.println(F("AHT10 Card Ok"));

      //Cria o caractere customizado com o simbolo do grau

        lcd.createChar(0, grau);


  //inicia o display 16x2

    lcd.init();

    lcd.backlight();

    lcd.begin (16,2);                    

   

  //Inicialização do programa

    lcd.setCursor(0, 0);

    lcd.print(F(" R&D-TE MARELLI"));

    lcd.print(F(" "));

    lcd.setCursor(0, 1);

    lcd.print(F("Ver 07.11.1-Mar24 "));

    delay(1000);

    //AHT10

      sensors_event_t humidity, temp;

      aht.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data

      lcd.setCursor(0, 1);

      lcd.print(temp.temperature);

      lcd.setCursor(4, 1);

      lcd.write((byte)0);  //Mostra o simbolo do grau formado pelo array

      lcd.print(F("C : "));

      lcd.setCursor(9, 1);

      lcd.print(humidity.relative_humidity);

      lcd.setCursor(13, 1);

      lcd.print(F("%HR  "));

      delay(1500);

 

  //Inicialização do cartão SD

    pinMode(pinoCS, OUTPUT); // Declara pino CS como saída

    Serial.print(F("SD card..."));

    if (!SD.begin(4)) {

      Serial.println(F("Initialization failed!"));

      digitalWrite(lederroPin, HIGH);   // turn the LED on (HIGH is the voltage level)

      lcd.clear();

      lcd.setBacklight(HIGH);

      lcd.setCursor(3, 0);

      lcd.print(F("* FAIL ON *"));

      lcd.setCursor(3, 1);

      lcd.print(F("* SD CARD *"));

    

    while (1);

    }

    Serial.println(F("Ok"));

    logfile.print(F("Temperature: ")); logfile.print(temp.temperature); logfile.println(F(" degrees C"));

    logfile.print(F("Humidity: ")); logfile.print(humidity.relative_humidity); logfile.println(F("% rH"));

    

  DateTime now = rtc.now();


  //Relógio RTC

    if (! rtc.begin()) {

      Serial.println(F("Couldn't find RTC"));

      lcd.clear();

      lcd.setBacklight(HIGH);

      lcd.setCursor(3, 0);

      lcd.print(F("* FAIL ON *"));

      lcd.setCursor(7, 1);

      lcd.print(F("* RTC *"));

      digitalWrite(lederroPin, HIGH);   // turn the LED on (HIGH is the voltage level)

     while (1);

     }

    

    if (! rtc.isrunning()) {

      Serial.println(F("RTC is NOT running!"));

      lcd.clear();

      lcd.setBacklight(HIGH);

      lcd.setCursor(3, 0);

      lcd.print(F("* FAIL ON *"));

      lcd.setCursor(7, 1);

      lcd.print(F("* RTC *"));

      digitalWrite(lederroPin, HIGH);   // turn the LED on (HIGH is the voltage level)

     }

     Serial.println(F("RTC is Ok"));

    // Ajuste data e hora - following line sets the RTC to the date & time this sketch was compiled

      //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

    // This line sets the RTC with an explicit date & time, for example to set

    // January 21, 2014 at 3am you would call:

      //rtc.adjust(DateTime(2023, 9, 06, 10, 55, 0));


    logfile.print(F("Marelli GTS Amparo")); logfile.print(temp.temperature); logfile.println(F("Project: Enxugamento N Placa V3.3"));

    logfile.print(F("Temperature: ")); logfile.print(temp.temperature); logfile.println(F(" °C"));

    logfile.print(F("Umidity: ")); logfile.print(humidity.relative_humidity); logfile.println(F("% rH"));

    logfile.println("LABEL,Date,Time,Timer,TU1,TU2,TU3,TU4,TU5,TU6,TU7,TU8,TP1,TP2,TP3,TP4,TP5,TP6,TP7,TP8");

    

    //Inicialização Menu Superior Excel PLX-DAQ

    Serial.println("CLEARDATA"); // reset da comunicação //Serial

    Serial.println("LABEL,Date,Time,Timer,CP1,CP2,CP3,CP4,CP5,TP1,TP2,TP3,TP4,TP5");


   

} ///////////////////////////////////////end setup



void loop()///////////////////////////////////////

{


menuP();


  

} ////////////////////////////////////////end loop


void menuP(){ //Menu e submenus


  //Identificação tecla pressionada

    char leitura_teclas = teclado_personalizado.getKey(); // Atribui a variavel a leitura do teclado

  

  // Se alguma tecla foi pressionada

    if(leitura_teclas){ 

      if(leitura_teclas == 'R'){ // Se a tecla Reset foi pressionada

      lcd.clear();

      resetando();

      }

    }


// === Ações no display LCD === // Menus Principais //

   digitalWrite(record, LOW); //Indica gravação no cartão

   

   if (tela==1){   //Tela 1                       

      lcd.setCursor(0,0);                     

        //condicionais para colocar o zero, depois de cada 9

        DateTime now = rtc.now(); 

        if(now.hour()<10)lcd.print(F("0"));// sempre 2 dígitos

        lcd.print(now.hour());

        lcd.print(F(":"));

        if(now.minute()<10)lcd.print(F("0"));

        lcd.print(now.minute());

        lcd.print(F(":"));

        if(now.second()<10)lcd.print(F("0"));

        lcd.print(now.second());

        lcd.print(F("-"));

        lcd.print(now.day(), DEC);

        lcd.print('/');

        lcd.print(now.month(), DEC);

        lcd.print('/');

        lcd.print((now.year()-2000), DEC);

      lcd.setCursor(0,1);                      

        lcd.print(F(">Enter to Record"));

           

   }

   else if (tela==2){                     

     lcd.setCursor(0,0);                     

     lcd.print(F(" CH CALIBRATION --"));      

     lcd.setCursor(0,1);                     

     lcd.print(F(">Enter to ZERO<<"));     

     }

   else if (tela==3){                            

     lcd.setCursor(0,0);                     

     lcd.print(F(" CH CALIBRATION "));      

     lcd.setCursor(0,1);                     

     lcd.print(F(">Enter to GAIN<<"));     

     }

   else if (tela==4){                            

    lcd.setCursor(0,0);                     

    lcd.print(F("> TEMPERATURES <"));    

    lcd.setCursor(0,1);                     

    lcd.print(F(">Enter to Record<<"));

    }


/////////////////////////////////////////////////Movimentação das telas


// === Ações do Botão MAIS === //    ////////////

   

    if(leitura_teclas == 'D'){   

      //Menu principal

        if (tela==1)tela=2; 

        else if (tela==2)tela=3; 

        else if (tela==3)tela=4;  

        else if (tela==4)tela=1;  

        //Menu 2

        else if (tela==21)tela=22; 

        else if (tela==22)tela=23; 

        else if (tela==23)tela=24;  

        else if (tela==24)tela=25;   

        else if (tela==25)tela=26;   

        else if (tela==26)tela=27;   

        else if (tela==27)tela=28;   

        else if (tela==28)tela=21;   

        //Menu 3

        else if (tela==31)tela=32; 

        else if (tela==32)tela=33; 

        else if (tela==33)tela=34;  

        else if (tela==34)tela=35;

        else if (tela==35)tela=36;   

        else if (tela==36)tela=37;   

        else if (tela==37)tela=38;   

        else if (tela==38)tela=31;

           

        delay(30);}                 //Por causa do efeito Bounce - repique        

 

// === Ações do Botão MENOS === //   ////////////

 

  if(leitura_teclas == 'U'){ 

        //Menu principal

        if (tela==1)tela=4; 

        else if (tela==2)tela=1;

        else if (tela==3)tela=2;  

        else if (tela==4)tela=3; 

        //Menu 2

        else if (tela==21)tela=28; 

        else if (tela==28)tela=27;

        else if (tela==27)tela=26;  

        else if (tela==26)tela=25; 

        else if (tela==25)tela=24;

        else if (tela==24)tela=23;

        else if (tela==23)tela=22;

        else if (tela==22)tela=21;

        //Menu 3

        else if (tela==31)tela=38; 

        else if (tela==38)tela=37;

        else if (tela==37)tela=36;  

        else if (tela==36)tela=35;

        else if (tela==35)tela=34; 

        else if (tela==34)tela=33;

        else if (tela==33)tela=32;  

        else if (tela==32)tela=31;

               

        delay(30);}   


  if(leitura_teclas == 'S'){ // //Teste tecla Parada para interromper a gravação e retornar ao menu 2

        //Serial.println("Parada solicitada");

        lcd.clear();

        if((tela==21)|| (tela==22)|| (tela==23)|| (tela==24)|| (tela==25)|| (tela==26)|| (tela==27)|| (tela==28))tela=2;

        else if((tela==211)|| (tela==212)|| (tela==213)|| (tela==214)|| (tela==215)|| (tela==216)|| (tela==217)|| (tela==218))tela=2;

        else if((tela==311)|| (tela==312)|| (tela==313)|| (tela==314)|| (tela==315)|| (tela==316)|| (tela==317)|| (tela==318))tela=3;

        

        return; // finalmente retornou ao menu principal!

      }


/////////////////////////////////////////////////Fim Movimentação das telas principais


// === Ações do Botão ENTER === /////////////////////////////////


  //Movimentação de menu para submenu1

    if(leitura_teclas == 'O'){ 

       if (tela==1){tela=10;}

       else if (tela==2)tela=21;

       else if (tela==3)tela=31;

       else if (tela==4)tela=40;

       

       else if (tela==21)tela=211;

       else if (tela==22)tela=212;

       else if (tela==23)tela=213;

       else if (tela==24)tela=214;

       else if (tela==25)tela=215;

       else if (tela==26)tela=216;

       else if (tela==27)tela=217;

       else if (tela==28)tela=218;

       

       else if (tela==31)tela=311;

       else if (tela==32)tela=312;

       else if (tela==33)tela=313;

       else if (tela==34)tela=314;

       else if (tela==35)tela=315;

       else if (tela==36)tela=316;

       else if (tela==37)tela=317;

       else if (tela==38)tela=318;

       delay(30);

       } 


  subMenu();

}



void subMenu()

{

// === Ações no display LCD === // Submenus //


 if (tela==10){                            

    fileopen(); //Abertura de arquivo

    logfile.flush();

      //Data e hora abertura do arquivo

        DateTime now = rtc.now(); 

        if(now.hour()<10)lcd.print(F("0"));// sempre 2 dígitos

        logfile.print(now.hour());

        logfile.print(F(":"));

        if(now.minute()<10)lcd.print(F("0"));

        logfile.print(now.minute());

        logfile.print(F(":"));

        if(now.second()<10)lcd.print(F("0"));

        logfile.println(now.second());

  gravacao();

  }


          if (tela==21){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 01 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to ZERO<<"));   

          }

          if (tela==22){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 02 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to ZERO<<"));   

          }

          if (tela==23){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 03 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to ZERO<<"));   

          }

          if (tela==24){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 04 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to ZERO<<"));   

          }

          if (tela==25){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 05 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to ZERO<<"));   

          }

          if (tela==26){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 06 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to ZERO<<"));   

          }

          if (tela==27){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 07 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to ZERO<<"));   

          }

          

          if (tela==28){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 08 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to ZERO<<"));   

          }


          if (tela==31){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 01 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to GAIN<<"));   

          }

          if (tela==32){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 02 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to GAIN<<"));   

          }

          if (tela==33){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 03 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to GAIN<<"));   

          }

          if (tela==34){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 04 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to GAIN<<"));   

          }

          if (tela==35){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 05 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to GAIN<<"));   

          }

          if (tela==36){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 06 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to GAIN<<"));   

          }

          if (tela==37){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 07 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to GAIN<<"));   

          }

          if (tela==38){                            

                lcd.setCursor(0,0);                     

             lcd.print(F(">> CHANNEL 08 -->>"));      

             lcd.setCursor(0,1);                     

             lcd.print(F(">Enter to GAIN<<"));   

          }


  

  if (tela==40){                            

    fileopen(); //Abertura de arquivo

    logfile.flush();

      //Data e hora abertura do arquivo

        DateTime now = rtc.now(); 

        if(now.hour()<10)lcd.print(F("0"));// sempre 2 dígitos

        logfile.print(now.hour());

        logfile.print(F(":"));

        if(now.minute()<10)lcd.print(F("0"));

        logfile.print(now.minute());

        logfile.print(F(":"));

        if(now.second()<10)lcd.print(F("0"));

        logfile.println(now.second());

  temperatures();

  }

              if (tela==211){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 01 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("RESETING TO ZERO"));   

              }

              if (tela==212){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 02 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("RESETING TO ZERO"));    

              }

              if (tela==213){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 03 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("RESETING TO ZERO"));    

              }

              if (tela==214){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 04 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("RESETING TO ZERO"));   

              }

              if (tela==215){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 05 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("RESETING TO ZERO"));    

              }

              if (tela==216){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 06 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("RESETING TO ZERO"));   

              }

              if (tela==217){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 07 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("RESETING TO ZERO"));    

              }

              

              if (tela==218){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 08 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("RESETING TO ZERO"));    

              }

    

              if (tela==311){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 01 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("Enter Gain Value"));     

              }

              if (tela==312){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 02 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("Enter Gain Value"));     

              }

              if (tela==313){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 03 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("Enter Gain Value"));   

              }

              if (tela==314){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 04 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("Enter Gain Value"));   

              }

              if (tela==315){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 05 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("Enter Gain Value"));    

              }

              if (tela==316){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 06 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("Enter Gain Value"));   

              }

              if (tela==317){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 07 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("Enter Gain Value"));    

              }

              

              if (tela==318){                            

                    lcd.setCursor(0,0);                     

                 lcd.print(F(">> CHANNEL 08 -->>"));      

                 lcd.setCursor(0,1);                     

                 lcd.print(F("Enter Gain Value"));   

              }


}


void fileopen()                                        

{

      //Create a new file sequencial on SD card

      char filename[] = "LOGGE000.TXT";

      for (uint8_t i = 0; i < 1000; i++) 

      {

        filename[5] = '0' + (i/100)%10;

        filename[6] = '0' + (i/10)%10;

        filename[7] = '0' + i%10;

        if (! SD.exists(filename)) {

        // only open a new file if it doesn't exist

        logfile = SD.open(filename, FILE_WRITE); 

        digitalWrite(lederroPin, LOW);    // turn the LED off by making the voltage LOW

        logfile.println(filename);

 

        //Data e hora abertura do arquivo

        DateTime now = rtc.now(); 

        logfile.print(now.day(), DEC);

        logfile.print('/');

        logfile.print(now.month(), DEC);

        logfile.print('/');

        logfile.println((now.year()-2000), DEC);

        

        if(now.hour()<10)lcd.print(F("0"));// sempre 2 dígitos

        logfile.print(now.hour());

        logfile.print(F(":"));

        if(now.minute()<10)lcd.print(F("0"));

        logfile.print(now.minute());

        logfile.print(F(":"));

        if(now.second()<10)lcd.print(F("0"));

        logfile.print(now.second());

        logfile.print(F("-"));

            

        lcd.clear();

        lcd.setBacklight(HIGH);

        lcd.setCursor(0, 0);

        lcd.print(F("    FILE OPEN   "));

        lcd.print(F(" "));

        lcd.setCursor(0, 1);

        lcd.print(F("File:"));

        lcd.print(filename);

        delay(1000);

        

        break;  // leave the loop!

        }

       }

        if (! logfile) {

          error("couldnt create file");

          Serial.println(F("Fail to create file"));

          lcd.clear();

          lcd.setBacklight(HIGH);

          lcd.setCursor(3, 0);

          lcd.print(F("* FAIL ON *"));

          lcd.setCursor(3, 1);

          lcd.print(F("* SD CARD *"));

          digitalWrite(lederroPin, HIGH);   // turn the LED on (HIGH is the voltage level)

          }

          Serial.print(F("Logging to: "));

          Serial.println(filename);

          delay(1000);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             


} //end fileopen


void gravacao()                                      

{

 for(int k=2; k>1; k++) //Para manter o loop da gravação

 {


    char leitura_teclas = teclado_personalizado.getKey(); // Atribui a variavel a leitura do teclado

    

    if(leitura_teclas == 'R'){ // Se a tecla Reset foi pressionada

      lcd.clear();

      resetando();

    }

    if(leitura_teclas == 'S'){ // //Teste tecla Parada para interromper a gravação e retornar ao menu 1

      Serial.println("Parada solicitada");

      lcd.clear();

      tela=1;

      return; // finalmente retornou ao menu principal!

    }

 

    unsigned long atual = millis();

    

    digitalWrite(record, LOW); //Indica gravação no cartão

 

    //Leitura das CPs

     

    //cpp1 = (analogRead(cp1)/conv);

    

    float cpp1 = 5.0 * analogRead(0) * 600.0 / 1024.0;

    

    //Serial.println(mediaMovel(sample));

    //delay(100);

    

    

    cpp2 = (analogRead(cp2)/conv);

    cpp3 = (analogRead(cp3)/conv);

    cpp4 = (analogRead(cp4)/conv);

    cpp5 = (analogRead(cp5)/conv);

    // cpp6 = (analogRead(cp6)/conv);

    // cpp7 = (analogRead(cp7)/conv);

    // cpp8 = (analogRead(cp8)/conv);

 

  if (atual - Tgrava > 1000) {

      Serial.print( (String) "DATA,DATE,TIME,TIMER,"); //Menu PLX-DAQ

      Serial.print(cpp1);

      Serial.print(F(","));

      Serial.print(cpp2);

      Serial.print(F(","));

      Serial.print(cpp3);

      Serial.print(F(","));

      Serial.print(cpp4);

      Serial.print(F(","));

      Serial.print(cpp5);

      Serial.print(F(","));

      //Serial.print(cpp6);

      //Serial.print(F(","));

      //Serial.print(cpp7);

      //Serial.print(F(","));

      //Serial.print(cpp8);

      Serial.print(F(","));

      Serial.print(robojax1.readCelsius(),1); // termopar 1

      Serial.print(F(","));

      Serial.print(robojax2.readCelsius(),1); // termopar 2

      Serial.print(F(","));

      Serial.print(robojax3.readCelsius(),1); // termopar 3

      Serial.print(F(","));

      Serial.print(robojax4.readCelsius(),1); // termopar 4

      Serial.print(F(","));

      Serial.print(robojax5.readCelsius(),1); // termopar 5

      Serial.println(F(","));

      //Serial.print(robojax6.readCelsius(),1); // termopar 6

      //Serial.print(F(","));

      //Serial.print(robojax7.readCelsius(),1); // termopar 7

      //Serial.print(F(","));

      //Serial.println(robojax8.readCelsius(),1); // termopar 8

        

      //Saída LCD

      lcd.setCursor(0,0);                     

        lcd.print(cpp1);

        lcd.print(F("|"));

        lcd.print(cpp2);

        lcd.print(F("|"));

        lcd.print(cpp3);

        lcd.print(F(" mbar "));

        //lcd.print(cpp4);

        lcd.print(F("......."));

      lcd.setCursor(0,1);                     

        //lcd.print(F("."));

        lcd.print(cpp4);

        lcd.print(F(" | "));

        lcd.print(cpp5);

        lcd.print(F(" | "));

        //lcd.print(cpp7);

        //lcd.print(F("."));

        //lcd.print(cpp8);

        lcd.print(F("mbar "));

     

     //Saída Cartão SD    

      logfile.flush();

      DateTime now = rtc.now();

      if(a==0){

        logfile.println(F("Time,#,PT1,PT2,PT3,PT4,PT5,T1,T2,T3,T4,T5"));

        a++;

       }

        if(now.hour()<10)logfile.print(F("0"));// sempre 2 dígitos

        logfile.print(now.hour());

        logfile.print(F(":"));

        if(now.minute()<10)logfile.print(F("0"));

        logfile.print(now.minute());

        logfile.print(F(":"));

        if(now.second()<10)logfile.print(F("0"));

        logfile.print(now.second());

        logfile.print(F(" , "));

        logfile.print(z);

        logfile.print(F(" , "));

        logfile.print(cpp1);

        logfile.print(F(" , "));

        logfile.print(cpp2);

        logfile.print(F(" , "));

        logfile.print(cpp3);

        logfile.print(F(" , "));

        logfile.print(cpp4);

        logfile.print(F(" , "));

        logfile.print(cpp5);

        logfile.print(F(" , "));

        //logfile.print(cpp6);

        //logfile.print(F(" , "));

        //logfile.print(cpp7);

        //logfile.print(F(" , "));

        //logfile.print(cpp8);

        //logfile.print(F(" , "));

        logfile.print(robojax1.readCelsius()); // termopar 1

        logfile.print(F(","));

        logfile.print(robojax2.readCelsius()); // termopar 2

        logfile.print(F(","));

        logfile.print(robojax3.readCelsius()); // termopar 3

        logfile.print(F(","));

        logfile.print(robojax4.readCelsius()); // termopar 4

        logfile.print(F(","));

        logfile.print(robojax5.readCelsius()); // termopar 5

        logfile.println(F(","));

        //logfile.print(robojax6.readCelsius()); // termopar 6

        //logfile.print(F(","));

        //logfile.print(robojax7.readCelsius()); // termopar 7

        //logfile.print(F(","));

        //logfile.println(robojax8.readCelsius()); // termopar 8

      

      z++;

      digitalWrite(record, HIGH);

      Tgrava = atual;

      }

   

     }    

  w++; //Contagem para base de tempo


 

} ///////////////////end gravacao()

 

void temperatures()                                      

{

 for(int k=2; k>1; k++) //Para manter o loop da gravação

 {


    char leitura_teclas = teclado_personalizado.getKey(); // Atribui a variavel a leitura do teclado

    

    if(leitura_teclas == 'R'){ // Se a tecla Reset foi pressionada

      lcd.clear();

      resetando();

    }

    if(leitura_teclas == 'S'){ // //Teste tecla Parada para interromper a gravação e retornar ao menu 1

      Serial.println("Parada solicitada");

      lcd.clear();

      tela=4;

      return; // finalmente retornou ao menu principal!

    }

 

    unsigned long atual = millis();

    

    digitalWrite(record, LOW); //Indica gravação no cartão

 

    //Leitura das CPs

     

    cpp1 = (analogRead(cp1)/conv);

    cpp2 = (analogRead(cp2)/conv);

    cpp3 = (analogRead(cp3)/conv);

    cpp4 = (analogRead(cp4)/conv);

    cpp5 = (analogRead(cp5)/conv);

    //cpp6 = (analogRead(cp6)/conv);

    //cpp7 = (analogRead(cp7)/conv);

    //cpp8 = (analogRead(cp8)/conv);

 

  if (atual - Tgrava > 1000) {

      Serial.print( (String) "DATA,DATE,TIME,TIMER,"); //Menu PLX-DAQ

      Serial.print(cpp1);

      Serial.print(F(","));

      Serial.print(cpp2);

      Serial.print(F(","));

      Serial.print(cpp3);

      Serial.print(F(","));

      Serial.print(cpp4);

      Serial.print(F(","));

      Serial.print(cpp5);

      Serial.print(F(","));

      //Serial.print(cpp6);

      //Serial.print(F(","));

      //Serial.print(cpp7);

      //Serial.print(F(","));

      //Serial.print(cpp8);

      Serial.print(F(","));

      Serial.print(robojax1.readCelsius(),0.1); // termopar 1

      Serial.print(F(","));

      Serial.print(robojax2.readCelsius(),0.1); // termopar 2

      Serial.print(F(","));

      Serial.print(robojax3.readCelsius(),0.1); // termopar 3

      Serial.print(F(","));

      Serial.print(robojax4.readCelsius(),0.1); // termopar 4

      Serial.print(F(","));

      Serial.print(robojax5.readCelsius(),0.1); // termopar 5

      Serial.println(F(","));

      //Serial.print(robojax6.readCelsius(),1);

      //Serial.print(F(","));

      //Serial.print(robojax7.readCelsius(),0.1); // termopar 7

      //Serial.print(F(","));

      //Serial.println(robojax8.readCelsius(),0.1); // termopar 8

        

      //Saída LCD

      lcd.setCursor(0,0);                     

        lcd.print(robojax1.readCelsius(),0.1);

        lcd.print(F("."));

        lcd.print(robojax2.readCelsius(),0.1);

        lcd.print(F("."));

        lcd.print(robojax3.readCelsius(),0.1);

        lcd.print(F("."));

        lcd.print(robojax4.readCelsius(),0.1);

        lcd.print(F("......."));

      lcd.setCursor(0,1);                     

        lcd.print(F("."));

        lcd.print(robojax5.readCelsius(),0.1);

        lcd.print(F("."));

        //lcd.print(robojax6.readCelsius(),0.1);

        //lcd.print(F("."));

        //lcd.print(robojax7.readCelsius(),0.1);

        //lcd.print(F("."));

       // lcd.print(robojax8.readCelsius(),0.1);

        lcd.print(F("......."));

     

     //Saída Cartão SD    

      logfile.flush();

      DateTime now = rtc.now();

      if(a==0){

        logfile.println(F("Time,#,PT1,PT2,PT3,PT4,PT5,PT6,PT7,PT8,T1,T2,T3,T4,T5"));

        a++;

       }

        if(now.hour()<10)logfile.print(F("0"));// sempre 2 dígitos

        logfile.print(now.hour());

        logfile.print(F(":"));

        if(now.minute()<10)logfile.print(F("0"));

        logfile.print(now.minute());

        logfile.print(F(":"));

        if(now.second()<10)logfile.print(F("0"));

        logfile.print(now.second());

        logfile.print(F(" , "));

        logfile.print(z);

        logfile.print(F(" , "));

        logfile.print(cpp1);

        logfile.print(F(" , "));

        logfile.print(cpp2);

        logfile.print(F(" , "));

        logfile.print(cpp3);

        logfile.print(F(" , "));

        logfile.print(cpp4);

        logfile.print(F(" , "));

        logfile.print(cpp5);

        logfile.print(F(" , "));

        //logfile.print(cpp6);

        //logfile.print(F(" , "));

        //logfile.print(cpp7);

        //logfile.print(F(" , "));

        //logfile.print(cpp8);

        //logfile.print(F(" , "));

        logfile.print(robojax1.readCelsius()); // termopar 1

        logfile.print(F(","));

        logfile.print(robojax2.readCelsius()); // termopar 2

        logfile.print(F(","));

        logfile.print(robojax3.readCelsius()); // termopar 3

        logfile.print(F(","));

        logfile.print(robojax4.readCelsius()); // termopar 4

        logfile.print(F(","));

        logfile.print(robojax5.readCelsius()); // termopar 5

        logfile.println(F(","));

        //logfile.print(robojax6.readCelsius()); // termopar 6

        //logfile.print(F(","));

        //logfile.print(robojax7.readCelsius()); // termopar 7

        //logfile.print(F(","));

        //logfile.println(robojax8.readCelsius()); // termopar 8

      

      z++;

      digitalWrite(record, HIGH);

      Tgrava = atual;

      }

   

     }    

  w++; //Contagem para base de tempo


 

} ///////////////////end gravacao()

 



void resetando()

{

    logfile.close();

    lcd.setCursor(0, 0);

    lcd.print(F("......RESET......"));

    lcd.setCursor(0, 1);

    lcd.print(F("----------------"));    

    delay(1000);  

    resetFunc();  // reset the Arduino via software function

}


Comentários

Postagens mais visitadas