Stap 2: Code omhoog
Voordat ik ga in de code van de schets, moet u weten dat er een heleboel variabiliteit in de weerstand waarden voor elke LDR (Nou ja, zeker bij elke $0.36 is), en ik wil de lezingen zijn zo dicht bij elkaar in termen van schaal mogelijk. Dus, deel van de code is bedoeld om het gewicht van de lezingen voor elk van de LDR om het level van de lezingen.
Mijn aanpak kan worden onhandig, maar het lijkt te werken.
Mij ben using for-lussen voor het initialiseren van de Arduino analoge pinnen:
for(int indexA = 0; indexA < 6; indexA++) { pinMode(indexA, INPUT); }
Toen ik uit te de gemiddelde voor alle LDR en de weging voor elke LDR (tegen dat de gemiddelde werken)
void averageLDR()<br>{ int tmpAvg = 0; for(int indexA = 0; indexA < 6; indexA++) { int tmpVal = 0; for(int indexB = 0; indexB < 100; indexB++) { tmpVal += analogRead(indexA); } LDR[indexA] = tmpVal / 100; ldrAvg += LDR[indexA]; } ldrAvg = ldrAvg / 6; for(int indexA = 0; indexA < 6; indexA++) { LDR[indexA] = ldrAvg - LDR[indexA]; } }
Het gemiddelde wordt gedaan door het nemen van 100 leest voor elke LDR, de waarden optellen en delen door 100. Het gemiddelde wordt weggeschreven naar een matrix met 6 elementen. De matrix waarden worden bij elkaar opgeteld en gedeeld door 6 te geven een algemene gemiddelde voor de LDR, ten slotte, is de individuele LDR toegevoegde waarde terug aan de array als het algemene gemiddelde - de individuele gemiddelde. Dus, je eindigen met een algemene gemiddelde (ldrAverage) en 6 wegingen (LDR[6]) die zullen worden toegepast op elke analogRead, dus:
void loop()<br>{ for(int indexA = 0; indexA < 6; indexA++) { inputValue = analogRead(indexA) + LDR[indexA]; String se = String("LDR: " + String(indexA) + " Value: " + String(inputValue)); Serial.println(se); } Serial.println("------------------------------"); delay(3000); }
De schets Kijk gewoon houdt bij het lezen van elk van de LDR opeenvolgend.
Wat je eindigen met is een seriële uitgang waarmee u sommige informatie over de initialisatie over het gemiddeld proces waarna de LDR-lezingen.
U kunt zien hoe dit kan vervolgens worden toegepast op het volgen van de schets van een beweging.
Krijgen de hoogste waarde lezen, dat is waar het midden van de beweging is, kan je de volgende hoogste buurman om te zien of de beweging net links of net rechts van de LDR.
Als twee LDR gelijkwaardig zijn, wordt de motie gecentreerd tussen deze twee LDR... enzovoort.
Dus, in plaats van alleen de uitvoer naar seriële verzenden, u kunt doen iets handig mee... en gaan draaien een koepel!