Stap 7: Codering voor definitieve Arduino schets (swingen/onttrekken Motion)
Nu dat je hoe begrijpt het lezen van ruwe waarden uit uw MPU-6050, is het tijd om waarden te selecteren voor de uiteindelijke Arduino schets. Via trial and error, ik kom tot de conclusie dat de beste manier om na te denken over het coderen voor verschillende TV-commando's is door het verdelen van onze bewegingen twee categoriën: Swingen/te tikken en Twisting. In deze stap, zal ik gaan over waarden te selecteren en de codering voor swingen/onttrekken bewegingen. Kronkelende bewegingen zal worden besproken in de volgende stap.
Het eerste ding dat u zult moeten de schets opgenomen bij de bodem van deze stap downloaden. De sketch bevat elementen van JohnChi de schets (inbegrepen in de vorige stap), Chris Youngs IRsend Demo schets, samen met enkele van mijn eigen codering.
Voor een voorbeeld ga ik om te werken met de opdracht 'Volume omlaag'. Voor 'Volume omlaag', heb ik besloten dat ik wil gebruiken van kleine kranen beneden deze opdracht moet worden uitgevoerd. Met de MPU6050RawValues.ino schets geüpload naar de Arduino, heb ik nota genomen van welke versnellingsmeter waarden veranderden toen ik een beweging naar beneden te onttrekken met mijn breadboard, Arduino en MPU-6050 gebruikt. Ik merkte dat de versnellingsmeter waarden in de Y- en Z-assen veranderden. Met behulp van 'groter en kleiner danverklaringen', ik nam toen een opmerking waarvan ruwe MPU-6050 waarden kunnen worden opgenomen in de ontwerpresolutie. Voor de waarden van de versnellingsmeter in de Y-as (of AcY) werden de ruwe waarden meestal meer dan 7000 wanneer het breadboard iets hengelen naar beneden. De waarden van de versnellingsmeter in de Z-as (of AcZ) waren over het algemeen minder dan 10000 bij het gebruik van de dezelfde beweging. Met behulp van '>' en '<' symbolen, begon ik te schrijven van mijn code als volgt:
AcY > 7000 en AcZ < 10000 |
Om deze waarden binnen de MagicWandTVRemote.ino schets hebt opgenomen, zullen we ter vervanging van het woord 'en' met '& &'. We zullen ook moeten omvatten deze waarden binnen een 'als verklaring' waarvoor de toevoeging van haakjes en een metalen beugel. In mijn geval, zou de code als volgt uitzien:
Als (RV > 7000 & & AcZ < 10000) {} |
U kunt zo veel of zo weinig 'groter en kleiner dan verklaringen' als u willen zou, zolang u opnemen ' & &' tussen elkaar. Niet het gevoel dat u hoeft te nemen slechts twee alleen omdat ik deed.
Het volgende ding dat we moeten doen is bepalen hoeveel keer de behoeften van onze code te herhalen. Omdat swingen/onttrekken moties onze code om te beginnen met het verzenden vereist terwijl de magische toverstaf afstandsbediening niet op de TV gericht is, moeten we ervoor zorgen dat het signaal nog steeds tegen de tijd dat de afstandsbediening is wijzend op het wordt verzonden. Het is belangrijk om te spelen een beetje te vinden rechts waarde omdat als u niet het signaal niet vaak genoeg herhalen, de LED zal nog steeds niet worden het verzenden van het signaal tegen de tijd dat de afstandsbediening is wijzend op de TV. Aan de andere kant, als u het signaal ook vele malen herhalen, loopt u het risico van de code die wordt verstuurd ook vele malen waardoor de code meerdere keren naar de TV worden gestuurd. Dit is waar uw optionele LED licht en weerstand kunnen van pas komen. Als u de infrarood LED en weerstand voor een zichtbare LED en weerstand verwisselt, zal u zitten kundig voor praktijk uw breadboard verplaatsen op de manier die u willen zou bewegen je Magic Wand TV Remote, en zien als de LED het juiste aantal keren knippert. Het is een stuk makkelijker om omwisselen van LED's, dan moeten houden van een camera tot de infrarood LED om te zien wat het doet.
De code voor het gebruik van een herhaling is als volgt:
for (int i = 0; ik < = 5; i ++) {} |
Het nummer dat moet veranderen op basis van hoe vaak u wilt herhalen uw opdracht komt na het '< ='. Ik wilde in mijn geval, herhaal de opdracht 5 keer. Aangezien kleine kranen beneden stond me toe om mijn breadboard terug te keren naar een punt waar het was wijzend op de TV vrij snel, ik niet hoefde te herhalen de opdracht vele malen. In tegenstelling voor de opdracht 'TV-Power' besloten heb ik om te doen een grotere schommel naar beneden. Het kostte me een beetje langer richt de afstandsbediening op de TV, dus moest ik herhaal de opdracht 15 keer.
Tot slot, moeten wij de juiste code die we in de externe Stap Decodeer uw TV vonden. Ik vastbesloten deze code:
NEC, 0X20DFC03F, 32 |
Deze code moet worden ingevoegd tussen de haakjes in de instructie 'My_Sender.send ();' dus in mijn geval, de code zou er als volgt uitzien:
My_Sender.send (NEC, 0x20DFC03F, 32); |
Tot slot, ik heb toegevoegd een korte vertraging die als dit lezen moet:
delay(100); |
Alles bij elkaar, moet u code als volgt uitzien:
Als (RV > 7000 & & AcZ < 10000) {} for (int i = 0; ik < = 5; i ++) {} My_Sender.send (NEC, 0x20DFC03F, 32); }} |
Wat je ook doet, Vergeet niet de twee haakjes aan het einde! Een beugel eindigt uw ' als verklaring ', en de andere een eindigt uw 'repeat-instructie'. Uw code zal niet werken als u deze haken vergeet.
Het integreren van de waarden die u hebt gevonden in de schets van de MagicWandTVRemote.ino , scroll naar beneden de tweede helft van de schets en vervangt u de waarden die ik heb gevonden met uw eigen. Zorg ervoor dat u uw code al uw componenten aangesloten op het breadboard test om ervoor te zorgen dat u kunt eigenlijk het controleren van de TV.