Ir ao conteúdo
  • Cadastre-se

Incrementar display duplo de 7 seg, button. Arduino.


Posts recomendados

Olá, gostaria de incrementar um  display duplo de 7 seg, no code que copiei na internet ele usa um display de 3 digitos, fiz minhas modificações para que seja apenas 2 digitos, mas gostaria de usar um btn, não um potenciometro. Alguém me ajuda?
Vou postar o code.

Code:


/*
Example to demonstrate how MULTIPLEX 
and POV (Persistence of Vison) works, 
using 3 Seven Segment Display on Arduino.
(No expansion ports used)
Licensed under MIT License.
02/03/2015 Gilmar Palega
*/

int pausa = 1;

const int pin_pot = A5;
//const int pin_tempo = A4;

const int pin_a = 7;
const int pin_b = 8;
const int pin_c = 9;
const int pin_d = 10;
const int pin_e = 11;
const int pin_f = 12;
const int pin_g = 3;

const int pin_com1 = 4;
const int pin_com2 = 5;
//const int pin_com3 = 6;


void setup() {               
  pinMode(pin_a, OUTPUT);  
  pinMode(pin_b, OUTPUT);  
  pinMode(pin_c, OUTPUT);  
  pinMode(pin_d, OUTPUT);  
  pinMode(pin_e, OUTPUT);  
  pinMode(pin_f, OUTPUT);    
  pinMode(pin_g, OUTPUT);  
  
  pinMode(pin_com1, OUTPUT);  
  pinMode(pin_com2, OUTPUT);  
//  pinMode(pin_com3, OUTPUT); 

  pinMode(pin_pot, INPUT); 
//  pinMode(pin_tempo, INPUT); 
  
  //Serial.begin(9600);
  
}


/*
Conversion table number to bit
If a segment is used to compose the digit, then sum the bit value
  A B C D E F G 
# 1 2 4 8 16  32  64  
------------------------------------------------------------------                
0 1 1 1 1 1 1   63
1   1 1         6
------------------------------------------------------------------
2 1 1   1 1   1 91
3 1 1 1 1     1 79
------------------------------------------------------------------
4   1 1     1 1 102
5 1   1 1   1 1 109
------------------------------------------------------------------
6 1   1 1 1 1 1 125
7 1 1 1         7
------------------------------------------------------------------
8 1 1 1 1 1 1 1 127
9 1 1 1     1 1 103
*/
int get_7SD_value(int n) {
  if (n>9) n=9;
  if (n<0) n=0;
 
  switch(n) {
    case 0: return 63; break;
    case 1: return 6; break;
    case 2: return 91; break;
    case 3: return 79; break;
    case 4: return 102; break;
    case 5: return 109; break;
    case 6: return 125; break;
    case 7: return 7; break;
    case 8: return 127; break;
    case 9: return 103;
  }
  return 0;
}


/*
ATTENTION: I'm using Common Anodes 7 Segment Display.
For Commom Cathodes, you have to invert HIGH and LOW on code bellow.
*/

void check_pin(int pin, int B) {
    if (b == 1) {
      digitalWrite(pin, HIGH); 
      delay(1);
      digitalWrite(pin, LOW);  
    } else 
      digitalWrite(pin, LOW);
}


/*
ATTENTION: I'm using Common Anodes 7 Segment Display.
For Commom Cathodes, you have to invert HIGH and LOW on code bellow.
*/

void display_7sd(int v, int pin_com) {
  if (v>9) v=9;
  if (v<0) v=0;
  
  int n = get_7SD_value(v);
  
  /* turn on common */
  digitalWrite(pin_com, LOW);
  
  
  /* check all segments, and turn on the necessary ones to compose the number */
  check_pin(pin_a, bitRead(n, 0));
  check_pin(pin_b, bitRead(n, 1));
  check_pin(pin_c, bitRead(n, 2));
  check_pin(pin_d, bitRead(n, 3));  
  check_pin(pin_e, bitRead(n, 4));
  check_pin(pin_f, bitRead(n, 5));
  check_pin(pin_g, bitRead(n, 6));

  /* turn off common */
  digitalWrite(pin_com, HIGH);     
}

void display_value(int v) {
  int n;
  
  // Print hundred part - first digit
  n = v / 10;  
  v = v - (n*10);
  display_7sd(n, pin_com1);
  
  // Print decimal part - second digit  
  //n = v / 10;
  //v = v - (n*10);
  display_7sd(n, pin_com2);
  
  // Print the unit, the remainder - third digit  
  //display_7sd(v, pin_com3);
  
  
}  


void loop() {
  
  int tpot = analogRead(pin_pot);
  //pausa = analogRead(pin_tempo) + 1;

  if (tpot > 99) tpot=99;
  display_value(tpot);

}

Link para o comentário
Compartilhar em outros sites

Primeiro será necessário você  usar um pino para o botão, no seu código  o pino disponível é o 2 né? Então:

 

int Contador = 0;       // Variável usada para contar a quantidade de  vezes que o botão foi apertado
int Botao = 2;          // Pino usadao para leitura do botão
pinMode(Botao, INPUT);  // Define o pino 2 (Botao) como entrada

 

Depois você deverá retirar a parte que lê o potenciômetro e adicionar o código para a leitura no botão:

void loop() {
  //int tpot = analogRead(pin_pot);
  //pausa = analogRead(pin_tempo) + 1;
  //if (tpot > 99) tpot=99;
  //display_value(tpot);
  
  if(digitalRead(Botao) == HIGH) {     // Verifica se o botão foi apertado (nível logico alto) e se foi 
    Contador += 1;                     // Incrementa avariavel Contador
    
    if(Contador > 99)                  // Se contador for maior que 99 (conta até 99)
      Contador = 0;                    // Zera a variável Contador
     
    display_value(Contador);           // Envia o novo valor para o display 
    
    while(digitalRead(Botao) == HIGH)  // Espera o botão ser liberado
  }
}

Não testei, nem mesmo na simulação...

 

LXo6N0U.png

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...