Go Down

Topic: Ajuda com exercicio livro Arduino Basico (Read 6496 times) previous topic - next topic

Mortis



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 ;)

Abraço,

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

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy