Bom dia gente.

Eu estou com um problema, eu montei um contador, como se fosse um contador de segundos que vai de 00 a 99, tentei colocar um LDR ligado no aos 5V do arduino em serie com um resistor de 1k que esta ligado ao GND, como se fosse um potenciômetro, e na junção entre LDR e resistor de 1k eu liguei na porta 2 do arduino. O meu problema é que eu não estou conseguindo fazer uma função que, para cada variação no LDR ela adicione no contador, que seria os display.

 

Qualquer sugestão esta valendo.

Segue o código que eu montei.

 

int a = 3, b = 4, c = 5, d = 6, e = 7, f = 8, g = 9;
int num[10][7] = {

{a,b,c,d,e,f},
{b,c},
{a,b,e,d,g},
{a,b,c,d,g},
{b,c,f,g},
{a,c,d,g,f},
{a,c,d,e,f,g},
{a,b,c},
{a,b,c,d,e,f,g},
{a,b,c,f,g},};

void setup() {
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}

void loop(){
for(int dig2=0; dig2<10; dig2++){
for(int dig1=0; dig1<10;dig1++){
for(int tempo=0; tempo<1000; tempo++){
digito1(dig1);
delayMicroseconds (500);
digito2(dig2);
delayMicroseconds (500);
}
}
}
}

 

void digito1(int i){

digitalWrite(11,LOW);
digitalWrite(12,HIGH);
numero(i);
apaga(1);
}

void digito2(int j){

digitalWrite(11,HIGH);
digitalWrite(12,LOW);
numero(j);
apaga(1);
}

void PD(int m){
digitalWrite(10, HIGH);

switch(m){
case 1:
digitalWrite(11,LOW);
digitalWrite(12,HIGH); break;

case 2:
digitalWrite(11,HIGH);
digitalWrite(12,LOW); break;

case 3:
digitalWrite(11,HIGH);
digitalWrite(12,HIGH); break;
}
}

void apaga(int AP) {
switch(AP){
case 1:
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW); break;

case 2:
digitalWrite(10,LOW); break;
}
}

void numero(int n){
for(int i=0;i<7;i++) digitalWrite(num[n][i], HIGH);
}

Exibições: 2416

Anexos

Responder esta

Respostas a este tópico

Se entendi sua dificuldade é somar somente quando existe uma transição no pino (e não quando o pino está em determinado nível).

Se for isso, vc está procurando uma borda.

borda= Sinal anterior = 0 e sinal atual=1.

Se vc memorizar o sinal anterior (atribuir a uma variável no final do loop) e comparar com o atual consegue isso.

Provavelmente vc vai ter problemas por ruído, que vai gerar disparos indesejados. Para resolver considere colocar um contador de loops. Se vc acabou de receber um pulso use o contador para dar um "mute" no seu sinal. 

Evite ao máximo o uso de delay... Se seu programa fizer só isso tudo bem, mas quando a coisa crescer eles vão te atrapalhar. Uma solução alternativa seria a maquina de estado, que se for montado em um timer fica perfeito !

Outra sugestão de melhoria: Senti que vc sofreu para escrever bit a bit nas portas do Arduino... Se vc escrever direto um Byte fica mais fácil. Basta organizar seu display inteiro na mesma porta.

Aih o seu a,b,c,d,e,f... viram bytes com os bits de cada segmento.

Aih um "0" vira a+b+c.... correspondente a ele.

Veja:

http://www.arduino.cc/en/Reference/PortManipulation

Veja também a parte que manda tomar cuidado...  Mas com cuidado é tranquilo.

Especifique melhor o que quer fazer, voce quer fazer um contador (exemplo contar peças, segundos, etc), ou voce quer mostrar a porcentagem de luminosidade que o LDR esta captando.

detalhe melhor o funcao para que possamos trabalhar o algoritmo, dai sim apos isso parti para o codigo que teoricamente e simples demais

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço