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
Tags:
-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?
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!!!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por