IR-fjärrkontrollen posterar för Android - Sänk TV (4 / 4 steg)
Steg 4: Förbereda ARDUINO programmet för IR-STATIONEN
Arduino programmet fungerar för de flesta fjärrkontroller men du måste berätta det om din fjärrkontroll protokollet från den information du samlat i föregående steg när du avkodas din fjärrkontrollens knappar användande IRrecvDump nytta.
Det är möjligt att göra remote val dynamiskt under körning så du inte behöver ändra och ladda upp koden men för denna guide kommer jag hålla det enkelt.
I början av Arduino programmet nedan finns ett antal rader som börjar med
#define ETIKETTNUMRET. Ändra värdet för att styra hur IR-stationen fungerar. Här är en förklaring av de relevanta etikett konstanterna.
FJÄRR-KNAPPKOD och BIT
#define REMOTE_CODE din kod som returneras av verktyget IRrecvDump dekoder prefixet "0 x"
#define REMOTE_BIT din kod-datastorleken som returneras av verktyget IRrecvDump dekoder.
VOLYM NIVÅ TRÖSKEL
#define THRESHOLD_VALUE
Om du inte planerar att potentiometern för att fastställa tröskelvärden som används för att utlösa IR överföringen, ändra värdet THRESHOLD_VALUE för att matcha dina krav. Detta är det nummer som avgör vid vilken punkt Arduino börjar överföra IR koden, i vårt fall de volym ner IR-koderna
VOLYMEN ÄNDRA INTENSITET
#define REPEAT_TX (från 1 till så många du vill. Börja med 3 då fin melodi)
Ändra hur många gånger du vill ha den IR kod överförs till TV eller remote device som kontrolleras. Om du vill ha mer drastiska nedgång i TV-volymen öka detta antal. Om du vill ha en mer gradvis förändring i volym, lägre detta nummer.
/============================================================================
Du kan kopiera & klistra in denna kod på Arduino och ladda upp den
/*
PROJEKT: SensoDuino IR fjärrkontroll Station 0.1
PROGRAMMERARE: Hazim Bitar (techbitar.com)
DATUM: 25 NOV 2013
Fil: sensoduino_ir_station.ino (baserat på sensoduino.ino)
LICENS: Public domain
*/
#include < IRremote.h >
#define THRESHOLD_VALUE 0 / / Ställ kritiska nivån att upptäcka. Ignorera om potentiometer används
#define REPEAT_TX 3 / / hur många gånger överföra IR remote koden
#define REMOTE_CODE 0x1CE3E817 / / remote kod överföra för volym ner för min TV. Ersätt med enheten IR-kod
#define REMOTE_BIT 32
#define LED 13 / / LED används blinka när volymen för hög
IRsend irsend; instansiera IR-objekt
#define START_CMD_CHAR ' >'
#define END_CMD_CHAR "\n"
#define DIV_CMD_CHAR ','
#define DEBUG 1 / / Set till 0 om du inte vill seriella produktionen av sensordata
Sträng inText;
float value0, värde1, värde2; vars som innehåller sensorn värden.
void setup() {
Detta är en Sensor hjälpa lista för sensor nummer
Serial.BEGIN(9600); 9600 är standardhastighet HC-05 och de flesta seriella Bluetooth-moduler
Serial.println("\nSensoDuino 0.13 by TechBitar.com (2013).\n");
Serial.println ("Android Sensor typ nr:");
Serial.println ("1-ACCELEROMETER (m/s ^ 2 - X, Y, Z)");
Serial.println ("2-MAGNETIC_FIELD (uT - X, Y, Z)");
Serial.println ("3-läggning (gir, pitch, roll)").
Serial.println ("4-GYROSKOP (rad/s - X, Y, Z)");
Serial.println ("5-ljus (SI lux)");
Serial.println ("6-pressa (hPa millibar)");
Serial.println ("7-enhet TEMPERATURE (C)");
Serial.println ("8-närhet (centimeter eller 1,0)");
Serial.println ("9-gravitation (m/s ^ 2 - X, Y, Z)");
Serial.println ("10-LINEAR_ACCELERATION (m/s ^ 2 - X, Y, Z)");
Serial.println ("11-ROTATION_VECTOR (X, Y, Z)");
Serial.println ("12-RELATIVE_HUMIDITY (%)");
Serial.println ("13-AMBIENT_TEMPERATURE (C)");
Serial.println ("14-MAGNETIC_FIELD_UNCALIBRATED (uT - X, Y, Z)");
Serial.println ("15-GAME_ROTATION_VECTOR (X, Y, Z)");
Serial.println ("16-GYROSCOPE_UNCALIBRATED (rad/s - X, Y, Z)");
Serial.println ("17-SIGNIFICANT_MOTION (1,0)");
Serial.println ("95 - tid (H, M, S)");
Serial.println ("96 - datum (Y, M, D)");
Serial.println ("97 - ljud (Vol.)");
Serial.println ("98 - GPS1 (lat., long., alt)");
Serial.println ("99 - GPS2 (uthärda, hastighet, datum/tid)");
Serial.println ("\n\nNotera: ignorerar värden av 99.99\n\n");
Serial.flush();
pinMode (LED, OUTPUT);
}
void loop()
{
Serial.flush();
int inCommand = 0;
int sensorType = 0;
osignerade långa logCount = 0L;
char getChar = ""; Läs följetong
vänta på inkommande data
om (Serial.available() < 1) återvända; om seriell tomma, tillbaka till loop().
tolka inkommande kommandot start flagga
getChar = Serial.read();
om (getChar! = START_CMD_CHAR) återvända; om inget kommando startar flagga, tillbaka till loop().
tolka inkommande pin # och värde
sensorType = Serial.parseInt(); Läs sensor typr
logCount = Serial.parseInt(); Läs totala loggade sensormätningar
value0 = Serial.parseFloat(); 1. sensor värde
värde1 = Serial.parseFloat(); 2rd sensor värde om det finns
value2 = Serial.parseFloat(); 3. sensor värde om det finns
Visa sensor och värden av sensorer för felsökning.
om (DEBUG) {
Serial.Print ("sensortyp:");
Serial.println(sensorType);
Serial.Print ("Sensor log #:");
Serial.println(logCount);
Serial.Print ("Val [0]:");
Serial.println(value0);
Serial.Print ("Val [1]:");
Serial.println(value1);
Serial.Print ("Val [2]:");
Serial.println(value2);
Serial.println("---");
Delay(10);
}
Ändra numret sensor för att matcha senor du som att läsa. Se Sensor hjälp listan ovan.
om (sensorType! = 97) återvända; Om jag inte läser Audio Sensor värden, gå tillbaka och fortsätta läsa.
Läsa värdet potentiometer (0-1023) eller tilldela VolValue
att konstant THRESHOLD_VALUE om du inte vill använda potentiometern.
int volValue = analogRead(A5);
Eftersom min audio sensor på min Arduino returnerar värden från 0 till 32K kommer jag mappa den till analoga min/max
flyta volLimit = volValue * (32000 / 1023.0); 32K handlar om max som returneras av SensoDuino Audio sensor
int ljudnivå = value0; Läsa ljud sensorn från SensoDuino (Bluetooth)
IF(soundLevel > volLimit) / / jämför med brus nivå gräns som sätts av potentiometer.
{
digitalWrite(LED,HIGH); samtidigt överföra IR aktivera LED
Delay(200);
för (int txCount = 0; txCount < REPEAT_TX; txCount ++) {/ / överföra IR remote koden
irsend.sendNEC (REMOTE_CODE, REMOTE_BIT); Se kommenterade listan nedan och ersätt att matcha ditt IR system
Delay(200);
Avkommentera den funktion som matchar din fjärrkontroll protokoll framgår av IRrecvDump
irsend.sendNEC (REMOTE_CODE, REMOTE_BIT);
irsend.sendSony (REMOTE_CODE, REMOTE_BIT);
irsend.sendRC5 (REMOTE_CODE, REMOTE_BIT);
irsend.sendRC6 (REMOTE_CODE, REMOTE_BIT);
}
}
digitalWrite(LED,LOW); När gjort överförande IR, stänga LED av
}