Stap 4: De ARDUINO programma voorbereiden op het IR-STATION
Dit Arduino-programma werkt voor de meeste afstandsbedieningen, maar je moet het op de hoogte wordt gesteld van uw afstandsbediening-protocol van de info die u in de vorige stap hebt verzameld wanneer u uw knoppen van de afstandsbediening IRrecvDump hulpprogramma gedecodeerd.
Het is mogelijk om de externe selectie dynamisch maken tijdens runtime dus u hoeft niet te wijzigen en code uploaden maar voor deze handleiding zal ik houd het simpel.
Aan het begin van het programma van de Arduino hieronder is er een aantal regels die beginnen met
#define LABEL nummer. Wijzig de waarde om te bepalen hoe het IR-Station werkt. Hier is een uitleg van de relevante LABEL-constanten zijn.
EXTERNE KNOPCODE & bits
#define REMOTE_CODE uw externe code als resultaat wordt gegeven door de IRrecvDump decoderingsorgaan utility voorafgegaan door "0 x"
#define REMOTE_BIT uw gegevensgrootte externe code zoals die wordt geretourneerd door de IRrecvDump decoderingsorgaan utility.
VOLUME NIVEAU DREMPEL
#define THRESHOLD_VALUE
Als u niet gebruik van de potmeter wilt om de drempelwaarde die worden gebruikt voor het activeren van de IR-transmissie, wijzigt u de waarde van de THRESHOLD_VALUE zodat deze overeenkomen met uw wensen. Dit is een getal dat bepaalt op welk punt de Arduino zal beginnen toezending van de IR-code, in ons geval de Volume Down IR-codes
VOLUME VERANDERING INTENSITEIT
#define REPEAT_TX (van 1 tot zoveel als u wilt. Beginnen met 3 dan fine tune)
Wijzigen hoe vaak u wilt dat de externe IR-code doorgegeven aan de TV of extern gecontroleerde apparaat. Als u wilt meer drastische daling in het volume TV vergroten dit nummer. Als u wilt dat een meer geleidelijke verandering in volume, verlaagt dit nummer.
/============================================================================
U kunt kopiëren en plak deze code in de Arduino en uploaden
/*
PROJECT: SensoDuino IR afstandsbediening Station 0.1
PROGRAMMEUR: Hazim Bitar (techbitar.com)
DATUM: 25 NOV 2013
FILE: sensoduino_ir_station.ino (gebaseerd op sensoduino.ino)
LICENTIE: publiek domein
*/
#include < IRremote.h >
#define THRESHOLD_VALUE 0 / / Set kritische niveau te detecteren. Negeren als potentiometer wordt gebruikt
#define REPEAT_TX 3 / / hoe vaak voor het verzenden van de externe IR-code
#define REMOTE_CODE 0x1CE3E817 / / remote code te zenden voor volume naar beneden voor mijn TV. Vervang met uw apparaat IR-code
#define REMOTE_BIT 32
#define LED 13 / / LED gebruikt te knipperen wanneer volume te hoog
IRsend irsend; IR-object instantiëren
#define START_CMD_CHAR ">"
#define END_CMD_CHAR "\n"
#define DIV_CMD_CHAR ","
#define DEBUG 1 / / Set op 0 als u niet dat uitgang voor seriële van sensorgegevens wilt
Tekenreeks inText;
float value0, waarde1, waarde2; Vars met sensor-waardes.
VOID Setup {}
Dit is de lijst van de Help van de Sensor voor sensor nummers
Serial.begin(9600); 9600 is de standaardsnelheid van de HC-05 en meeste Bluetooth seriële modules
Serial.println("\nSensoDuino 0.13 by TechBitar.com (2013).\n");
Serial.println ("Android Sensor Type nr:");
Serial.println ("1-VERSNELLINGSMETER (m/s ^ 2 - X, Y, Z)");
Serial.println ("2-MAGNETIC_FIELD (uT - X, Y, Z)");
Serial.println ("3-oriëntatie (yaw, pitch, roll)");
Serial.println ("4-GYROSCOOP (rad/s - X, Y, Z)");
Serial.println ("5-LIGHT (SI lux)");
Serial.println ("6-PRESSURE (hPa mbar)");
Serial.println ("7-apparaat TEMPERATURE (C)");
Serial.println ("8-nabijheid (centimeter of 1,0)");
Serial.println ("9-ZWAARTEKRACHT (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 - TIME (H, M, S)");
Serial.println ("96 - datum (Y, M, D)");
Serial.println ("97 - AUDIO (Vol.)");
Serial.println ("98 - GPS1 (lat., lang, alt)");
Serial.println ("99 - GPS2 (lager, snelheid, datum/tijd)");
Serial.println ("\n\nNOTE: negeren van waarden van 99.99\n\n");
Serial.Flush();
pinMode (LED, uitvoer);
}
void loop
{
Serial.Flush();
int inCommand = 0;
int sensorType = 0;
unsigned long logCount = 0L;
char getChar = ' '; Lees seriële
wachten voor binnenkomende gegevens
Als (Serial.available() < 1) keren; als seriële leeg, terug naar loop.
parseren van binnenkomende opdracht start vlag
getChar = Serial.read();
Als (getChar! = START_CMD_CHAR) terugkeer; Als geen opdracht vlag start, terug naar loop.
parseren van inkomende pin # en waarde
sensorType = Serial.parseInt(); lezen van sensor typr
logCount = Serial.parseInt(); Lees totale aangemelde sensor lezingen
value0 = Serial.parseFloat(); 1e sensor waarde
waarde1 = Serial.parseFloat(); 2rd sensor waarde als bestaat
waarde2 = Serial.parseFloat(); 3e sensor waarde als bestaat
Sensor en waarden van sensoren voor foutopsporing weergeven.
Als (DEBUG) {}
Serial.Print ("type beeldsensor:");
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);
}
Het nummer van de sensor zodat deze overeenkomen met de senor wijzigen u die te lezen. Zie bovenstaande Sensor Help lijst.
Als (sensorType! = 97) keren; Als I 'm not reading Audio Sensor-waardes, ga terug en blijven lezen.
Luiden naar de waarde van de potentiometer (0-1023) of VolValue toe te wijzen
naar de constante THRESHOLD_VALUE als u niet wilt gebruiken van de potentiometer.
int volValue = analogRead(A5);
Aangezien mijn audio sensor op mijn Arduino geeft als waarden van 0 tot en met 32K resultaat zal ik het toewijzen aan analoge min/max
zweven volLimit = volValue * (32000 / 1023.0); 32K is over max geretourneerd door SensoDuino Audio sensor
int soundLevel = value0; De correcte sensor afgelezen SensoDuino (Bluetooth)
if(soundLevel > volLimit) / / vergelijken met niveau Ruisdrempel potentiometer instellen.
{
digitalWrite(LED,HIGH); tijdens het verzenden van IR inschakelen LED
delay(200);
voor (int txCount = 0; txCount < REPEAT_TX; txCount ++) {/ / overbrengen van het externe IR-code
irsend.sendNEC (REMOTE_CODE, REMOTE_BIT); Zie commentaar hieronder en vervangen aan uw IR-systeem
delay(200);
Uncomment de functie die overeenkomt met uw afstandsbediening-protocol, zoals blijkt uit de 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); Wanneer klaar verzendende IR, uitschakelen LED
}