Olá Garaginos

Estou desenvolvendo um projeto utilizando o CI 74hc595 utilizando a biblioteca ShiftOutMega.h, que facilita todo o trabalho, não necessitando trabalhar valores hexadecimais.

Esta parte do projeto é um contador regressivo de segundos 60 - 00.

Problema:

Preciso controlar a execução através de uma variável (informar por qual segundo começar). Já tentei algumas possibilidades, mas não tive sucesso.

Segue abaixo parte do código(para não ficar muito grande), para entendimento.

Ficarei agradecido pelas colaborações.

/*

- Pino 8 do Arduino ligado ao pino 12 do CI.
- Pino 11 do Arduino ligado ao pino 14 do CI.
- Pino 12 do Arduino ligado ao pino 11 do CI.

- Led 1 = Pino 15 do CI.
- Led 2 = Pino 1 do CI.
- Led 3 = Pino 2 do CI.
- Led 4 = Pino 3 do CI.
- Led 5 = Pino 4 do CI.
- Led 6 = Pino 5 do CI.
- Led 7 = Pino 6 do CI.

- Pinos 10 e 16 do CI ligados ao Vcc.
- Pinos 8 e 13 do CI ligados ao GND.
- Pino 9 do CI ligado ao pino 14 do próximo CI.
*/

#include <ShiftOutMega.h> //Inclui a bilioteca ShiftOutMega.h

//Variáveis de uso dos registradores 74HC595
int latchPin = 8; //Pino 8 conectado ao pino 12 do 74HC595 (Latch).
int dataPin = 11; //Pino 11 conectado ao pino 14 do 74HC595 (Data).
int clockPin = 12; //Pino 12 conectado ao pino 11 do 74HC595 (Clock).

//Quantidade de registradores (74HC595). Para cada registrador, temos 8 saídas.
int qtdRegistradores = 10;

ShiftOutMega mega(latchPin, dataPin, clockPin, qtdRegistradores); //Inicia a biblioteca passando os parametros de uso.

void setup(){

}

void loop(){

mega.shiftWrite(1, LOW); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, LOW); //D1
mega.shiftWrite(5, LOW); //E1
mega.shiftWrite(6, LOW); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 10
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, HIGH); //D2
mega.shiftWrite(12, HIGH); //E2
mega.shiftWrite(13, HIGH); //F2
mega.shiftWrite(14, LOW); //G2
delay(1000);

mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 09
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, HIGH); //D2
mega.shiftWrite(12, LOW); //E2
mega.shiftWrite(13, HIGH); //F2
mega.shiftWrite(14, HIGH); //G2
delay(1000);

mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 08
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, HIGH); //D2
mega.shiftWrite(12, HIGH); //E2
mega.shiftWrite(13, HIGH); //F2
mega.shiftWrite(14, HIGH); //G2
delay(1000);

mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 07
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, LOW); //D2
mega.shiftWrite(12, LOW); //E2
mega.shiftWrite(13, LOW); //F2
mega.shiftWrite(14, LOW); //G2
delay(1000);

mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 06
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, LOW); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, HIGH); //D2
mega.shiftWrite(12, HIGH); //E2
mega.shiftWrite(13, HIGH); //F2
mega.shiftWrite(14, HIGH); //G2
delay(1000);

mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 05
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, LOW); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, HIGH); //D2
mega.shiftWrite(12, LOW); //E2
mega.shiftWrite(13, HIGH); //F2
mega.shiftWrite(14, HIGH); //G2
delay(1000);

mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 04
mega.shiftWrite(8, LOW); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, LOW); //D2
mega.shiftWrite(12, LOW); //E2
mega.shiftWrite(13, HIGH); //F2
mega.shiftWrite(14, HIGH); //G2
delay(1000);

mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 03
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, HIGH); //D2
mega.shiftWrite(12, LOW); //E2
mega.shiftWrite(13, LOW); //F2
mega.shiftWrite(14, HIGH); //G2
delay(1000);

mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 02
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, LOW); //C2
mega.shiftWrite(11, HIGH); //D2
mega.shiftWrite(12, HIGH); //E2
mega.shiftWrite(13, LOW); //F2
mega.shiftWrite(14, HIGH); //G2
delay(1000);

mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 01
mega.shiftWrite(8, LOW); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, LOW); //D2
mega.shiftWrite(12, LOW); //E2
mega.shiftWrite(13, LOW); //F2
mega.shiftWrite(14, LOW); //G2
delay(1000);

mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 00
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, HIGH); //D2
mega.shiftWrite(12, HIGH); //E2
mega.shiftWrite(13, HIGH); //F2
mega.shiftWrite(14, LOW); //G2
delay(1000);

}

Exibições: 629

Responder esta

Respostas a este tópico

amigo nao entendi muito bem seu projeto

vc quer q dependendo do tempo do arduino escreva o numero no seu registrador?

Bom dia José Miguel

Tentando explicar... Na parte do código postado o display vai apresentar a contagem regressiva de 10 a 00 automaticamente. O que preciso é ter uma variável de controle onde posso informar de qual segundo quero começar.

Ex. Se informo nesta variável de controle o valor 05, então a contagem terá início a partir de 05 segundos e se informo 10, então iniciará a partir de 10 segundo.

