Afstandsbediening bestuurd via Internet (6 / 6 stap)

Stap 6: Ingesloten Aquila actie

Het hebben van al dit geïmplementeerd, de ontvangen code konden worden gewoon gekopieerd vormen de seriële Monitor, en plakt u deze als een nieuwe matrix in de code. Vervolgens toe te voegen de Aquila actie functies om te bellen van die (of deze) matrix en beschikken over een afstandsbediening zelfs beter via het platform van de Aquila (het voordeel hiervan is dat u niet nodig om te kopen meer drukknoppen en dat u kunnen automatiseren zult zoals ik nu zal noemen).

Zie dit als een "eenvoudige" toepassing voor de Altair, stel je het configureren zodat op N moment van de dag uw TV wilt inschakelen en beginnen met het opnemen van uw favoriete programma.

Nu, we zullen het toevoegen van een paar regels ter uitvoering van het platform van Aquila. Ik ben met inbegrip van een matrix met een heleboel nummers; Dit zijn degenen die de afstandsbediening waarmee ik naar de TV stuurt mij tweedehands (die in feite ik uitgepakt rechtstreeks vanaf de seriële Monitor). Je moet wijzigen die nummers voor degene die uw seriële Monitor geeft als resultaat

Hoewel, ik liet hen er dus je kon zien een matrixstructuur.

 //Because the timing is very important, we won’t be using digitalRead //for it’s very slow compared with what we’ll be using. //Check the reference link after the code; back on the tutorial. //This (PIND) thing means that form pin 0 to 7 will be READ ONLY #define IRpin_PIN PIND #include <Wire.h> #include <Mesh.h> #include <AquilaProtocol.h></p><p>#define MASK 2 //This will be taken as a binary number (00000010) #define Boton 33 //Built-in Altair Button (It has inverted logif! LOW = Pressed, HIGH = NOT pressed) #define Boton2 10 //Extern button, normal logic! HIGH = Pressed, LOW = Not pressed! #define IR 9 //The longest pulse that will be read is going to be 65ms (when the code applies, it’ll be a microseconds function //So it will NOT be taken as 65000ms (being this 65 seconds); in fact 65 ms is A LOT in this environment. #define MAXPULSE 65000 //Nuestra resolución de tiempo, entre más grande es el valor mejor, //Our time resolution, the bigger the value the better, for it’s more precise //but it takes longer to process it //And we would be losing the precision we won not using digitalRead #define RESOLUTION 20 //El pulso que se recibirá será en pares, 100 pares en éste ámbito es muchísimo //The received pulse will be in pairs, 100 pairs is actually a LOT. uint16_t pulses[100][2]; // Remember that a “value” consist in an ON and OFF from the LED, so in the matrix is stored in pairs. uint8_t currentpulse = 0; // It’ll be used to know how many pairs from ON and OFF have being received. bool full = false;</p><p>uint16_t turnON [120][2]={{46264,1100},{540,1160},{480,1960},{540,1080},{520,1120},{520,1120},{520,1100},{540,1080},{560,1060},{1420,1040},{600,1800},{720,920},{20324,980},{640,980},{660,1780},{740,880},{760,860},{760,880},{760,880},{760,880},{760,860},{1600,900},{760,1700},{760,880},{20384,940},{700,920},{700,1740},{760,880},{760,860},{780,860},{760,880},{760,900},{720,900},{1600,880},{740,1740},{760,860}}; //This is an example of how a code for turning ON a TV looks like, It may be different to yours, so you’ll have to modify the matrix in the next functions (also this one) :)</p><p> uint16_t vUP[120][2]={0}; uint16_t vDWN[120][2]={0}; uint16_t cUP[120][2]={0}; uint16_t cDWN[120][2]={0}; uint16_t inp[120][2]={0}; </p><p>bool encender (uint8_t param, bool gotParam) { Enviar (turnON); delay(500); }</p><p>bool volumenUP (uint8_t param, bool gotParam) { Enviar(vUP); delay(500); }</p><p>bool volumenDWN (uint8_t param, bool gotParam) { Enviar(vDWN); delay(500); }</p><p>bool canalUP (uint8_t param, bool gotParam) { Enviar(cUP); delay(500); }</p><p>bool canalDWN (uint8_t param, bool gotParam) { Enviar(cDWN); delay(500); }</p><p>bool input (uint8_t param, bool gotParam) { Enviar(inp); delay(500); } void setup(void) { Serial.begin(9600); Mesh.begin(); Aquila.begin(); Aquila.setClass("mx.makerlab.test"); Aquila.setName("Control"); Aquila.addAction("Turn On", encender); Aquila.addAction("Volumen +", volumenUP); Aquila.addAction("Volumen -", volumenDWN); Aquila.addAction("Chanel +", canalUP); Aquila.addAction("Chanel -", canalDWN); Aquila.addAction("Input", input); Mesh.announce(HUB); Serial.begin(9600); pinMode(Boton, INPUT); pinMode(Boton2, INPUT); // pinMode(Boton2, INPUT_PULLUP); pinMode(IR, OUTPUT); pinMode(15, OUTPUT); pinMode(14, OUTPUT);</p><p>// 7 6 5 4 3 2 1 0 //TCCR2A - [COM2A1, COM2A0, COM2B1, COM2B0, reserved, reserved, WGM21, WGM20] // 7 6 5 4 3 2 1 0 //TCCR2B - [FOC2A, FOC2B, reserved, reserved, WGM22, CS22, CS21, CS20]</p><p> TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); // A ‘or’ is applies to all of them and it looks like this -> TCCR2A = 0110 0011 (99) TCCR2B = _BV(WGM22) | _BV(CS21); // A ‘or’ is applies and it looks like this -> TCCR2B= 0000 1010 = 10 OCR2A = 25; //Inner time gets to 25 (splitted between the frequency of the micro controller (16MHz) times 2 (because the split will only show the half of the wave, we want to know the duration of a complete cycle. TCCR2A ^= _BV(COM2A1); // Prepares the IR LED</p><p> Serial.println("Ready to decode IR!"); //After this message we’ll know that it has just finished the SETUP part and stats reading pulses. }</p><p>void IRcarrier (unsigned int matrix) { if (matrix != 0) { TCCR2A ^= _BV(COM2A1); //Changes the 8’th bit. Turns the LED ON. delayMicroseconds(matrix); //Waits matrix-microseconds with the LED turned ON. TCCR2A ^= _BV(COM2A1); //Turns the LED off. } }</p><p>void Enviar(uint16_t pulse[120][2]) { digitalWrite(15, LOW); for (int i = 0; i < 120; i++) { if (pulse[i][0] == 0) //If a matrix slot is empty, it leaves the loop. { break; } delayMicroseconds(pulse[i][0]); //Waits n microseconds wi the IR LED off. IRcarrier(pulse[i][1]); //Enters the función sending the delay that takes the ON from the IR } digitalWrite(15, HIGH); }</p><p>//The only thing this función does is printing everything received after the pulse is over. void printpulses() { Serial.println("\n\r\n\rReceived: \n\rOFF\t|\tON"); Serial.print("{"); for (uint8_t i = 0; i < currentpulse; i++) { Serial.print("{"); Serial.print(pulses[i][0], DEC); //DEC <- En caso de que no esté en decimales, esto lo obliga a pasarlo a decimales. Serial.print(","); Serial.print(pulses[i][1], DEC); Serial.print("}"); } Serial.print("};\n"); full = true; } void loop(void) {</p><p>Mesh.loop(); Aquila.loop(); </p><p> digitalWrite(15, HIGH); //Built-in LEDs, inverted logic. digitalWrite(14, HIGH); //Both begin off.</p><p> if (digitalRead(Boton2) == HIGH || (currentpulse != 0)) { if (digitalRead(Boton2) == HIGH) { Serial.println("Leyendo!"); digitalWrite(14, LOW); //GREEN LED ON! full = false; } uint16_t highpulse, lowpulse; // The pulse will be temporary stored on this variables. highpulse = lowpulse = 0; //This process will be splitter in to steps, when the LED is ON; HighPulse and when it’s off; LowPulse. //All this ‘while’ function is for when the pulse is on High (the LED ON) // --- Complex Explanation --- // //We will apply what is on the pin 0-7 a “mask” and we take whatever is on the position 00000100 // If we order the pins this way -> 76543210 we an see in a clearer way that the 00000100 is on the antepenultimate position, same as (xxxxx2xx) //The '&' operator generates a truth table between 00000100 and what is connected to the pins (the micro controller will ignore whatever is not on the pin 2, basically). //So, if there’s anything connected to the PIN 2, it will work. while (IRpin_PIN & (1 << MASK) && full == false) { highpulse++; delayMicroseconds(RESOLUTION); // If the pulse is to long, the scanning ceases. // Writes down everything received and resets counters. if ((highpulse >= MAXPULSE) && (currentpulse != 0)) { printpulses(); currentpulse=0; return; } } // if it never got to the ‘if loop’, then it stores the new high pulse to the matrix. pulses[currentpulse][0] = highpulse; //--------------------------------------------- // The process repeats for the second part of the pulse (remember that it consists on a HIGH and a LOW together) // Is the same as on the other WHILE, only with another notation, where _BV is BITVALUE. Check the assistance links. // And this one will count every time the receiver receives nothing. while (! ( IRpin_PIN & _BV(MASK) ) && full == false) { lowpulse++; delayMicroseconds(RESOLUTION); // If the pulse is too long, the scanning ceases. // Writes down everything received and resets counters. if ((lowpulse >= MAXPULSE) && (currentpulse != 0)) { printpulses(); currentpulse=0; return; } } pulses[currentpulse][1] = lowpulse * RESOLUTION; // A ON-OFF pulse has been read // the whole process will be repeated until some command exceeds the length of a ON or a OFF (and enters to the ‘if loop’). currentpulse++; }</p><p>if (digitalRead(Boton) == LOW && full == true) { Enviar(pulses); delay(500); } digitalWrite(14,HIGH); }</p> 

