Olá a todos!

Este é meu primeiro post, ainda estou aprendendo a programar no arduino e para isto comprei o livro Arduino Básico. O livro é muito bom, porém estou com algumas dúvidas do porque de algumas programações realizadas pelo autor do livro.

Para isto espero que vocês me ajudem, o projeto é este e deve ser muito simples para vários membros:

//PROJETO 5V- EFEITO ILUMINAÇÃO SEQUENCIAL
byte ledPin []={4,5,6,7,8,9,10,11,12,13}; //cria um array para os pinos dos leds
int ledDelay(65);//intervalo entre as alterações
int direction=1;
int currentLed=0;
unsigned long changeTime;
void setup(){
for(int x=0;x<10;x++){//define os pinos como saída
pinMode(ledPin[x],OUTPUT);}
changeTime=millis();
}
void loop(){
if((millis()-changeTime)>ledDelay){//verifica se já transcorreram ledDelay ms desde a ultima alteração
changeLed();
changeTime=millis();
}
}
void changeLed(){
for (int x=0;x<10;x++){//apaga todos os leds
digitalWrite(ledPin[x],LOW);
}
digitalWrite(ledPin[currentLed],HIGH);//acende Led atual
currentLed+=direction;// incrementa o acordo com o valor de direction
//altera a direção se tivermos atingido o fim
if(currentLed==9){direction=-1;}
if(currentLed==0){direction=1;}
}

Este projeto faz com que as luzes pisquem sem parar, em linha.

A primeira dúvida que eu tenho é, a frase int direction=1; isto significa, por exemplo, que as luzes devam piscar no sentido horário?

O que significa int currentLed=0; ? 

for(int x=0;x<10;x++){  O for até então, eu entendia que servia para piscar os leds, qual a função nesta fórmula?

Qual o significado de millis() nesta fórmula?

Não entendi nada a baixo:

digitalWrite(ledPin[currentLed],HIGH);//acende Led atual
currentLed+=direction;// incrementa o acordo com o valor de direction 
//altera a direção se tivermos atingido o fim
if(currentLed==9){direction=-1;}
if(currentLed==0){direction=1;}

Como vocês podem ver estou com muitas dúvidas, espero que me ajudem e que entendam que estou no básico da programação.

obg

Exibições: 831

Responder esta

Respostas a este tópico

-A linha int direction=1; é para criar uma variavel e dar a ela o valor 1, que nesse codigo corresponde a um sentido na qual os leds iram acender, o sentido oposto é 'ativado' na linha if(currentLed==9){direction=-1;}

-O for ta servindo para apagar todos os leds, ele vai variar o valor de x de 0 ate 9 crescendo de 1 em 1 e esse valor é adicionado a linha digitalWrite(ledPin[x],LOW); para apagar cada led individualmente.

-A função millis() vai retornar o tempo em que o arduin esta executando seu programa

-digitalWrite(ledPin[currentLed],HIGH); vai acender o led cujo numero esta na variavel currentLed, apos isso, na linha currentLed+=direction; ele adiciona (ou subtrair, depende da direçao) 1 ao valor do led, para que o led seguinte seja aceso, e os IF's apenas verificam o ultimo led que foi aceso para poder (se necessario) inventer o sentido dos leds.

Obs.: esse codigo na verdade nao é para os leds piscarem sem parar mas sim sequencialmente

Obrigado João!

Vamos ver se eu entendi.

quando eu coloco o int direction=1;, os pinos de 4 até 13 irão ligar sequencialmente em uma direção e quando if(currentLed==9){direction=-1;}, ou seja acende sequencialmente os 9 leds e muda a direção, está correto?

Qual o significado de int currentled=0; ?

 for (int x=0;x<10;x++){//apaga todos os leds
digitalWrite(ledPin[x],LOW);   Então nesta programação o for apaga um a um os leds que vão de 0 à 9. 

O que faz os leds acederem após o último ser apagado é a funcão digitalWrite(ledPin[currentLed],HIGH); que retorna com a função inversa da anterior? que também está ligado à função if.

João ainda não entendi a função millis, como assim retornar o tempo?

Até então já me ajudou bastante.

 

Alguém/João pode me ajudar?

A sua primeira duvida é exatamete isso que voce disse.
O currentled=o.indica o primeiro led, ou seja, o led 4. É usado o numero 0 porque ele se refere ao index da array, sendo 0 o primeiro valor dela (no caso 4)
O FOR apaga todos os leds um a um, porem isto ocorre muito rapido, parecendo que todos os leda foram apagados ao mesmo tempo
O que faz o led acender apos todos serem apagados é a funçao logo avaixo do FOR (digitalWrite(ledPin[currentled], HIGH)). Isso ira acender um led, com a repetiçao do codigo todos os outros serao acesos.
A funçao millis() retorna o tempo em milisegundos que o arduino esta rodandado programa. Por exemplo, se voce liga o arduino com esse codigo, apos 1 segundo a funçao millis() tera o valor 1000

João, você já ajudou muito, to anotando tudo isso no livro!!

Agora, você falou que o que faz o led acender é o comando FOR (digitalWrite(ledPin[currentled], HIGH));

porém logo abaixo deste comando ele escreve assim:

//incrementa de acordo com o valor de direction

currentLED +=direction;

portanto o comando currentLED +=direction;  (com o símbolo +) acende o próximo led do projeto, está correto?  

Se isto está certo, eu tentei mudar a direção e coloquei o sinal - no comando currentLED -=direction; e tudo ficou doido, por que aconteceu isto?

aguardo sua ajuda, vlw!

Na verdade o comando currentLED +=direction; serve para dar a variavel currentLED o valor do proximo led

Por exemplo, digamos que o led que foi aceso por ultimo é o led 2, se a variavel direction tiver com valor 1, aquele comando ira dar a variavel currentLED o valor 3, e caso a direction seja -1, o currentLED será 1.

O += seria o mesmo de currentLED = currentLED + direction;

Obrigado João Paulo, você me ajudou muito!!!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço