Bike Hand signalljus (10 / 10 steg)
Steg 10: Riktiga koden
Dec 26, 2009: Ny kod! Det är postat var den gamla koden. Stort tack till Jacob för förenkling. Det fungerar riktigt bra.
Här är det. Tack för läsning och glöm inte att rösta!
#include < avr/io.h > #include < avr/interrupt.h > #include < util/delay.h > / / Anger / rensar bitar i registren #define setBit (sfr, lite) (sfr | = (1 << bit)) #define clearBit (sfr, lite) (sfr & = ~ (1 << bit)) #define flipBit (sfr, lite) (sfr ^ = (1 << bit)) #define falska 0 #define sant 1 #define matrixX(x) (PORTA = (x - 1) << 5) #define matrixGY(y) (PORTD = y) #define matrixRY(y) (PORTB = y) void försening (unsigned int försening) { unsigned int x = 0; while(x < Delay) { x++; { } { } void initMatrix() { DDRD = 0xFF; / / grön kontroll DDRB = 0xFF; / / Red kontroll DDRA = 0xE0; / / Ground control } void matrixRowDraw (char greenmask, char redmask, char kolumn) { matrixX(column); int jag = 0; for(i = 0; i < 8; i++) { matrixGY (greenmask & (1 << i)); matrixRY (redmask & (1 << i)); _delay_us(150); } matrixGY(0x00); matrixRY(0x00); } void matrixLeft() { matrixRowDraw (0x10, 0, 1), matrixRowDraw (0x20, 0, 2); matrixRowDraw (0x40, 0, 3); matrixRowDraw (0xFF, 0, 4); matrixRowDraw (0xFF, 0, 5), matrixRowDraw (0x40, 0, 6), matrixRowDraw (0x20, 0, 7), matrixRowDraw (0x10, 0, 8), } void matrixRight() { matrixRowDraw (0x18, 0, 1), matrixRowDraw (0x18, 0, 2); matrixRowDraw (0x18, 0, 3); matrixRowDraw (0x18, 0, 4); matrixRowDraw (0x99, 0, 5), matrixRowDraw (0x5A, 0, 6), matrixRowDraw (0x3C, 0, 7), matrixRowDraw (0x18, 0, 8), } void adcInit() { ADMUX = 0x60; ADCSRA = 0x80; } char adcGet(char chan) { ADMUX = 0x60 | chan; ADCSRA | = 0x40; samtidigt (bit_is_clear (ADCSRA, ADIF)); återvända ADCH; } char adcAvg (char chan, char avgnum) / / endast i genomsnitt upp till 256 prover { int jag = 0; unsigned int totala = 0; for(i = 0; i < avgnum; i++) { totala += adcGet(chan); } tillbaka totalt/avgnum; } int main() { initMatrix(); adcInit(); while(1) { medan (adcAvg (3, 50) > 0x45 & adcAvg(2,50) > 0x70) / / hex värden här bör ändras beroende på användare inställningen att ta reda på om flex sensorerna. { om (adcAvg (1, 50) > 0x4F) { matrixRight(); } om (adcAvg (1, 100) < 0x4F) { matrixLeft(50); } } } return 0; }
Speciellt tack till tids, mina föräldrar och vänner som hjälpte.