Gerelateerde Artikelen

IoT - een Raspberry Pi Robot beheren via internet met HTML en shell scripts alleen

IoT - een Raspberry Pi Robot beheren via internet met HTML en shell scripts alleen

(Als je deze Instructables, vergeet dan niet te stemmen (boven: rechts hoek vlag). het is concurreren op INTERNET of THINGS en automatisering wedstrijden. Heel hartelijk bedankt! ;-)In dit instructable, zullen we het maken van een volledig gecontrole
IoT: Raspberry Pi Robot met Video Streamer en Pan/Tilt camera afstandsbediening via internet

IoT: Raspberry Pi Robot met Video Streamer en Pan/Tilt camera afstandsbediening via internet

(Als je dit Instructable, vergeet dan niet te stemmen - boven: rechts hoek vlag. Het is concurreren op INTERNET of THINGS en automatisering wedstrijden. Heel hartelijk bedankt! ;-)Dit is een tweede deel van mijn vorige Intructable: IoT - een Raspberr
Arduino via internet toegang hebben tot

Arduino via internet toegang hebben tot

Dit instructable is gewoon een poging om je arduino verbinden met internet. Er zijn zoveel vergelijkbaar instructables die je vertellen hoe hetzelfde te doen, dit is iets meer gedetailleerde versie, die ik dacht zou kunnen helpen beginners zoals ik.
Controlerende Intel Edison met aangepaste Android app via Internet.

