Silícios LabPCBWay
Published © GPL3+

Creating a Datalogger with Arduino - Part II

You will learn how to implement the function of clearing the data from your datalogger.

IntermediateWork in progress1 hour3,805
Creating a Datalogger with Arduino - Part II

Things used in this project

Hardware components

PCBWay Custom PCB
PCBWay Custom PCB
×1
10k Resistor - UTSOURCE
×1
Switch Button - UTSOURCE
×1
Jumper Wires - UTSOURCE
×1
Breadboard - UTSOURCE
×1
UTSOURCE 16x2 LCD Display - UTSOUR
×1
Arduino UNO - UTSOURCE
×1

Story

Read more

Schematics

Electronic Schematic

Code

Code for mini-datalogger - Part 2

Arduino
Implement the function to clear the data from memory.
#include <LiquidCrystal.h> //Inclusão da biblioteca de LCD
#include <EEPROM.h> //Declaracao da biblioteca EEPROM

LiquidCrystal lcd(2,3,4,5,6,7); //LiqyuidCrystal lcd(RS, EN, DB4, DB5, DB6, DB7)

#define pinoBotaoGrava 8 //Botao para salvar os dados conectado no pino digital 10
#define pinoBotaoMostra 9 //Botao para apresentar os dados salvos na memoria EEPROM
#define pinoBotaoLimpaMem 10 //Botao para limpar os dados salvos na memoria EEPROM
#define MemCont 100 //Posicao da memoria utilizada para armazenar o valor da ultima posicao gravada

bool estadoMostra = 0, estadoGrava = 0, EstadoApaga = 0; //Variavel que armazenara o estado do botao para sabermos quando o botao foi solto/pressionado
bool botaoGrava = 0; //Variavel que armazenara o estado do botao para gravar na memoria
bool botaoMostraValor = 0; //Variavel que armazenara o estado do botao para mostrar os valores da memoria
bool botaoLimpa = 0;

byte cont = 0;//Variável utilizada para contar a quantidade de valores gravados

signed int referencia = 0;

void setup() 
{

    for(byte pinos = 2; pinos < 8; pinos++)//Configuracao dos pinos do LCD como saida
    {
      pinMode(pinos, OUTPUT);  
    }
    pinMode(pinoBotaoGrava, INPUT); //Configuracao do pino de gravacao como entrada 
    pinMode(pinoBotaoMostra, INPUT); //Configuracao do pino para mostrar os valores
    pinMode(A0, INPUT); //Configuracao do pino analogico como entrada
    lcd.begin(16,2);            //Inicializa o display de LCD 16 x 2
    cont = EEPROM.read(MemCont);//Resgata o valor anterior armazenado na posicao MemCont(100)
    lcd.clear();//Limpa a tela do LCD
    
}

