/* ************************************* * Hub 008 - Adaptar o projeto 63 com o módulo display 74HC595 * Autor: Angelo Luis Ferreira * 28/12/2020 * http://squids.com.br/arduino * *************************************** */ #include // inclui a biblioteca do módulo TM74HC5995 #include // Portas saída Arduino - controle do módulo const byte SCLK = 7; const byte RCLK = 6; const byte DIO = 5; // Porta de entrada digital - pushButton const byte pin_but = 2; // Porta de entrada analógica - potenciômetro const byte pin_pot = A0; // Variáveis de controle boolean estado = 0; boolean controle = 0; // Variáveis principais float valor; float tensao; // Inicializa o display TM74HC595Display disp(SCLK, RCLK, DIO); void setup() { Serial.begin(9600); // habilita entradas do Arduino pinMode(pin_but, INPUT_PULLUP); // pullup interno pinMode(pin_pot, INPUT); // opcional (porta analógica é input por padrão) //limpa o display disp.clear(); //Definicao dos digitos de 0 a 9 (conforme biblioteca) unsigned char LED_0F[10]; LED_0F[0] = 0xC0; //0 LED_0F[1] = 0xF9; //1 LED_0F[2] = 0xA4; //2 LED_0F[3] = 0xB0; //3 LED_0F[4] = 0x99; //4 LED_0F[5] = 0x92; //5 LED_0F[6] = 0x82; //6 LED_0F[7] = 0xF8; //7 LED_0F[8] = 0x80; //8 LED_0F[9] = 0x90; //9 Timer1.initialize(1500); // set a timer of length 1500 Timer1.attachInterrupt(timerIsr); // attach the service routine here (chama a rotina timeIsr) } void loop() { // le o estado pushbutton: ligado (LOW) ou desligado (HIGH) estado = digitalRead(pin_but); // verifica se o botão foi pressionado e muda o controle if (!estado) { controle = !controle; // inverte valor de controle (0 ou 1) while(!digitalRead(pin_but)) {} // espera soltar o botão delay(50); } //lê o valor do potenciômetro valor = analogRead(pin_pot); // 0 a 1023 //converte a tensão entre 0 e 5 tensao = (valor * 5) / 1023; // equivale a map(valor, 0, 1023, 0, 5) //exibe os valores no módulo if (controle == 0) { //exibe o valor lido no potenciômetro (int) disp.digit4(valor); delay(10); } else { //exibe o valor da tensão calculado (float) disp.dispFloat(tensao,2); delay(10); } //limpa o display disp.clear(); //mostra valor potenciômetro e tensão no monitor serial Serial.print(valor); Serial.print(" | "); Serial.println(tensao, 2); } //rotina timeIsr (conforme documentação biblioteca) void timerIsr() { disp.timerIsr(); }