Controlerende Intel Edison met aangepaste Android app via Internet.

¡Hello iedereen, ik hoop dat dit project zal helpen u om uw eigen Smart Home gecontroleerd door middel van Internet!Het project bestaat in een Smart Home systeem gecontroleerd door middel van Internet door een Android applicatie ontworpen door mij. S
'S werelds eerste afstandsbediening mens via het Internet

'S werelds eerste afstandsbediening mens via het Internet

Ik heb onlangs bestudeerd dit ding heet elektrische spier stimulatie (EMS), die in principe gebruik van elektriciteit maakt te veroorzaken van de spieren om te bewegen. Na het leren over dit besloten heb ik om te nemen in mijn Hackster I.O. project d
Afstandsbediening Raspberry PI GPIO pinnen via internet

Afstandsbediening Raspberry PI GPIO pinnen via internet

Ik moest een manier om in- en uitschakelen enkele zonne-energie lichten thuis.De manier waarop die het werkt is werkelijk eenvoudig en het grote deel is dat u niet hoeft te knoeien met uw firewall naar de haven vooruit de verbinding met je raspberry
Mobiele Garage deuropener via internet

Mobiele Garage deuropener via internet

Mijn garagedeur is een buisvormige motor, met een afstandsbediening-ontvanger in een 433 MHZ. Afstandsbediening batterijen uitgeput worden één dag, maar niet lang nadat vervang ik de batterij, vinden dat de ontvanger van de afstandsbediening is slech
Toto, de afstandsbediening bestuurd hond

