Professional Documents
Culture Documents
D0074 Sketch
D0074 Sketch
D0074 Sketch
CÓDIGO: D0074
AUTOR: BrincandoComIdeias
ACOMPANHE: https://www.youtube.com/brincandocomideias ;
https://www.instagram.com/canalbrincandocomideias/
APRENDA: https://cursodearduino.net/ ; https://cursoderobotica.net
COMPRE: https://www.arducore.com.br/
SKETCH: Menu com Rotary Encoder
DATA: 25/08/2020
*/
// INCLUSÃO DE BIBLIOTECAS
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RotaryEncoder.h>
// DEFINIÇÕES DE PINOS
#define pinSW 5 // BOTAO DO ENCODER
#define pinDT 6 // B
#define pinCLK 7 // A
// DEFINIÇÕES
#define menuMin 0 // VALOR MÍNIMO DE NAVEGAÇÃO DO MENU
#define menuMax 4 // VALOR MÁXIMO DE NAVEGAÇÃO DO MENU
// INSTANCIANDO OBJETOS
LiquidCrystal_I2C lcd(0x27, 16, 2);
RotaryEncoder encoder(pinDT, pinCLK);
// DECLARAÇÃO DE FUNÇÕES
bool botaoApertado(byte pin_sw, int tempoDebounce = 100);
void configuraInterrupcao();
void atualizaDisplay();
// DECLARAÇÃO DE VARIÁVEIS
int menu = 0;
long posicao = 0, posicaoAnt = 0;
byte Leds[3] = {pinR, pinG, pinB}; // ARRAY DAS PORTAS DOS LEDS
void setup() {
Serial.begin(9600);
Serial.println("Iniciando Display");
lcd.clear();
lcd.noBacklight();
configuraInterrupcao();
void loop() {
posicao = encoder.getPosition();
menu = constrain( (menu + (posicao - posicaoAnt) ), menuMin, menuMax);
if ( posicao != posicaoAnt) {
girouEncoder = true;
}
atualizaDisplay();
switch (menu) {
case 1: {
if (girouEncoder) {
lcd.setCursor(0, 1);
lcd.print("1: Vermelho ");
}
digitalWrite(pinR , HIGH);
digitalWrite(pinG , LOW);
digitalWrite(pinB , LOW);
girouEncoder = false;
break;
}
case 2: {
if (girouEncoder) {
lcd.setCursor(0, 1);
lcd.print("2: Verde ");
}
digitalWrite(pinR , LOW);
digitalWrite(pinG , HIGH);
digitalWrite(pinB , LOW);
girouEncoder = false;
break;
}
case 3: {
if (girouEncoder) {
lcd.setCursor(0, 1);
lcd.print("3: Azul ");
}
digitalWrite(pinR , LOW);
digitalWrite(pinG , LOW);
digitalWrite(pinB , HIGH);
girouEncoder = false;
break;
}
case 4: {
if (girouEncoder) {
lcd.setCursor(0, 1);
lcd.print("4: Branco ");
}
digitalWrite(pinR , HIGH);
digitalWrite(pinG , HIGH);
digitalWrite(pinB , HIGH);
girouEncoder = false;
break;
}
default: {
if (girouEncoder) {
lcd.setCursor(0, 1);
lcd.print("Desligado ");
}
digitalWrite(pinR , LOW);
digitalWrite(pinG , LOW);
digitalWrite(pinB , LOW);
girouEncoder = false;
break;
}
}
// IMPLEMENTO DE FUNÇÕES
bool botaoApertado(byte pin_sw, int tempoDebounce = 100) {
static unsigned long swDebounce;
bool sw;
static bool swAnt = 1;
sw = digitalRead(pin_sw);
return false;
}
void configuraInterrupcao() {
void atualizaDisplay() {