Stap 6: De Setup functie
de Setup-functie:
for (byte i = 0; i < PIN_NUMBER; i++) { pinMode(pins[i], INPUT);}
met dit voor cyclus zetten we alle de pin gebruikt voor de LEDs matrix INPUT. Dit omdat de Charlieplexing matrix uitschakelen van de LEDs door zijn pinnen om INPUT.
pinMode(BUTTON_A, INPUT_PULLUP);pinMode(BUTTON_B, INPUT_PULLUP);
met deze twee functies kunnen we de pullup weerstand voor de twee knoppen. Dus, wanneer een knop wordt ingedrukt, zijn staat geworden laag.
cli();
We schakelen global interrupts om in te stellen van alle interrupts die we nodig hebben.
TCCR1A = 0; // set entire TCCR1A register to 0 TCCR1B = 0; // set entire TCCR1A register to 0TIMSK1 |= (1 << TOIE1); // enable Timer1 overflow interrupt:TCCR1B |= (1 << CS10); // Set CS10 bit so timer runs at clock speed: (no prescaling)
Met deze functies stellen we de timer overflow interrupt. Het wordt gebruikt voor het bijwerken van de Charlieplexing Matrix.
Ik heb een post geschreven hier die uitleggen hoe het werkt.
bitSet(GIMSK, PCIE0); //enable pingChange global interrupt
Deze functie ook inschakelen voor de wereldwijde pinChange interrupt voor de knop B-interrupt gebruikt.
In de Setup -functie inschakelen niet wij de interrupts voor de A en B-knoppen. We kunnen ze in de goSleep() functie. Dit omdat we de interrupts voor de knoppen gebruiken alleen voor wake-up de microcontrollers na het gaat om te slapen.
ADCSRA &= ~bit(ADEN); //disable ADC <br>power_adc_disable(); // disable ADC convertepower_usi_disable(); // disable USI
Deze functies uitschakelen van alle geen onnodige randapparatuur om macht verbruiken.
sei();
Nu kunnen we de global Interrupt.
showKeyChaininoFace(); //show KeyChainino smile facedelay(500);clearMatrix(); //clear the MatrixgameStarted = true; //Start the game
Hier laten we het gezicht van de KeyChainino door de showKeyChaininoFace() functie en schakel we alle de LEDs.
Na dat we de variabele gameStarted ingesteld op true. Op deze manier onze functies weet dat het spel wordt gestart.