Arduino

7-segment led bar

Saturday, November 30, 2013
7-segment led barLike0

Een tijdje geleden was er op mijn werk een ‘mafia-of-drooglegging-themed’ kerstfeest en er werd van je verwacht dat je in kostuum zou komen. Mijn idee was om als een ‘klassieke’ huurmoordenaar te komen, met een vioolkist met daarin allemaal kleine flesjes whiskey en een aflopende led-timer (via Arduino), alsof er drank en wapens in de kist verstopt zaten.

Ik was al zover dat ik hoed, pak, vioolkist, whiskeyflesjes en de 7-segment led bar al had, maar mijn vrouw was net bevallen na eerst langere tijd in het ziekenhuis te hebben gelegen, dus ik heb het nooit in de praktijk kunnen brengen.

Echter, ik had toen dus wel al de aftellende led-bar al aan de praat. En omdat ik zeker weet dat ik dat ding nog wel weer een keer ga gebruiken, zou het zonde zijn als ik de sketch kwijt raak. Mocht je deze sketch zelf willen gebruiken, realiseer je dan wel dat de timer niet nauwkeurig is en dus niet overeenkomt met daadwerkelijke seconden. Dit was voor mij geen enkel issue, maar dat kan het voor jou natuurlijk wel zijn.

Ik weet niet zeker meer waar ik de 7-segment bar gekocht heb*, maar het was ergens in het buitenland. Ik weet dat nog, omdat de post erg lang op zich liet wachten en ik me afvroeg of het verstandig was geweest om een eng uitziend elektronisch apparaat (een of andere shield) tegelijk te kopen met die zeven segment led bars die er toch uitzien als de klassieke film-aflopende-timer. Ik zal dus wel ergens op een lijst staan nu ergens – maar NSA, het was allemaal voor het kerstfeest!

*Het was bij DFRobot: http://www.dfrobot.com/index.php?route=product/product&path=53_133&product_id=374#.UpsYzeInKSp

Aangesloten via Interface shield:

Aangesloten zonder Interface shield:

In dit filmpje sluit ik per ongeluk de 5v pin aan op Vin. Dat kun je beter niet doen! Als je een te hoog voltage aansluit op de Arduino, reguleert deze het zelf naar 5v of 3.3v – maar de pin Vin is gelijk aan dit ongereguleerde voltage! In dit geval maakte het niet uit omdat ik de stroom via USB binnenkreeg (USB levert in principe ongeveer 5 volt stroom), maar als je je Arduino op batterijen of een accu aansluit, kun je je led bar slopen.

Hier de wiki-pagina met het aansluit diagram waarnaar verwezen wordt in het tweede filmpje:
http://www.dfrobot.com/wiki/index.php?title=SPI_LED_Module_%28SKU:DFR0090%29

Sketch:


//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 8;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 3;
////Pin connected to Data in (DS) of 74HC595
const int dataPin = 9;
int firstdigit = 9;
int seconddigit = 9;
int thirddigit = 9;
int fourthdigit = 5;
int fifthdigit = 9;
int sixthdigit = 5;

byte Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
byte Tap[]={0xff,0x7f}; //”space”,”.”
void setup() {

//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
Serial.println(“reset”);
}

void loop() {
int bitToSet = 9;
// write to the shift register with the correct bit set high:
digitalWrite(latchPin, LOW);
// shift the bits out:
shiftOut(dataPin, clockPin, MSBFIRST, Tab[firstdigit]);
shiftOut(dataPin, clockPin, MSBFIRST, Tab[seconddigit]);
shiftOut(dataPin, clockPin, MSBFIRST, Tab[thirddigit]);
shiftOut(dataPin, clockPin, MSBFIRST, Tab[fourthdigit]);
shiftOut(dataPin, clockPin, MSBFIRST, Tab[fifthdigit]);
shiftOut(dataPin, clockPin, MSBFIRST, Tab[sixthdigit]);
shiftOut(dataPin, clockPin, MSBFIRST, Tap[0]);
shiftOut(dataPin, clockPin, MSBFIRST, Tap[0]);
// turn on the output so the LEDs can light up:
digitalWrite(latchPin, HIGH);
delay(10);
firstdigit = firstdigit – 1;
if (firstdigit < 0){
firstdigit=9;
seconddigit = seconddigit – 1;
}
if (seconddigit < 0){
seconddigit=9;
thirddigit = thirddigit – 1;
}

if (thirddigit < 0){ thirddigit=9; fourthdigit = fourthdigit – 1; } if (fourthdigit > 5){
fourthdigit=5;
}

if (fourthdigit < 0){
fourthdigit=5;
fifthdigit = fifthdigit – 1;

}

if (fifthdigit < 0){ fifthdigit=9; sixthdigit = sixthdigit – 1; } if (sixthdigit > 5){
sixthdigit=5;

}

}

0

Leave a Reply

Your email address will not be published.

Follow @ Guerrilla Games
Instagram has returned invalid data.