Pages: 1 2 [3]   Go Down
Author Topic: Ajuda com exercicio livro Arduino Basico  (Read 4581 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 12
Posts: 508
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Segundo o que percebi, alteraste as condicões para nunca testar abaixo de zero e alteraste os decrementos e incrementos para fora da digitalWrite()... algum motivo para isso?

Eu colei o teu código no compilador do arduino e fui alterando o que parecia causar os problemas, com as alterações funcionou. Não testei teu código no VS, mas se tentares rodar usando o software do arduino não irá funcionar. As limitações estariam no compilador do arduino?

O que eu mudei e porque:
Com os encrementos e decrementos dentro da digitalWrite o arduino ligava todos os 6 leds em sequencia (a cada loop) e não os desligava (como citou o giovannimundim). Colocando-os para fora, os leds ligaram e desligaram, mas ainda não corretamente (se rodar neste estágio verás que a cada virada de up para down o led maxH não é desligado).

Para resolver o acima foi usado == no lugar de ><. Porem, quando o MaxH == 0 o led 0 não aparava, então forcei LED = 6 quando MaxH == 0 e tratei isso no inicio do sentido down:

if (LED == 6)
      digitalWrite(ledPin[0], LOW); //depois de MaxH == 0 o LED é 5, então o zero não é apagado

apesar de que faltou ai um else ^^ deveria ficar assim:

    if (LED == 6)
      digitalWrite(ledPin[0], LOW); //depois de MaxH == 0 o LED é 5, então o zero não é apagado
     else
      digitalWrite(ledPin[LED], LOW);   //desliga o anterior

Afinal não existe led na posição 6 do array smiley-wink

Abraço,
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cara, segue abaixo o meu código completo:

//Bola quicando

byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11}; // Cria um array para os pinos dos LEDs
int ledDelay; // intervalo entre as alterações
int direction = 1;
int currentLED = 0;
unsigned long changeTime;
int potPin = 2; // seleciona o pino de entrada para o potenciômetro
int cont=0, max=7;

void setup() {
for (int x=0; x<8; x++) { // define todos os pinos como saída
pinMode(ledPin
  • , OUTPUT); }
changeTime = millis();
}
void loop() {
ledDelay = analogRead(potPin); // lê o valor do potenciômetro
if ((millis() - changeTime) > ledDelay) { // verifica se transcorreram ledDelay ms desde a
// última alteração
changeLED();
changeTime = millis();
}
}
void changeLED() {
for (int x=0; x<8; x++) { // apaga todos os LEDs
digitalWrite(ledPin
  • , LOW);
}
digitalWrite(ledPin[currentLED], HIGH); // acende o LED atual
currentLED += direction; // incrementa de acordo com o valor de direction
// altera a direção se tivermos atingido o fim
if (currentLED == max-cont){
  direction = -1;
}
if (currentLED == 0) {direction = 1; cont++;}
if (cont==6) {cont=0;}
}

Espero ter ajudado, qualquer coisa pode me comunicar através do email vilmar.rodrigs@gmail.com
Logged

Pages: 1 2 [3]   Go Up
Jump to: