Stap 5: Programmering tijd!
Ik vond dit geweldig programma hier:http://www.stationinthemetro.com/index.php/archives/2008/01/19/makedc-LED-Cube-workshop/
Ik zal bespaart u een reis en de postcode hier. Deze belasting tot arduino via de arduino omgeving die u op arduino.cc (een website downloaden kunt).
Gebaseerd op ledcube.c van zorg: 7 September 2007 weekend podcast
http://blog.makezine.com/Archive/2007/09/make_a_pocket_led_cube_we.html
Aangepaste animatie geprogrammeerd door Mark Boszko, http://stationinthemetro.com
*/
#include < avr/pgmspace.h > / / maakt gebruik van PROGMEM voor het opslaan van patronen in flash
#define CUBESIZE 3
#define PLANESIZE CUBESIZE * CUBESIZE
#define PLANETIME 3333 / / tijd elk vliegtuig wordt weergegeven in ons -> 100 Hz vernieuwen
#define TIMECONST 20 / / vermenigvuldigt DisplayTime om ms - waarom niet = 100?
LED patroon tabel in PROGMEM - laatste kolom is tijd weergeven in 100ms eenheden
TODO dit zou een stuk compacter maar niet met binaire patroon vertegenwoordiging
prog_uchar PROGMEM PatternTable [] {} =
knipperen in- en uitschakelen
B111 B111 B111, B111, B111, B111, B111, B111, B111, 5,
B000 B000 B000, B000, B000, B000, B000, B000, B000, 1,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 5,
B000 B000 B000, B000, B000, B000, B000, B000, B000, 1,
Elke LED Flash in volgorde:
Links -> rechter kolom, dan Top -> onderste rij, dan Opper -> lagere vliegtuig
B100 B000 B000, B000, B000, B000, B000, B000, B000, 1,
B010, B000 B000, B000, B000, B000, B000, B000, B000, 1,
B001 B000 B000, B000, B000, B000, B000, B000, B000, 1,
B000 B100, B000, B000, B000, B000, B000, B000, B000, 1,
B000, B010, B000, B000, B000, B000, B000, B000, B000, 1,
B000 B001 B000, B000, B000, B000, B000, B000, B000, 1,
B000 B000 B100, B000, B000, B000, B000, B000, B000, 1,
B000 B000, B010, B000, B000, B000, B000, B000, B000, 1,
B000 B000 B001, B000, B000, B000, B000, B000, B000, 1,
B000 B000 B000, B100, B000, B000, B000, B000, B000, 1,
B000 B000 B000, B010, B000, B000, B000, B000, B000, 1,
B000 B000 B000, B001, B000, B000, B000, B000, B000, 1,
B000 B000 B000, B000, B100, B000, B000, B000, B000, 1,
B000 B000 B000, B000, B010, B000, B000, B000, B000, 1,
B000 B000 B000, B000, B001, B000, B000, B000, B000, 1,
B000 B000 B000, B000, B000, B100, B000, B000, B000, 1,
B000 B000 B000, B000, B000, B010, B000, B000, B000, 1,
B000 B000 B000, B000, B000, B001, B000, B000, B000, 1,
B000 B000 B000, B000, B000, B000, B100, B000, B000, 1,
B000 B000 B000, B000, B000, B000, B010, B000, B000, 1,
B000 B000 B000, B000, B000, B000, B001, B000, B000, 1,
B000 B000 B000, B000, B000, B000, B000, B100, B000, 1,
B000 B000 B000, B000, B000, B000, B000, B010, B000, 1,
B000 B000 B000, B000, B000, B000, B000, B001, B000, 1,
B000 B000 B000, B000, B000, B000, B000, B000, B100, 1,
B000 B000 B000, B000, B000, B000, B000, B000, B010, 1,
B000 B000 B000, B000, B000, B000, B000, B000, B001, 10,
Sommige kleine kubus - grote kubus plezier
B000 B000 B000, B000, B011, B011, B000, B011, B011, 10,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 10,
B000 B000 B000, B000, B011, B011, B000, B011, B011, 5,
B000 B000 B000, B000, B000, B000, B000, B000, B001, 2,
B000 B000 B000, B000, B011, B011, B000, B011, B011, 2,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 2,
B000 B000 B000, B000, B011, B011, B000, B011, B011, 2,
B000 B000 B000, B000, B000, B000, B000, B000, B001, 2,
B000 B000 B000, B000, B011, B011, B000, B011, B011, 2,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 1,
B000 B000 B000, B000, B011, B011, B000, B011, B011, 1,
B000 B000 B000, B000, B000, B000, B000, B000, B001, 1,
B000 B000 B000, B000, B011, B011, B000, B011, B011, 1,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 1,
B110 B110, B000, B110, B110, B000, B000, B000, B000, 1,
B100 B000 B000, B000, B000, B000, B000, B000, B000, 1,
B110 B110, B000, B110, B110, B000, B000, B000, B000, 1,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 1,
B000 B000 B000, B000, B011, B011, B000, B011, B011, 1,
B000 B000 B000, B000, B000, B000, B000, B000, B001, 1,
B000 B000 B000, B000, B011, B011, B000, B011, B011, 1,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 1,
B110 B110, B000, B110, B110, B000, B000, B000, B000, 1,
B100 B000 B000, B000, B000, B000, B000, B000, B000, 1,
B110 B110, B000, B110, B110, B000, B000, B000, B000, 1,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 1,
B000, B011, B011, B000, B011, B011, B000, B000, B000, 1,
B000 B000 B001, B000, B000, B000, B000, B000, B000, 1,
B000, B011, B011, B000, B011, B011, B000, B000, B000, 1,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 1,
B000 B000 B000, B110, B110, B000, B110, B110, B000, 1,
B000 B000 B000, B000, B000, B000, B100, B000, B000, 1,
B000 B000 B000, B110, B110, B000, B110, B110, B000, 1,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 1,
B000, B011, B011, B000, B011, B011, B000, B000, B000, 1,
B000 B000 B001, B000, B000, B000, B000, B000, B000, 1,
B000, B011, B011, B000, B011, B011, B000, B000, B000, 1,
B111 B111 B111, B111, B111, B111, B111, B111, B111, 1,
B000 B000 B000, B110, B110, B000, B110, B110, B000, 1,
B000 B000 B000, B000, B000, B000, B100, B000, B000, 1,
B000 B000 B000, B110, B110, B000, B110, B110, B000, 1,
Diagonal wipe, beginnend in het midden
B111 B111 B111, B111, B111, B111, B111, B111, B111, 5,
B111 B111 B111, B111, B111, B111, B111, B101, B111, 1,
B111 B111 B111, B111, B101, B111, B111, B101, B111, 1,
B111 B111 B111, B111, B101, B111, B111, B100, B111, 1,
B111 B101, B111, B111, B100, B111, B111, B100, B110, 1,
B111 B101, B111, B111, B100, B111, B111, B100, B110, 1,
B111, B011, B111, B111, B100, B110, B111, B100, B100, 1,
B111 B100, B110, B111, B100, B100, B111, B100, B000, 1,
B111 B100, B100, B111, B100, B000, B111, B000, B000, 1,
B111 B100, B000, B111, B000, B000, B011, B000, B000, 1,
B111 B000 B000, B011, B000, B000, B001, B001, B000, 1,
Breed diaginal 2-LED-streep die draait om de kubus
B011, B000 B000, B001, B001, B000, B000, B001, B001, 1,
B001 B001 B000, B000, B001, B001, B000, B000, B011, 1,
B000 B001 B001, B000, B000, B011, B000, B000, B110, 1,
B000 B000, B011, B000, B000, B110, B000, B100, B100, 1,
B000 B000 B110, B000, B100, B100, B100, B100, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100 B100, B000, B110, B000, B000, B011, B000, B000, 1,
B110 B000 B000, B011, B000, B000, B001, B001, B000, 1,
Nu, met het centrum flashies, voor smaak
B011, B000 B000, B001, B001, B000, B000, B011, B001, 1,
B001 B001 B000, B000, B001, B001, B000, B000, B011, 1,
B000 B001 B001, B000, B000, B011, B000, B010, B110, 1,
B000 B000, B011, B000, B000, B110, B000, B100, B100, 1,
B000 B000 B110, B000, B100, B100, B100, B110, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100 B100, B000, B110, B000, B000, B011, B010, B000, 1,
B110 B000 B000, B011, B000, B000, B001, B001, B000, 1,
B011, B000 B000, B001, B011, B000, B000, B001, B001, 1,
B001 B001 B000, B000, B001, B001, B000, B000, B011, 1,
B000 B001 B001, B000, B010, B011, B000, B000, B110, 1,
B000 B000, B011, B000, B000, B110, B000, B100, B100, 1,
B000 B000 B110, B000, B110, B100, B100, B100, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100 B100, B000, B110, B010, B000, B011, B000, B000, 1,
B110 B000 B000, B011, B000, B000, B001, B001, B000, 1,
B011, B010, B000, B001, B001, B000, B000, B001, B001, 1,
B001 B001 B000, B000, B001, B001, B000, B000, B011, 1,
B000, B011, B001, B000, B000, B011, B000, B000, B110, 1,
B000 B000, B011, B000, B000, B110, B000, B100, B100, 1,
B000, B010, B110, B000, B100, B100, B100, B100, B000, 1,
B000 B100, B100, B100, B100, B000, B110, B000, B000, 1,
B100 B110, B000, B110, B000, B000, B011, B000, B000, 1,
B110 B000 B000, B011, B000, B000, B001, B001, B000, 1,
Het verpakken omhoog
B001 B001 B000, B000, B001, B001, B000, B000, B001, 1,
B001 B001 B000, B000, B001, B001, B000, B000, B001, 1,
B000 B001 B001, B000, B000, B001, B000, B000, B001, 1,
B000 B000 B001, B000, B000, B001, B000, B000, B001, 1,
B000 B000 B000, B000, B000, B001, B000, B000, B001, 1,
B000 B000 B000, B000, B000, B000, B000, B000, B001, 5,
B000 B000 B000, B000, B000, B000, B000, B000, B000, 3,
B000 B000 B000, B000, B000, B000, B000, B000, B001, 5,
B000 B000 B000, B000, B000, B000, B000, B000, B000, 3,
B000 B000 B000, B000, B000, B000, B000, B000, B001, 5,
B000 B000 B000, B000, B000, B000, B000, B000, B000, 3,
Dit is een dummy element voor het einde van de tabel (duur = 0)
B000 B000 B000, B000, B000, B000, B000, B000, B000, 0
};
/*
** Definiëren pinnen in matrix maakt het gemakkelijker om te herschikken hoe kubus is bedraad
** Pas hier nummers totdat LEDs flash in volgorde - L naar R, T b
** Opmerking dat analoge ingangen 0-5 ook digitale uitgangen 14-19 zijn!
** Pin DigitalOut0 (seriële RX) en AnalogIn5 zijn open gelaten voor toekomstige apps
*/
int [LEDPin] = {16, 3, 1, 15, 4, 6, 14, 5, 7};
int [PlanePin] = {19, 18, 17};
initialisatie
VOID Setup
{
int pin; lus teller
LED-pinnen als uitgang (active HIGH) instellen
voor (pin = 0; pin < PLANESIZE; pin ++) {}
pinMode (LEDPin [pin], uitvoer);
}
instellen van vliegtuig-pinnen als uitgangen (actieve laag)
voor (pin = 0; pin < CUBESIZE; pin ++) {}
pinMode (PlanePin [pin], uitvoer);
}
}
patroon in tabel weergeven totdat DisplayTime ingesteld op nul is (en herhaal vervolgens)
void loop
{
variabelen declareren
byte PatternBuf [PLANESIZE]; Hiermee slaat u de huidige patroon van PatternTable
int PatternIdx;
byte DisplayTime; tijd * 100ms patroon weergeven
niet-ondertekende lange EndTime;
int vliegtuig; lus teller voor kubus vernieuwen
int patbufidx; welke byte van patroonbuffer indexen
int ledrow; graven LEDs in vernieuwen lus
int ledcol; graven LEDs in vernieuwen lus
int ledpin; graven LEDs in vernieuwen lus
Initialiseren van de PatternIdx naar begin van patroon tabel
PatternIdx = 0;
lus op vermeldingen in de tabel van de patroon - terwijl DisplayTime > 0
{}
patroon van de PROGMEM leest en opslaan in array
memcpy_P (PatternBuf, PatternTable + PatternIdx, PLANESIZE);
PatternIdx += PLANESIZE;
DisplayTime van de PROGMEM en increment index leest
DisplayTime = pgm_read_byte_near (PatternTable + PatternIdx ++);
berekenen van de eindtijd van de huidige tijd (ms) en DisplayTime
EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;
lus while DisplayTime > 0 en huidige tijd < EndTime
terwijl (millis() < EndTime) {}
patbufidx = 0; index teller instellen aan het begin van de buffer
lus over vliegtuigen
voor (vliegtuig = 0; vliegtuig < CUBESIZE; vliegtuig ++) {}
vorige vliegtuig uitschakelen
Als (vliegtuig == 0) {}
digitalWrite (PlanePin [CUBESIZE-1], hoge);
} else {}
digitalWrite (PlanePin [vliegtuig-1], hoge);
}
huidige vliegtuig patroon gegevens laden in havens
ledpin = 0;
voor (ledrow = 0; ledrow < CUBESIZE; ledrow ++) {}
voor (ledcol = 0; ledcol < CUBESIZE; ledcol ++) {}
digitalWrite (LEDPin [ledpin ++], PatternBuf [patbufidx] & (1 << ledcol));
}
patbufidx ++;
}
huidige vliegtuig inschakelen
digitalWrite (PlanePin [vliegtuig], laag);
vertraging PLANETIME ons
delayMicroseconds (PLANETIME);
} / / voor vliegtuig
} / / terwijl < EndTime
} terwijl (DisplayTime > 0); lezen van patronen tot tijd = 0 die einde signalen
}
{6 Reacties & Lees ze hieronder of Voeg een}