a sim entendi

o q vc pode fazer eh varias threads uma pra cada numero

entao vc envia o comando ( q tb precisamos saber pra entender qual tipo de variavel sera ex. se vc for enviar um caracter vms usar char e etc.) e faz ele chamar as threads dependendo do comando com a sequencia correta

ex. se vc mandar um caracter "5" vc faz uma leitura do caracter e ele chama as threads de 5 a 0

xiiiii

É que na programação sou fraquinho pra caramba!

Eu até tentei fazer cada conjunto de número (60, 59, etc) em função, mas não consegui.

Sei que do jeito que esta desenvolvido é o mais simples possível, sei que poderia fazer a contagem regressiva com vetores...

Poderia me ajudar no desenvolvimento? Se quiser, me envie e-mail: ruytercaetano@hotmail.com para acertarmos.

Seria bom que não envie por e-mail, o fórum é exatamente um lugar para que todos troquem informação. Embora cada um tem a liberdade de fazer o que quiser.

Abraços!

Na elaboração, pensei justamente sobre isso, mas achei que ia ficar parecendo que estava estaria forçando a barra.

Claro que servira para toda comunidade.

Oi Ruyter,

Acho que não nos devemos nos preocupar com isso não, o fórum é justamente um lugar onde todos se encontram, aqueles que muito sabem sobre o assunto, os que pouco sabem, os que estão aprendendo, os que gostam de ensinar aos outros, em fim.. se ninguém quiser ajudar com seu código, coisa que acho improvável, não ha problemas, e se postarem uma solução, todos somos beneficiado, mas o mais beneficiado será mesmo aquele que postar a ajuda com seu conhecimento, porque ensinar, é o espelho de aprender, quem ensina aprende, e o inverso também claro.

Um grande abraço!

seria assim vc cria um void pro numero
ex.
void dez()
{
mega.shiftWrite(1, LOW); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, LOW); //D1
mega.shiftWrite(5, LOW); //E1
mega.shiftWrite(6, LOW); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 10
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, HIGH); //D2
mega.shiftWrite(12, HIGH); //E2
mega.shiftWrite(13, HIGH); //F2
mega.shiftWrite(14, LOW); //G2
delay(1000);
}
void nove()
{
mega.shiftWrite(1, HIGH); //A1
mega.shiftWrite(2, HIGH); //B1
mega.shiftWrite(3, HIGH); //C1
mega.shiftWrite(4, HIGH); //D1
mega.shiftWrite(5, HIGH); //E1
mega.shiftWrite(6, HIGH); //F1
mega.shiftWrite(7, LOW); //G1 //NUMERO 09
mega.shiftWrite(8, HIGH); //A2
mega.shiftWrite(9, HIGH); //B2
mega.shiftWrite(10, HIGH); //C2
mega.shiftWrite(11, HIGH); //D2
mega.shiftWrite(12, LOW); //E2
mega.shiftWrite(13, HIGH); //F2
mega.shiftWrite(14, HIGH); //G2
delay(1000);
}
e assim vai
ai vc chama eles na sua funçao do loop
ex.
suponhamos q vc vai usar comandos via serial
void setup()
{
Serial.read(9600);
}
void loop()
{
char c = Serial.read();
if(c == 's')//se recebido o caracter s
{
dez();
nove();
// e assim por diante....
}
}

ai vc vai colocando os numeros se for 1 chama so a thread um
se for 2 chama so a thread dois e um
se for 3 chama as threads tres, dois, um
.... e assim vai
se for usar o serial e numeros com mais de um numeral (como 10 por exemplo) vc vai ter q usar leitura de substring ... se for seu caso pergunte ai q te ajudo
deu pra entender mais ou menos ? kkkkkk
qq duvida posta ai blz.

Boa tarde José MIguel

A variável de controle que ira receber a informação de qual segundo começar, eu queria que fosse uma do tipo:

int controle = 10;

Onde a variável controle recebe o número do segundo a começar.

Teria como trabalhar deste jeito, como seria?

Tentei fazer modificações na ajuda que me enviou, mas não tive sucesso.

sim  Ruyter Caetano Borges  mas vc ainda nao falou como sera a funçao q o pino 10 ira receber, seria um pushboton ligado nele? se puder coloca o codigo q vc tem ate agr

Este código é só o que está na primeira postagem, exceto a composição dos números que são bem mais...

Este código vai ser usado (inserido) em um outro, e ai no lugar que ele estiver será executado automaticamente, conforme o segundo inserido na variável de controle

Retornando ao projeto...

Neste projeto terei 4 display funcionando de forma independente e simultânea, então precisaremos de ter uma variável para cada display

A inserção do valor que cada display ira começar poderá ser no próprio código, pois depois quero inserir isso através de um BD. Então não precisa ser por um pushboton ou serial.

Sobre o funcionamento simultâneo eu gostaria de partilhar um aprendizado

Quando a gente utiliza um delay (1000) , o código para de ser processando até que atinja o tempo determinado e quando se usa millis (tempo) o codigo continua o processamento da parte posterior e fica monitorando o millis para executar o que foi programado ao atingir o tempo estabelecido.

Sei que vou ter que utilizar o millis neste projeto

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço