Multiplexering med Arduino och 74HC595 (12 / 14 steg)
Steg 12: Firmware
Mer information om 74HC595 och shiftOut, se fig 2, databladoch arduino referenssida.
LED TEST w / 74HC595
Amanda Ghassaei 2012
/*
* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 2 av licensen, eller
* (på ditt alternativ) någon senare version.
*
* Detta program är distribuerat i hopp om att det kommer att vara användbar,
* men utan garantier; utan att ens underförstådd garanti om
* SÄLJBARHET eller lämplighet för ett visst ändamål. Se den
* GNU General Public License för mer detaljer.
*/
denna kod kommer att lysa upp varje led i matrisen 4 x 4 en i taget
PIN-anslutningar-#define tag kommer att ersätta alla förekomster av "latchPin" i koden med A1 (och så vidare)
#define latchPin A1
#define clockPin A0
#define dataPin A2
looping variabler
byte i.
byte j;
lagring variabel
byte dataToSend;
void setup() {
Ange stift
pinMode (latchPin, produktionen);
pinMode (clockPin, produktionen);
pinMode (dataPin, produktionen);
}
void loop() {
för (jag = 0; jag < 4; i ++) {
för (j = 0; j < 4; j ++) {
bitars manipulation (mer info på http://arduino.cc/en/Reference/Bitshift, http://arduino.cc/en/Reference/BitwiseXorNot och http://arduino.cc/en/Reference/BitwiseAnd)
dataToSend = (1 << (jag + 4)) | (15 & ~ (1 << j)); //preprare byte (8 bitar serie) att skicka till 74HC595
till exempel när jag = 2, j = 3,
dataToSend = (1 << 6) | (15 & ~ (1 << 3));
dataToSend = 01000000 | (15 & ~ (00001000));
dataToSend = 01000000 | (15 & 11110111);
dataToSend = 01000000 | (15 & 11110111);
dataToSend = 01000000 | 00000111;
dataToSend = 01000111;
de första fyra bitarna i dataToSend gå till de fyra raderna (anoder) ledde matrisen - enda ligger högt och resten är inställda på marken
de sista fyra bitarna i dataToSend gå till de fyra kolumnerna (katod) ledde matrisen - enda ställs in på marken och resten är hög
Detta innebär att gå igenom jag = 0 till 3 och j = 0 till tre med ljus upp varje ledde en gång
setlatch pin låg så lysdioderna inte ändra samtidigt skickas i bitar
digitalWrite (latchPin, låg);
flytta ut bitarna av dataToSend till 74HC595
shiftOut (dataPin, clockPin, LSBFIRST, dataToSend);
Ställ in spärren pin hög - detta skickar data till utgångar så lamporna tänds
digitalWrite (latchPin, hög);
fördröjning (500), //wait
}
}
}