Stap 6: De geest in de Lamp
Umm, als u aan een voordeel denken kunt, laat het me weten, ik had moeite met die ene.
Ik heb ook de code als een tekstbestand, u moet openen in een teksteditor en kopieer en plak deze in het milieu van de Arduino. Of, indien gewenst, gewoon open de Arduino software en volg langs als we gaan schrijven.
Voor de emulatie-lamp ben ik met behulp van mijn eigen Moodlamp-bibliotheek, kunt u de bibliotheekbestanden en documentatie op mijn andere RGB Instructable, RGB-Moodlamp met aangepaste bibliotheek. Anders kunt u gewoon kopiëren van de sensor van de kleur code en output naar je RGB lamp in uw voorkeur wijze behandelen.
Dus laten we eens kijken naar de code.
Begin met de eerste afbeelding, of volgen samen met het tekstbestand.
We beginnen met een include-instructie gevolgd door een paar verklaringen.
De include-instructie is voor de Moodlamp-bibliotheek. De verklaring onder is gewoon te zeggen dat onze exemplaar van Moodlamp licht zal worden genoemd.
Dan we een paar van de houders van de plaats zetten.
De eerste is een array dat we gebruiken zullen om aan te pakken van de pinnen dat LEDs op zijn aangesloten. Herinner me dat wij onze sensor lampen aangesloten op die dezelfde pin-nummers.
De anderen moeten worden duidelijk genoeg door de notities in het beeld, zo niet, vrees niet, ze zijn slechts enkele plaats houders voor waarden die we later zullen gebruiken.
De houder van de plaats voor de gemiddelde lezing is niet speciaal, het kreeg zijn eigen beeld, omdat het bijna was vergeten.
Zodra alle onze verklaringen zijn aangebracht, moeten we zal nu het setup-functie schrijven. We beginnen met het toewijzen van onze sensor output pinnen. We hoeven niet te verklaren de analoge ingang van de sensor en de pinnen van de lampen worden opgevangen door de Moodlamp-bibliotheek.
Dan beginnen we seriële communicatie zodat uit onze lamp kunnen we sommige debugging informatie terug krijgen.
Daarna kunnen we doorgaan met onze lus functie. De lus is de code die de Arduino opnieuw en opnieuw wordt uitgevoerd. Zoals u kunt zien zijn we een paar functies aanroepen.
Eerste noemen we checkBalance om te zien als het evenwicht heeft geweest stelt en het indien nodig. (Wanneer het ingeschakeld)
Vervolgens controleren we de kleur onder de sensor. Zodra we een kleur hebben, we het afdrukken op het scherm, en stel vervolgens de kleur van de lamp. De laatste aanroep van getReading doet niets nuttig helemaal, liet het daar per ongeluk. Ach, ik kan beweren dat ik enkel hield de lamp uit te inactiviteit.
Dus laten we eens kijken naar de verschillende functies.
CheckBalance is vrij rechttoe-rechtaan, wordt gecontroleerd om te zien of er een evenwicht bestaat en als dit niet gebeurt, dan het ingesteld door het aanroepen van de functie setBalance.
Laten we eens kijken naar de setBalance-functie, het is de langste.
Eerst pulse we het licht rood tweemaal en vervolgens wit met behulp van de Moodlamp-bibliotheek. Dit is om te waarschuwen de exploitant dat de witte scan is gaan plaatsvinden. Verlaten van de lamp wit (alle drie kleuren op) verlaat zo veel storende licht mogelijk voor onze basislijn scans die ze even evenwichtig houdt.
Wat de volgende sectie doet is licht het rood en groen, groene LEDs dan terwijl het nemen van een sensor lezen bij elke stap. Dit geeft ons enkele gegevens over hoeveel van iedere kleur werd teruggekaatst naar de sensor. Deze lezingen moet hoog zijn, want het is wit, die een afspiegeling alot voor elke kleur.
Als de zin is niet afgeleid, moet u een voorbeeld van wit (een kaart of een papier) onder de sensor plaatsen terwijl deze scan plaatsvindt. Het hele ding duurt ongeveer drie seconden. De scan minder dan één.
Wanneer u klaar bent met het scannen van wit, scant we zwart. Er zijn enkele waarschuwing lichten weer, een vertraging, waarna de scan. Hier zult u een zwarte of grijze steekproef onder de lamp. Zullen we een beetje meer over wat uw monster hoger zou moeten zijn.
Zodra de tegenrekening scans zijn voltooid, wordt de lamp dooft, en we de Booleaanse waarde voor het al dan niet evenwicht waarden zijn vastgesteld op true.
Zodra de saldi hebben vastgesteld, ons programma zal nu beginnen met het controleren van de kleur onder de sensor, kans groot dat in de fysieke wereld u nog niet hebt verwijderd uit uw zwarte monster, maar nooit geest dat wij spraken over de code.
Als u hebt gevolgd wat er gaande was met de tegenrekening scan, zijn wij vrijwel hetzelfde te doen. Het grote verschil is dat we wat wiskunde gebruiken om het evenwicht van onze nu te lezen. In principe zijn we veranderen onze lezing op basis van de maximale en minimale mogelijk lezingen, en daarmee een waarde we kunnen gebruiken, namelijk tussen 0-255(roughly). Dat geeft ons een mooie eerlijke vertegenwoordiging van kleur.
Na dat instellen we gewoon de kleur. We moeten gewoon tweek de nummers een beetje, omdat vaak de bovenstaande wiskunde groter dan of kleiner dan onze acceptabele waarden retourneert. Toen we de rode, groene en blauwe variabelen instellen en gebruiken van de Moodlamp bibliotheek om de kleur weer te geven.
Ik vergat bijna te vermelden van de functie van getReading, die enkel krijgt gemiddeld lezen voor keer aantal lezingen. Geen strickly nodig, als één lezing lijkt voldoende, maar ik wist niet dat op het moment.
De twee afdrukfuncties zijn voor foutopsporing, en gewoon af te drukken onze lezingen op de seriële poort. Ja weet ik ik noem een in de lus, maar u niet moet. Net als ik nummers soms scrollen. Plus ik was outputting te verwerken tijdens het testen, om te zien precies wat de kleur van de sensor zien. Ik zal proberen om de tijd om te documenteren en te uploaden die schets in de nabije toekomst te vinden, maar voor nu je bent op uw eigen. (Niet moeilijk als u bekend met de verwerking en seriële communicatie bent)
Zodra u klaar met het schrijven van uw code bent, uploaden naar de lamp en beginnen te spelen. Door te spelen ik bedoel test... maar op een leuke manier.