Sou meio novato em Arduino então se alguem poder me ajudar fico grato, estou com um código para o Display de 7 Segmentos contar de forma decrescente, no entanto queria faze-lo contar crescentemente ao apertar o botão, já tentei de várias formas sem sucesso, alguém poderia dar uma dica ou algo do tipo ? obg.

Segue código: Arduino.txt

Exibições: 1036

Responder esta

Respostas a este tópico

Seu programa me parece correto. O que acontece de errado?

aonde tem:

  for (byte count = 16; count >0; --count) {    

troca para:

  for (byte count = 1; count <= 16; ++count) {    


@Mauro Assis

Meu Problema e na hora de adicionar o botão, eu uso " if " para checar o estado do botão, só que tenho problema para sair do loop e executar o comando do botão.

@Flavio Bruzaca

Então, mas queria que ele fizesse isso enquanto o botão estivesse pressionado.

Algo assim:

// Define the LED digit patters, from 0 - 9

// Note that these patterns are for common cathode displays

// For common anode displays, change the 1's to 0's and 0's to 1's

// 1 = LED on, 0 = LED off, in this order:

//                    Arduino pin: 2,3,4,5,6,7,8

byte seven_seg_digits[16][7] = { { 1,0,0,0,0,0,0 },  // = 0

                                 { 1,1,1,1,1,0,0 },  // = 1

                                 { 0,0,1,0,0,1,0 },  // = 2

                                 { 0,1,1,0,0,0,0 },  // = 3

                                 { 0,1,0,1,1,0,0 },  // = 4

                                 { 0,1,0,0,0,0,1 },  // = 5

                                 { 0,0,0,0,0,0,1 },  // = 6

                                 { 1,1,1,1,0,0,0 },  // = 7

                                 { 0,0,0,0,0,0,0 },  // = 8

                                 { 0,1,0,0,0,0,0 },  // = 9

                                 { 0,0,0,1,0,0,0 },  // = A

                                 { 0,0,0,0,1,0,1 },  // = B

                                 { 1,0,0,0,0,1,1 },  // = C

                                 { 0,0,1,0,1,0,0 },  // = D

                                 { 0,1,1,0,0,0,0 },  // = E

                                 { 0,1,1,1,0,0,0 },  // = F

 };

 

#define pinButton 10 

void setup() {               

  pinMode(2, OUTPUT);  

  pinMode(3, OUTPUT);

  pinMode(4, OUTPUT);

  pinMode(5, OUTPUT);

  pinMode(6, OUTPUT);

  pinMode(7, OUTPUT);

  pinMode(8, OUTPUT);

  pinMode(9, OUTPUT);

  pinMode(pinButton,INPUT); 

}

 

   

void sevenSegWrite(byte digit) {

  byte pin = 2;

  for (byte segCount = 0; segCount < 7; ++segCount) {

    digitalWrite(pin, seven_seg_digits[digit][segCount]);

    ++pin;

  }

}

 

void loop() {

  while(digitalRead(pinButton)==0); // espera até que o sujeito pressione o botão

  for (byte count = 16; count >0; --count) {

   if(digitalRead(pinButton) == 0) // se o cabra largou o botão...

      break;    // cai fora!

   delay(1000);

   sevenSegWrite(count);

  }

  delay(1000);

}

Olá Fabiano, 

Adicione um if testando a condição do pino onde o botão está conectado, dentro deste if coloque a instrução de como vc quer que o display execute a sequencia de numeros, encerre o if e acione um else para o restante do programa.
ficaria assim:

Se botão presionado, faça, ascender display de 0 a F
Senão, ascender display de F a 0.


@Mauro

Obrigado, ajudou muito o botão agora funciona normalmente, eu modiquei um pouco mas o zero não aparece na contagem decrescente :/ , eu tenho que pressionar 2 vezes o botão para entrar no loop crescente, mas uma vez obg, e se não for abusar de uma olhadinha no codigo ja que nao consegui descobrir os erros citados. Segue modificações:

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço