Para entender melhor, vejam um post antigo que havia feito sobre esse assunto:
http://www.efeitonerd.com.br/2012/02/ampliar-saidas-do-arduino.html
Nesse projeto, usei 3 registradores 74HC595 e apenas 3 saídas do Arduino. Para cada
registrador, temos 8 novas saídas.
Fiz a biblioteca para controle individual de cada saída, exatamente da mesma forma que
usamos o digitalWrite() do Arduino.
Como são 3 registradores, temos 24 saídas. Para acender o LED da saída número 20,
por exemplo, usamos:
?
1mega.shiftWrite(20, HIGH);
E para apaga-lo:
?
1mega.shiftWrite(20, LOW);
Abraços e inté!
?
/*---------------------------------------------
1 S H I F T O U T M E G A
2 Ampliar o número de saídas do Arduino com
3 Registrador de Deslocamento 74HC595
4 Fellipe Couto - 17/09/2012
5 --------------------------------------------*/
6
/*¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
7 - Pino 8 do Arduino ligado ao pino 12 do CI.
8 - Pino 11 do Arduino ligado ao pino 14 do CI.
9 - Pino 12 do Arduino ligado ao pino 11 do CI.
10 - Led 1 = Pino 15 do CI.
11 -- Led 2 = Pino 1 do CI.
Led 3 = Pino 2 do CI.
12 - Led 4 = Pino 3 do CI.
13 - Led 5 = Pino 4 do CI.
14 - Led 6 = Pino 5 do CI.
15 - Led 7 = Pino 6 do CI.
- Led 8 = Pino 7 do CI.
16 - Pinos 10 e 16 do CI ligados ao Vcc.
17 - Pinos 8 e 13 do CI ligados ao GND.
18 - Pino 9 do CI ligado ao pino 14 do próximo CI.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨*/
19
20#include <ShiftOutMega.h> //Inclui a bilioteca ShiftOutMega.h
21
22//Variáveis de uso dos registradores 74HC595
23int latchPin = 8; //Pino 8 conectado ao pino 12 do 74HC595 (Latch).
24int dataPin = 11; //Pino 11 conectado ao pino 14 do 74HC595 (Data).
25int clockPin = 12; //Pino 12 conectado ao pino 11 do 74HC595 (Clock).
26//Quantidade de registradores (74HC595). Para cada registrador,
27temos 8 saídas.
28int qtdRegistradores = 3;
29
30int totalSaidas = qtdRegistradores * 8;
31
32//Inicia a biblioteca passando os parametros de uso.
ShiftOutMega mega(latchPin, dataPin, clockPin, qtdRegistradores);
33
34void setup(){
35}
36
37void loop(){
38 s1();
39 s2();
s3();
40}
41
42void s1(){
43 int t = 5;
44 for (int x=0; x<5; x++){
for (int i=1; i<=totalSaidas; i++){
45 mega.shiftWrite(i, HIGH);
46 delay(t);
47 mega.shiftWrite(i, LOW);
48 delay(t);
49 }
for (int i=totalSaidas; i>=1; i--){
50 mega.shiftWrite(i, HIGH);
51 delay(t);
52 mega.shiftWrite(i, LOW);
53 delay(t);
}
54 t--;
55 }
56}
57
58void s2(){
59 int t = 10;
for (int x=0; x<5; x++){
60 for (int i=1; i<=totalSaidas; i++){
61 mega.shiftWrite(i, HIGH);
62 delay(t);
63 }
for (int i=1; i<=totalSaidas; i++){
64 mega.shiftWrite(i, LOW);
65 delay(t);
66 }
67 }
68}
69
void s3(){
70 int t = 20;
71 for (int x=0; x<5; x++){
72 for (int i=1; i<=totalSaidas/2; i++){
73 mega.shiftWrite(i, HIGH);
mega.shiftWrite(totalSaidas+1-i, HIGH);
74 delay(t);
75 }
76
77 for (int i=totalSaidas/2; i>=1; i--){
78 mega.shiftWrite(i, LOW);
79 mega.shiftWrite(totalSaidas+1-i, LOW);
delay(t);
80 }
81 }
82}
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Postado por Fellipe Couto às 22:57
Enviar por e-mailBlogThis!Compartilhar no TwitterCompartilhar no
FacebookCompartilhar no Orkut
Marcadores: Arduino, Eletrônica, Informática
37 comentários:
1.
amigo se eu quiser ligar uma variavel a uma das portas do ci, como eu faço ?
exemplo no arduino
fy.teixeira@gmail.com
Responder
Respostas
1.
Responder
2.
Responder
Respostas
1.
**ligar**
2.
Boa tarde!!
Na teoria, pode-se ligar muitos. Eu testei até com 10 registradores
74HC595 e funcionou legal. Tem-se o controle de cada saída
individualmente sim.
Abraços!
3.
Hum/! tendeu!
ou Parabens! cara leal de +++++! deu certim funcionou blz! valeu!
abraços!!!!!!!!!!!!!!
4.
Obrigado! :) Abraços!
Responder
3.
Meu caro.
Uma pergunta:
Neste projeto seria obrigatório utilizar as portas 8, 11 e 12?
Se eu quiser utilizar outras portas do Arduino daria muito trabalho, ou não tem
como?
Responder
Respostas
1.
Responder
4.
Ola amigo , bom dia ,minha duvida é a seguinte , estou com o arduino sendo
controlado por php , é possivel pelo php eu controlar individualmente cada saida
do registrador? , sendo que os valores seriam variaveis.
Obrigado
Responder
Respostas
1.
Responder
5.
Anônimo13 de maio de 2013 18:01
Responder
Respostas
1.
2.
sera então que se eu usar um 74hc597 ele pode funcionar como input?
claro que com seus devidos ajustes.
3.
Não, ele é somente para output mesmo. Teria que ser um novo projeto de
hardware também.
Abraços!!!
Responder
6.
Cara matou a pau essa lib! Era oq eu procurava. O melhor projeto de expansão
de portas que já vi! Parabéns pelo projeto!
Responder
Respostas
1.
Responder
7.
Obrigado
Responder
Respostas
1.
Obrigado o elogio!
Em relação a acender leds juntos, dá sim. Dependendo da quantidade de
leds, vai precisar de um circuito com transistor, para poder fornecer a
corrente suficiente.
Para gravar o código no microcontrolador, vc pode usar o próprio
arduino. Dá uma olhada nessa post:
http://www.efeitonerd.com.br/2011/12/upload-para-atmega328.html
O preço depende do led. Um led branco alto-brilho, por exemplo, em
torno de 50 centavos cada um. Agora os leds difusos (aqueles normais de
baixo brilho), custam até uns 10 centavos cada um.
Abraços!!!
Responder
8.
Responder
Respostas
1.
2.
Valeu, amigão!!!
Ainda não fiz o teste, estou esperando o meu arduíno chegar.
Abração!
3.
9.
Responder
Respostas
1.
Responder
10.
Bom dia!
Estou com dificuldade de inicializar a sua biblioteca juntamente com a ethernet
shield, parece que quando inicializo a sua lib, ele trava, mas se inicializo
somente a sua lib funciona, ou se inicializo somente a ethernet shield também,
mas os dois juntos não, saberia me dizer o que ocorre?
Junior
Responder
11.
Ola! Obrigada por compartilhar o projeto! Tenho uma duvida e gostaria sde
saber se vc poderia me ajudar. Estou trabalhando em um projeto, e gostaria de
controlar 9 leds e um display com numeros (1 a 9), mas cada numero controlado
por uma entrada individual (botoes touch). Consegui fazer com 5 numeros e 5
leds, mas ja nao tenho mais opcoes para usar nos proximos 4. Esse seu projeto
poderia ser utilizado no meu caso de alguma forma? Desculpa se ficou confuso,
comecei a usar arduino a pouco tempo. Obrigada, Juliana.
Responder
Respostas
1.
Responder
12.
Amigo, depois de passar 1 dia inteiro pesquisando como fazer isso "no braço",
me deparei com sua biblioteca ontem às 3 da manhã, como tava muito cansado
deixei para baixar hoje.
Responder
Respostas
1.
Responder
13.
mas basta somente adicionar o include wire.h que a parte de acender os leds
deixa de funcionar, todo o resto do programa funciona 100%, exceto os
74hc595.
vlw
Responder
Respostas
1.
Estranho. Vou tentar fazer uns testes desse tipo por aqui para tentar
identificar isso.
Responder
14.
Ola Boa tarde, é possivel inserir um keypad 4x4 no 74hc595 para efetuar leitura
das teclas... Como faria isso? Poderiam me ajudar, desde ja grato.
Responder
Respostas
1.
Responder
15.
Boa tarde, Felipe. Parabéns pelos projetos. Sou iniciante com o Arduíno e queria
um esclarecimento.... em vez dos leds, consigo utilizar o 74hc595 para acionar
bonina de mínis reles?? Obrigado - Ricardo
Responder
Respostas
1.
Responder