Projeto Contrapressão Arduino

 Contrapressao_V7.14.1


/* Wilson R Bueno 10/05/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 V7.12 - progressivo
  * V7.13 - alteração submenus -ok
  * V7.14 - simplificando os menus - ok
  * V7.14.1 - progressivo - delay(5); para otimizar a leitura analógica
  */

// --- 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
int d = 0; // constante para mudar menu no LCD: CP ou temperatura

//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,};

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(" MARELLI R&D-TE"));
    lcd.print(F(" "));
    lcd.setCursor(0, 1);
    lcd.print(F("Ver 07.14-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!
    }

    //Para troca de tela no LCD
    if(leitura_teclas == 'U'){
      if(d==0)d=1;
      else if (d==1)d=0;
      }
    if(leitura_teclas == 'D'){
      if(d==0)d=1;
      else if (d==1)d=0;
      }


    unsigned long atual = millis();
   
    digitalWrite(record, LOW); //Indica gravação no cartão
 
    //Leitura das CPs
   
    int cp1 = (analogRead(A0));
    delay(5); //otimizar a leitura, descarregando o capacitor interno do Arduino
    int cp2 = (analogRead(A1));
    delay(5);
    int cp3 = (analogRead(A2));
    delay(5);
    int cp4 = (analogRead(A3));
    delay(5);
    int cp5 = (analogRead(A4));
    delay(5);

    int cpp1 = cp1 * (605.0 / 1023.0);
    int cpp2 = cp2 * (600.0 / 1023.0);
    int cpp3 = cp3 * (600.0 / 1023.0);
    int cpp4 = cp4 * (600.0 / 1023.0);
    int cpp5 = cp5 * (600.0 / 1023.0);
   
    /*
    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(),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


    if(d==0){    
      //Saída LCD CPs
      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 <<<<<<<<"));
      }    
     
     if(d==1){    
     //Saída LCD temperaturas
      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.write((byte)0);  //Mostra o simbolo do grau formado pelo array
        lcd.print(F("C <<<<<<"));
      lcd.setCursor(0,1);                    
        lcd.print(robojax4.readCelsius(),0.1);
        lcd.print(F("|"));
        lcd.print(robojax5.readCelsius(),0.1);
        lcd.print(F("   "));
        lcd.write((byte)0);  //Mostra o simbolo do grau formado pelo array
        lcd.print(F("C <<<<<<"));
        //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,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
}












/*
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()
 
*/

Comentários