Magic Wand-TV Remote (7 / 15 steg)
Steg 7: Kodar för slutliga Arduino skiss (svängande/knacka Motion)
Nu när du förstår hur man läser raw värden från din MPU-6050, är det dags att välja värden för den slutliga Arduino skiss. Genom försök och misstag, jag har kommit till slutsatsen att det bästa sättet att tänka om kodning för olika TV-kommandon är genom att dela upp våra motioner två kategorier: Swinging/trycka och vrida. I det här steget går jag över att välja värden och kodning för svängande/knacka motioner. Vrida motioner kommer att diskuteras i nästa steg.
Det första du behöver göra ladda ner skissen ingår längst ned i detta steg. Skissen innehåller element från Johnchis skiss (ingår i föregående steg), Chris Young IRsend Demo skiss, tillsammans med några av mina egna kodning.
För ett exempel kommer jag att arbeta med kommandot "Volym ner". För "Volym ner", har jag beslutat att jag vill använda små kranar ner för att köra detta kommando. Med MPU6050RawValues.ino skissa upp till Arduino, tog jag del av vilka Accelerometer värden förändras när jag använde en nedåtgående knacka rörelse med min skärbräda, Arduino och MPU-6050. Jag noterade att Accelerometer värden förändras i Y och Z-axlarna. Med hjälp av 'större och mindre änuttalanden", jag tog då anmärkning som raw MPU-6050 värden skulle kunna ingå i förslaget. För Accelerometer-värden Y-axeln (AVAL) var rå värdena vanligen större än 7000 när mete bakbord något ner. Accelerometer värdena i Z-axeln (eller AcZ) var i allmänhet mindre än 10000 när du använder samma rörelse. Med '>' och "<" symboler, jag började skriva min kod så här:
AVAL > 7000 och AcZ < 10000 |
För att inkludera dessa värden inom MagicWandTVRemote.ino skissen, kommer vi att byta ut ordet 'och' med '& &". Vi måste också ta med dessa värden inom en 'om uttalande"som kräver tillägg av parenteser och ett slutet fäste. I mitt fall skulle koden ser ut så här:
om (AVAL > 7000 & & AcZ < 10000) { |
Du kan lägga till så många eller så få "större och mindre än uttalanden" som du vill så länge du inkludera "& &" mellan var och en. Inte känner att du behöver inkludera endast två bara för att jag gjorde.
Nästa sak vi måste göra är definierar hur många gånger vår kod behov att upprepa. Eftersom svängande/knacka rörelser kräver vår kod för att börja skicka medan Magic Wand TV remote inte pekar på TV, måste vi se till att signalen skickas fortfarande när fjärrkontrollen pekar på det. Det är viktigt att leka lite att hitta rätt värde eftersom om du inte upprepa signalen tillräckligt många gånger, LED inte fortfarande tidssignal signalen när fjärrkontrollen pekar på TV. Å andra sidan, om du upprepar signalen för många gånger, riskerar du att koden skickas ut för många gånger orsakar koden skickas till TV: N flera gånger. Det är där din valfria LED ljus och resistor kan komma till hands. Om du byta ut den infraröda LED och motstånd för en synlig LED och motstånd, kommer att du kunna öva flytta din skärbräda på det sätt du vill flytta din Magic Wand-TV Remote, och se om lysdioden blinkar rätt antal gånger. Det är mycket lättare att byta ut lysdioder då har att hålla en kamera upp till den infraröda LED att se vad den gör.
Koden för att använda en upprepning är följande:
för (int jag = 0; jag < = 5; i ++) { |
Det nummer som behöver förändras baserat på hur många gånger du vill upprepa ditt kommando kommer efter den "< ='. I mitt fall ville jag upprepa kommandot 5 gånger. Eftersom små kranar ner tillät mig att återvända min bakbord till en punkt där det var pekar på TV ganska snabbt, behövde jag inte att upprepa kommandot många gånger. I kontrast för kommandot "TV-makt" beslöt jag att göra en större sving. Det tog lite längre tid att rikta fjärrkontrollen på TV: N så jag var tvungen att upprepa kommandot 15 gånger.
Slutligen måste vi inkludera rätt kod som vi hittade i Decode din TV Remote steg. Jag fastställt koden ska vara:
NEC, 0X20DFC03F, 32 |
Denna kod måste infogas mellan parenteserna i uttrycket 'My_Sender.send ();' så i mitt fall, koden skulle se ut så här:
My_Sender.send (NEC, 0x20DFC03F, 32); |
Slutligen, jag la en kort fördröjning som bör läsa såhär:
Delay(100); |
Alla tillsammans, du koden ska se ut såhär:
om (AVAL > 7000 & & AcZ < 10000) { för (int jag = 0; jag < = 5; i ++) { My_Sender.send (NEC, 0x20DFC03F, 32); }} |
Vad du än gör, Glöm inte de två tillsammans i slutet! Ett fäste slutar din "om uttalande", och annan slutar din repeat-satsen. Din kod kommer inte att fungera om du glömmer dessa fästen.
För att integrera de värden som du har hittat till MagicWandTVRemote.ino skissen, bara bläddra till andra halvan av skissen och ersätta de värden som jag har hittat med din egen. Se till att du testar din kod med alla dina komponenter kopplade till bakbord att se till att du faktiskt kan kontrollera TV: N.