Para o circuito da figura, escrevi uma biblioteca para mostrar valores nos dois displays de leds. Usando um CI 74HC595, podemos botar pra funcionar um display de 7 segmentos, ocupando apenas 3 saídas do Arduino.
Independente da pinagem do display de LEDS, mantenha a seguinte relação entre os pinos do 74hc595 e o display:
74HC595 segmento
pino no display
----------------|-----------------
Q0 (15) | a
Q1(1) | b
Q2(2) | c
Q3(3) | d
Q4(4) | e
Q5(5) | f
Q6(6) | g
Q7(7) | dp
----------------|-----------------
Crie uma pasta chamada SevenDisp em C:\arduino-1.0\libraries\
Grave nesta pasta os seguintes arquivos:
"SevenDisp.h"
/*
SevenDisp.h - Library for 2 display for 7 segments
Created by Luís Bulek July, 2012.
Released into the public domain.
*/
#ifndef SevenDisp_h
#define SevenDisp_h
#include "Arduino.h"
#include <inttypes.h>
// definição dos padrões para o display seguindo a ordem dos bits,
// da esquerda para a direita abcdefg.
class SevenDisp
{
public:
SevenDisp(uint8_t datapin, uint8_t latchpin, uint8_t clockpin);
void Show(int x);
void Base(uint8_t base);
private:
uint8_t _datapin;
uint8_t _latchpin;
uint8_t _clockpin;
int _x;
int _a;
int _b;
uint8_t _base;
};
#endif
"SevenDisp.cpp"
/*
SevenDisp.cpp - Library for 2 display for 7 segments
Created by Luís Bulek July, 2012.
Released into the public domain.
*/
#include "Arduino.h"
#include "SevenDisp.h"
byte _LEDDSP [] = {
B00000011, // 0
B10011111, // 1
B00100101, // 2
B00001101, // 3
B10011001, // 4
B01001001, // 5
B01000001, // 6
B00011111, // 7
B00000001, // 8
B00001001, // 9
B00010001, // a
B11000001, // b
B01100011, // c
B10000101, // d
B01100001, // e
B01110001, // f
};
SevenDisp::SevenDisp(uint8_t datapin, uint8_t latchpin, uint8_t clockpin)
{
_datapin = datapin;
_latchpin = latchpin;
_clockpin = clockpin;
_base = 10;
pinMode(_datapin, OUTPUT);
pinMode(_latchpin, OUTPUT);
pinMode(_clockpin, OUTPUT);
}
void SevenDisp::Show(int x)
{
_x = x;
_a = (_x / _base);
_b = _x - (_a * _base);
digitalWrite(_latchpin, LOW);
shiftOut(_datapin, _clockpin, LSBFIRST, _LEDDSP[_b]); // envia primeiro a unidade
shiftOut(_datapin, _clockpin, LSBFIRST, _LEDDSP[_a]); // envia a dezena
digitalWrite(_latchpin, HIGH);
}
void SevenDisp::Base(uint8_t base)
{
_base = base;
}
Dentro desta pasta SevenDisp crie outra chamada Exemples, grave e teste os exemplos abaixo:
"ContDisp.ino"
#include <SevenDisp.h>
SevenDisp Seven(5,6,7); // pin 5 = data, 6 = latch, 7 = clock
void setup() {
}
void loop() {
for (int x=0; x<100; x++) {
Seven.Show(x);
delay(300);
}
}
"ContDispHex.ino"
#include <SevenDisp.h>
SevenDisp Seven(5,6,7); // pin 5 = data, 6 = latch, 7 = clock
void setup() {
Seven.Base(16); // define a base númerica como hexadecinal para o display, de 00 a FF
}
void loop() {
for (int x=0; x<256; x++) {
Seven.Show(x);
delay(300);
}
}
Arquivos para downloads: SevenDisp.rar
Comentar
Comentário de Mauro Assis em 27 julho 2012 às 13:04 Legal, Luiz. A ideia de fazer em hexa tb foi muito boa. Eu também fiz uma biblioteca semelhante, só que para displays de 8 segmentos (ponto decimal) usando o mesmo CI: http://automatobr.blogspot.com.br/.
Tentei fazer o download do SevenDisp.rar, mas deu access denied.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
Por: R$ 29,00
Ou em até 6x de
R$ 5,18
Por: R$ 57,00
Ou em até 13x de
R$ 5,02
(com Arduino Uno REV3 Original)
Por: R$ 149,00
Ou em até 18x de
R$ 9,93
Kit Completo de Ferramentas - Avançado
Por: R$ 540,00
Ou em até 18x de
R$ 35,99
© 2013 Criado por Marcelo Rodrigues.
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)