void loop() 
{
    
    unsigned int valor = analogRead(A0); //Leitura da entrada analógica
    byte mapa = map(valor, 0, 1023, 0, 255); //Mapeia os valores de 0 a 1023 dentro da escala de 0 a 255
    
    if(mapa >=  referencia + 5 || mapa <= referencia - 5)
    {
          lcd.setCursor(1,0);
          lcd.print("Valor Digital:");
          lcd.setCursor(0,1);
          lcd.setCursor(0,1);
          lcd.print("                ");
          lcd.setCursor(6,1);
          lcd.print(mapa);
          referencia = mapa;
    }

    
    botaoGrava = digitalRead(pinoBotaoGrava);
    botaoMostraValor = digitalRead(pinoBotaoMostra);

    //Condicoes referentes ao botao para mostrar os dados
    if(botaoMostraValor == 0 && estadoMostra == 1)
    {  
        estadoMostra = 0;  //Variavel de controle para permitir entrar na condicao de botao mostra pressionado      
    }

    if(botaoMostraValor == 1 && estadoMostra == 0 && EstadoApaga == 0)
    {
      
        estadoMostra = 1;

        if(cont == 0)//Se cont for igual a 0, significa que a memoria esta sem dados armazenados
        {
            lcd.clear(); 
            lcd.setCursor(2,0);
            lcd.print("Sem Dados na");
            lcd.setCursor(4,1);
            lcd.print("Memoria");
            delay(1000);
            lcd.clear();  

            //Imprime a mensagem Valor Digital: com o valor digital lido
            lcd.setCursor(1,0);
            lcd.print("Valor Digital:");
            lcd.setCursor(0,1);
            lcd.setCursor(0,1);
            lcd.print("                ");
            lcd.setCursor(6,1);
            lcd.print(mapa);
        }

        if(cont > 0)
        {
            lcd.clear(); //Limpa a tela do LCD
            for(byte pos = 0; pos < cont; pos++)//Percorre as posicoes de memoria e apresenta ao usuario
            {
              lcd.setCursor(2,0);
              lcd.print("Posicao:");
              lcd.setCursor(12,0);
              lcd.print(pos+1);
              lcd.setCursor(0,1);
              lcd.print("                ");
              lcd.setCursor(6,1);
              lcd.print(EEPROM.read(pos)); //Le o valor da posicao pos da memoria e mostra na tela do LCD
              delay(2500);//Aguarda tempo de 2,5 segundos, para o usuario visualizar
            }  

            //Imprime a mensagem Valor Digital: com o valor digital lido
            lcd.setCursor(1,0);
            lcd.print("Valor Digital:");
            lcd.setCursor(0,1);
            lcd.setCursor(0,1);
            lcd.print("                ");
            lcd.setCursor(6,1);
            lcd.print(mapa);
        }
    }

    //Condicoes referentes ao botao de gravacao de dados 
    if(botaoGrava == 0 && estadoGrava == 1)
    {  
        estadoGrava = 0; //Variavel de controle para permitir entrar na condicao de botao grava pressionado      
        
    }

    if(botaoGrava == 1 && estadoGrava == 0 && EstadoApaga == 0)
    {  

          estadoGrava = 1; 
          
          if(cont > 9)//Se cont for maior que 9, significa que a memoria esta cheia
          {
            
            cont = 10;
            //Imprimir mensagem no LCD  
            lcd.clear(); 
            lcd.setCursor(1,0);
            lcd.print("Memoria Cheia");
            delay(1000);
            lcd.clear();

            //Imprime a mensagem Valor Digital: com o valor digital lido
            lcd.setCursor(1,0);
            lcd.print("Valor Digital:");
            lcd.setCursor(0,1);
            lcd.setCursor(0,1);
            lcd.print("                ");
            lcd.setCursor(6,1);
            lcd.print(mapa);
            
          }
          
          if(cont < 10)
          {
            
            EEPROM.write(cont, mapa);
            lcd.clear();
            lcd.setCursor(1,0);
            lcd.print("Valor Gravado");
            lcd.setCursor(3,1);
            lcd.print("Posicao");
            lcd.setCursor(12,1);
            lcd.print(cont+1);
            cont++;
            EEPROM.write(MemCont, cont);
            delay(1000);
            lcd.clear();

            //Imprime a mensagem Valor Digital: com o valor digital lido
            lcd.setCursor(1,0);
            lcd.print("Valor Digital:");
            lcd.setCursor(0,1);
            lcd.print("                ");
            lcd.setCursor(6,1);
            lcd.print(mapa);
            
          }          
          
    }

    //Condicoes referentes ao botao de limpar dados da memoria
    botaoLimpa = digitalRead(pinoBotaoLimpaMem);
    
    if(botaoLimpa == 1 && EstadoApaga == 0)
    {
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Limpar Memoria ?");
        lcd.setCursor(0,1);
        lcd.print("1 - Sim  2 - Nao");

        EstadoApaga = 1;
  
    }

    if(botaoMostraValor == 1 && EstadoApaga == 1)
    {
        for(byte pos = 0; pos < 10; pos++)//Percorre as posicoes de memoria e apresenta ao usuario
            { 
                          
                 EEPROM.write(pos,0); //Le o valor da posicao pos da memoria e mostra na tela do LCD
              
            }  
            
            lcd.clear();
            lcd.setCursor(1,0);
            lcd.print("Memoria Limpa!");
            delay(1500);
            EstadoApaga = 0;
            cont = 0;

            //Imprime a mensagem Valor Digital: com o valor digital lido
            lcd.setCursor(1,0);
            lcd.print("Valor Digital:");
            lcd.setCursor(0,1);
            lcd.print("                ");
            lcd.setCursor(6,1);
            lcd.print(mapa);
    
    }

    if(botaoGrava == 1 && EstadoApaga == 1)
    {
    
      do
      {
        
        botaoGrava = digitalRead(pinoBotaoGrava);  
        
      }while(botaoGrava == 1);
      
       EstadoApaga = 0;

      //Imprime a mensagem Valor Digital: com o valor digital lido
       lcd.clear();
       lcd.setCursor(1,0);
       lcd.print("Valor Digital:");
       lcd.setCursor(0,1);
       lcd.print("                ");
       lcd.setCursor(6,1);
       lcd.print(mapa);
       delay(3000);
    
    }
    

}

Credits

Silícios Lab

Silícios Lab

73 projects • 173 followers
Hello, I love program microcontrollers and works with electronic projects.
PCBWay

PCBWay

91 projects • 146 followers
We are a PCB and assembly manufacturer, As low as $5/10pcs and 24 hours delivery time. We are committed to helping creators build project.

Comments