Toto, de afstandsbediening bestuurd hond

Hallo daar, kan ik u kennismaken met Toto, de extern gecontroleerde hond. Hij was één van de acteurs van de fase in het 2014 toneelstuk "The Wizard of Oz" in onze Stadsschouwburg. Als zijn naam in plaats van Toto Pinocchio was zouden u misschien
"Als je een fiets via internet koopt, is dit hoe het zal komen"-hoe veilig te monteren een goedkoop, kinder internet fiets.

"Als je een fiets via internet koopt, is dit hoe het zal komen"-hoe veilig te monteren een goedkoop, kinder internet fiets.

Een stap voor stap methode voor het maken van een kind de fiets veilig.Ik was het passeren van een fietswinkel en ik zag dit slimme stukje reclame erop te wijzen hoe moeilijk het is om het monteren van een fiets online bestellen.Ik zie internet bikes
Androïde gebaseerde huisautomatisering via internet en ethernet

Androïde gebaseerde huisautomatisering via internet en ethernet

Dit is een project om bejaarde en gehandicapte mensen te onafhankelijker leven te helpen.Mijn project bieden enkele functies die controleren huistoestellen gebruikend android smartphone via het internet en ook Ethernet. Dat gemiddelde dat ze doen nie
LED afstandsbediening bestuurd kerstboom retrofit

LED afstandsbediening bestuurd kerstboom retrofit

deze kunststof kleine optische vezel verlichte bomen waren populair ongeveer 10 jaar geleden. Ik kocht twee van hen, ongeveer 5 jaar geleden voor ongeveer $10 per stuk te koop bij een designerszaken winkel (B, B & B als herinner).De boekwaarde van de
Het kopen van biodynamische wijnen via Internet

Het kopen van biodynamische wijnen via Internet

Boeren, die ontevreden over de verslechtering van de grond geworden zijn, vond het concept van biodynamische wijnen nogal gunstig. Dit is een wijn die is vervaardigd met behulp van biodynamische landbouw methoden. Dit betekent dat beide methoden voor
DIY Microscoop

DIY Microscoop

dit Project Is een onderdeel van de Afrimakers-gebeurtenis http://www.afrimakers.org/IntroductieHebben we een eenvoudige goedkope webcam gebruikt te maken van een microscoop. Kortom, kunt een kleine hack voor de optica van een standaard webcam met ee
Een relais controle over het Internet via Arduino met Teleduino

Een relais controle over het Internet via Arduino met Teleduino

Relais zijn een oldie maar een goodie. Hiermee kunt u overstappen op een hoge stroom/spanning ladingen met behulp van een digitale uitgang van zoiets als de Arduino.Wat zou een relais nog beter te maken? Hoe zit het beheersen van een relais via inter