Stap 10: De echte Code
26 december 2009: Nieuwe CODE! Deze geplaatst waar de oude code was. Veel dank aan Jacob voor de vereenvoudiging. Het werkt echt goed.
Hier is het. Bedankt voor het lezen en vergeet niet te stemmen!
#include < avr/io.h > #include < avr/interrupt.h > #include < util/delay.h > / / Ingesteld of gewist van de bits in de registers #define setBit (sfr, bit) (sfr | = (1 << bits)) #define clearBit (sfr, bit) (sfr & = ~ (1 << bits)) #define flipBit (sfr, bit) (sfr ^ = (1 << bits)) #define valse 0 #define waar 1 #define matrixX(x) (PORTA = (x - 1) << 5) #define matrixGY(y) (PORTD = y) #define matrixRY(y) (PORTB = y) ongeldig vertraging (unsigned int vertraging) { } unsigned int x = 0; while(x < Delay) { x++; } } ongeldig initMatrix() { } DDRD = 0xFF; / / Green control DDRB = 0xFF; / / rode control DDRA = 0xE0; / / Ground control } void matrixRowDraw (char greenmask, char redmask, char-kolom) { }, matrixX(column); int i = 0; for(i = 0; i < 8; i++) { } matrixGY (greenmask & (1 << i)); matrixRY (redmask & (1 << i)); _delay_us(150); } matrixGY(0x00); matrixRY(0x00); } ongeldig 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); } ongeldig 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); } ongeldig adcInit() { } ADMUX = 0x60; ADCSRA = 0x80; } char adcGet(char chan) { } ADMUX = 0x60 | chan; ADCSRA | = 0x40; terwijl (bit_is_clear (ADCSRA, ADIF)); return ADCH; } char adcAvg (char chan, char avgnum) / / slechts gemiddeld maximaal 256 monsters { } int i = 0; unsigned int totaal = 0; for(i = 0; i < avgnum; i++) { total += adcGet(chan); } retourneren totaal/avgnum; } int main() { initMatrix(); adcInit(); while(1) { } terwijl (adcAvg (3, 50) > 0x45 & adcAvg(2,50) > 0x70) / / de hexadecimale waarden hier moeten worden gewijzigd, afhankelijk van de instellingen van de gebruikers om te bepalen van de gevoeligheid van de sensoren flex. { if(adcAvg(1, 50) > 0x4F) { matrixRight(); } if(adcAvg(1, 100) < 0x4F) { matrixLeft(50); } } } return 0; }
Speciale dank aan de kamerheren, mijn ouders en vrienden die hebben geholpen.