16 fevereiro 2013

Sequencial de Leds - Circuito e Codigo

Neste post vou apresentar o circuito do sequencial de leds, referente ao vídeo que comentei anteriormente.

No circuito, utilizei resistores de 10 K, e nas extremidades, resistores de 4,7 K, apenas para dar um efeito diferente. O potenciômetro é de 10 K, mas pode ser utilizado um de menor valor.

Não esqueça de, SEMPRE, desligar o cabo usb ou o conector de força quando estiver montando o circuito.


sequencial de leds arduino
 Quem tem o livro Arduino Básico vai notar que o código é praticamente igual ao apresentado no livro (Projeto 6). Fiz algumas alterações de nomes de variáveis e coloquei uma linha para escrever o valor da entrada analógica na saída serial, apenas para fins de acompanhamento. Experimente abrir o monitor serial da IDE, girar o potenciometro e veja como os valores vão se alterando, conforme a figura abaixo :




 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// Programa : Sequencial de Leds com potenciometro
// Baseado no projeto sequencial de leds do Livro 
// Arduino Basico - Autor Michael Roberts
// Alteracoes : Arduino & Cia

//Cria um array para os pinos dos Leds
byte Pinosled[]={4,5,6,7,8,9,10,11,12,13};

int ledDelay; // Intervalo entre as alterações

int direcao = 1; // Direcao do "movimento"

int ledatual = 0;

unsigned long changeTime;

//Pino analogico 2 definido como entrada para o potenciometro
int potPin = 2; 

void setup()
{
  Serial.begin(9600); // Inicializa a comunicacao serial
  for (int x=0; x<10; x++) // Loop que define todos os pinos como saída
  {
    pinMode(Pinosled[x],OUTPUT);
  }
  changeTime=millis();
}

void loop()

{
  // Varia o valor de ledDelay conforme o valor do potenciometro, 
  // alterando a velocidade do efeito
  ledDelay = analogRead(potPin); 

  // Escreve o valor de leitura do potenciometro na saida serial
  Serial.println(ledDelay); 

  // Verifica se já transcorreram ledDelay ms desde a última alteração
  if ((millis() - changeTime) > ledDelay) 

  {
    changeLED();
    changeTime = millis();
  }
}

void changeLED()
{
  for (int x=0; x<10; x++)   //Apaga todos os LEDs
  {
    digitalWrite(Pinosled[x], LOW);
  }
  digitalWrite(Pinosled[ledatual], HIGH); // Acende o LED atual
  ledatual += direcao;  //incrementa de acordo com o valor de direction
  //altera a direção se tivermos atingido o fim
  if (ledatual == 9) {direcao = -1;}
  if (ledatual == 0) {direcao = 1;}
}

2 comentários:

  1. estou montando um projeto, tenho 8 LEDs conectados ao arduino, e um potenciômetro ,
    quero fazer assim, se o valor lido no pot ser 0 (zero) , todas as luzes ficam apagadas , e conforme for aumentando o potenciômetro, vai acendendo uma , depois duas , depois tres até chegar ao fim do potenciometro com todas as 8 ligadas, e soar um bip ! criei um codigo desde o inicio , porem nao funciona alguem poderia me auxiliar
    ps: nao tenho lucro nenhum com o projeto, estou estudando arduino e queria só aumentar meu conhecimento a respeito do mesmo!!

    ResponderExcluir
  2. to preçiando do codigo do app inventor e do arduino para controlar a intensidade de um led com islider

    ResponderExcluir