#include #include #include #define tastpunkte 1000 #define dunkel 0x00 #define speed 0x00 uint8_t pointer; uint16_t hits; uint16_t t1; //Funktionen int abfrage (int hits) { while(t1) { if (PIND & (1 << PIND2)) { hits++; } t1--; }; t1 = tastpunkte; return hits; } int weiss (int hits) { if (hits > 100) { if (OCR2 == 0xFF && OCR1AL == 0xFF && OCR1BL == 0xFF) return 2; } if (hits < 50) { if (OCR2 != 0xFF) OCR2++; if (OCR1AL != 0xFF) OCR1AL++; if (OCR1BL != 0xFF) OCR1BL++; } return 1; } int gruen (int hits) { if (hits > 100) { if (OCR1AL == 0x00 && OCR1BL == 0x00 && OCR2 == 0xFF) return 3; if (OCR1AL != 0x00) OCR1AL--; if (OCR1BL != 0x00) OCR1BL--; } if (hits < 50) { if (OCR1AL != 0xFF) OCR1AL++; if (OCR1BL != 0xFF) OCR1BL++; } return 2; } int tuerkis (int hits) { if (OCR1BL == 0xFF && OCR2 == 0xFF && OCR1AL == 0x00) return 4; if (hits > 100) { if (OCR1BL != 0xFF) OCR1BL++; } if (hits < 50) { if (OCR1BL != 0x00) OCR1BL--; if (OCR1BL == 0x00) return 2; } return 3; } int blau (int hits) { if (OCR2 == 0x00 && OCR1BL == 0xFF && OCR1AL == 0x00) return 5; if (hits > 100) { if (OCR2 != 0x00) OCR2--; } if (hits < 50) { if (OCR2 != 0xFF) OCR2++; if (OCR2 == 0xFF) return 3; } return 4; } int violett (int hits) { if (OCR1AL == 0xFF && OCR1BL == 0xFF && OCR2 == 0x00) return 6; if (hits > 100) { if (OCR1AL != 0xFF) OCR1AL++; } if (hits < 50) { if (OCR1AL != 0x00) OCR1AL--; if (OCR1AL == 0x00) return 4; } return 5; } int rot (int hits) { if (hits > 100) { if (OCR1BL != 0x00) OCR1BL--; } if (hits < 50) { if (OCR1BL != 0xFF) OCR1BL++; if (OCR1BL == 0xFF) return 5; } return 6; } int main (void) { //Initialisierung DDRB = 0xFF; //Ausgänge DDRD = 0x00; //Eingänge Taster 1 TCCR1A |= (1 << COM1A1) | (0 << COM1A0) | (1 << COM1B1) | (0 << COM1B0) | (1 << WGM10); TCCR1B |= (1 << CS11) | (1 << CS10); TCCR2 |= (0 << WGM20) | (1 << COM21) | (1 << COM20) | (1 << CS22); //Anfangswerte Frabe weiß OCR2 = 0xFF; //grün OCR1AL = 0xFF; //rot OCR1BL = 0xFF; //blau t1 = tastpunkte; pointer = 1; while(1) { hits = 0; hits = abfrage (hits); switch (pointer) { case 1: pointer = weiss (hits); break; case 2: pointer = gruen (hits); break; case 3: pointer = tuerkis (hits); break; case 4: pointer = blau (hits); break; case 5: pointer = violett (hits); break; case 6: pointer = rot (hits); OCR2 = 0x00; //wurde nur für Testzwecke hinzugefügt und trotzdem geht OCR2 nicht auf 0x00 break; } } return 0; }