Stap 1: Hoe om het code
Het moeilijkste deel is uitwerken hoe programma teller/Timer 1 Pin 5 gebruiken als een teller input in plaats van de meer gebruikelijke gebruikt als een digitale of analoge input of output. Dit vereist nauwe toetsing van het gegevensblad, maar gelukkig voor u, ik heb gedaan dat alles.
In de globale context van uw schets (dat wil zeggen vóór Setup) moet u de volgende coderegels:
int pixels; #define MAXPIXELS 60 #define PIN 8 Adafruit_NeoPixel strip = Adafruit_NeoPixel(MAXPIXELS, PIN, NEO_GRB + NEO_KHZ800);
In een bestaande tekening zul je al de laatste twee regels, of een gelijkwaardig. Als u een ander type van NeoPixels of een andere pin gebruikt, wijzig deze lijnen zodat deze overeenkomen met uw versie.
Voeg de volgende code op een handig moment in Setup:
#define COM1A 0 #define COM1B 0 #define WGM1 4 // CTC mode #define FOC1 0 #define CS1 7 // Ext clock on rising edge TCCR1A = (COM1A << 6) | (COM1B << 4) | (WGM1 & 3); TCCR1B = (FOC1 << 6) | ((WGM1 & 0xC) << 1) | CS1; strip.begin(); TCNT1 = 0; strip.show(); pixels = PIXELS - (TCNT1 + 12)/24; // Serial.begin(38400); // Serial.print("Count = "); Serial.print(TCNT1); // Serial.print(" Pixels = "); Serial.println(pixels);
U kunt de commentaar regels voor foutopsporing als u wilt, om te zien dat de bits wordt geteld als ze uit DOUT komen uncomment.
In het restant van uw schets, gebruik de variabele pixels waar moet u de grootte van de ring, of waar de code strip.numPixels()gebruikt.