/*
* convAd_2_4_0.ino
*
* Conversor A/D - Exemplo
* Leitura de Pino de entrada analógica (A0) e apresentação no LCD
*
* Conexões com o Arduino UNO
* LCD I2C – SDA/A4 SCL/A5
* Potenciômetro - Extremos Vcc e GND - Central/variável A0
*
* Versão:
* 0.0.0 -> Uso do exemplo de ligação do LCD por I2C
* https://pilger-arduino.blogspot.com/2018/11/blog-post_80.html
* https://www.robocore.net/tutoriais/primeiros-passos-com-modulo-i2c.html
* 1.0.0 -> Inclusão Pino A0
* Exemplo/01.Basics/AnalogReadSerial
* https://www.arduino.cc/en/Tutorial/BuiltInExamples/AnalogReadSerial
*
* Data: 20/04/2021
* Autor: Luiz Oscar Ruschel Pilger
*
* 1.1.0 -> Codigo alterado para permitir estabilidade na contagem.
* 2.1.0 -> Introdução do capacitor 100nF para estabilizar a contagem.
* 2.2.0 -> Codigo alterado para ilustrar o resultado na tela LCD.
* 2.3.0 -> Tela LCD ilustra o valor da resistência em k ohms.
* 2.4.0 -> Tanque de combustivel de um veículo Chevrolet-Odya-Joy. 54 Litros.
* 3.5.0 -> Alteração no código e montagem. Dois potenciômetros.
* Data: 19/09/2024
* Nome: Leandro Oliveira Souza
* Turma: 631M1.
*
*/
// inclusão de bibliotecas
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
// apelidos
#define pinoAnalogico1 A0
#define pinoAnalogico2 A1
#define leituras 10
#define pinoBotaoGrava2 8
#define pinoBotaoGrava1 6 //Grava um valor no EEPROM
#define pinoBotaoLe2 7
#define pinoBotaoLe1 5 //Lê um valor no EEPROM
#define enderecoEEPROM1 46
#define enderecoEEPROM2 31
#define LED1 12
#define LED2 11
// variáveis globais
int valorAnalogico1;
int valoPWM1; // Valor do PWM.
float PotDec1; // Valor do potenciômetro em decimal.
int valorAnalogico2;
int valoPWM2; // Valor do PWM.
float PotDec2; // Valor do potenciômetro em decimal.
LiquidCrystal_I2C lcd(0x27,16,2); // Criando um LCD de 16x2 no endereço I2C 0x27 PCF8574T
//LiquidCrystal_I2C lcd(0x3F,16,2); // Criando um LCD de 16x2 no endereço I2C 0x3F PCF8574AT
//função setup executa 1 vez no início
void setup(){
lcd.init(); // Inicializando o LCD
lcd.backlight(); // Ligando o BackLight do LCD
pinMode(pinoBotaoGrava2, INPUT_PULLUP); // configura o pinoBotaoGrava como entrada utilizando o pullup interno.
pinMode(pinoBotaoLe2, INPUT_PULLUP); // configura o pinoBotaoLe como entrada utilizando o pullup interno.
pinMode(pinoBotaoGrava1, INPUT_PULLUP); // configura o pinoBotaoGrava como entrada utilizando o pullup interno.
pinMode(pinoBotaoLe1, INPUT_PULLUP); // configura o pinoBotaoLe como entrada utilizando o pullup interno.
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
}
// função loop com código principal
void loop(){
leituraAnalogica1();
leituraAnalogica2();
atualizaLcd();
testaBotaoGrava2(); // Gravar um valor no EEPROM
testaBotaoLer2(); //Ler um valor no EEPROM
testaBotaoGrava1(); // Gravar um valor no EEPROM
testaBotaoLer1(); //Ler um valor no EEPROM
analogWrite (LED1, enderecoEEPROM1);
analogWrite (LED2, enderecoEEPROM2);
}
void leituraAnalogica1 (void){
valorAnalogico1=0; // zera a variável
for(int i=0; i<leituras; i++){ // laço com repetição de "leituras"
valorAnalogico1 = valorAnalogico1 + analogRead(pinoAnalogico1); // Acumula a nova leitura do Conv.A/D
delay(1); // atraso para estabilizar o conversor
}
valorAnalogico1 = valorAnalogico1/leituras; // faz a média de leituras
valoPWM1 = map (valorAnalogico1, 0, 1023, 0, 255);
PotDec1 = (float)valoPWM1/2;
}
void leituraAnalogica2 (void){
valorAnalogico2=0; // zera a variável
for(int i=0; i<leituras; i++){ // laço com repetição de "leituras"
valorAnalogico2 = valorAnalogico2 + analogRead(pinoAnalogico1); // Acumula a nova leitura do Conv.A/D
delay(1); // atraso para estabilizar o conversor
}
valorAnalogico2 = valorAnalogico2/leituras; // faz a média de leituras
valoPWM2 = map (valorAnalogico2, 0, 1023, 0, 255);
PotDec2 = (float)valoPWM2/2;
}
void testaBotaoGrava1() {
if (digitalRead(pinoBotaoGrava1) == LOW) {
while (digitalRead(pinoBotaoGrava1) == LOW)
;
EEPROM.put(enderecoEEPROM1, PotDec1);
lcd.setCursor(8, 0);
lcd.print("Grava ");
delay(1000);
}
}
void testaBotaoLer1() {
if (digitalRead(pinoBotaoLe1) == LOW) {
while (digitalRead(pinoBotaoLe1) == LOW)
;
PotDec1 = EEPROM.get(enderecoEEPROM1, valoPWM1);
lcd.setCursor(8, 0);
lcd.print("Ler ");
delay(1000);
}
}
void testaBotaoGrava2() {
if (digitalRead(pinoBotaoGrava2) == LOW) {
while (digitalRead(pinoBotaoGrava2) == LOW)
;
EEPROM.put(enderecoEEPROM2, PotDec2);
lcd.setCursor(8, 1);
lcd.print("Grava ");
delay(1000);
}
}
void testaBotaoLer2() {
if (digitalRead(pinoBotaoLe2) == LOW) {
while (digitalRead(pinoBotaoLe2) == LOW)
;
PotDec2 = EEPROM.get(enderecoEEPROM2, valoPWM2);
lcd.setCursor(8, 1);
lcd.print("Ler ");
delay(1000);
}
}
void atualizaLcd (void){
lcd.print(""); // Exibindo no LCD texto
lcd.setCursor(0,0); // posiciona o cluros no início da 1ª linha
lcd.print("P1%: PWM%: "); // imprime o texto
lcd.setCursor(0,1); // posiciona o cluros no início da 2ª linha
lcd.print("P2%: PWM%: "); // imprime o texto
lcd.setCursor(5,0); // posiciona o cursor
lcd.print(PotDec1,2); // imprime o valor analógico
lcd.setCursor(5,1); // posiciona o cursor
lcd.print(PotDec2,2); // imprime o valor analógico
lcd.setCursor(14,0); // posiciona o cursor
lcd.print(valoPWM1); // imprime o valor analógico
lcd.setCursor(14,1); // posiciona o cursor
lcd.print(valoPWM2); // imprime o valor analógico
}