Étape 4: Préparer le programme ARDUINO pour la STATION IR
Ce programme Arduino fonctionne pour la plupart des télécommandes, mais vous devez lui dire sur votre protocole de contrôle à distance de l’info que vous réunis dans l’étape précédente lorsque vous décoder vos boutons de commande à distance à l’aide d’utilitaire de IRrecvDump.
Il est possible de faire la sélection à distance dynamique pendant l’exécution afin que vous n’avez pas à modifier et télécharger code mais pour ce guide je vais garder simple.
Au début du programme Arduino ci-dessous, il y a un certain nombre de lignes commençant par
Numéro de l’étiquette de #define. Changer la valeur numérique pour contrôler le fonctionnement de la Station de IR. Voici une explication des constantes LABEL pertinents.
BITS & CODE de touche de la télécommande
#define REMOTE_CODE votre code à distance comme renvoyé par l’utilitaire de décodeur IRrecvDump le préfixe « 0 x »
#define REMOTE_BIT votre taille de données de code à distance tel que renvoyé par l’utilitaire de décodeur de IRrecvDump.
SEUIL DE VOLUME
#define THRESHOLD_VALUE
Si vous ne prévoyez pas d’utiliser le potentiomètre pour déterminer la valeur de seuil qui sera utilisée pour déclencher la transmission IR, modifiez la valeur THRESHOLD_VALUE pour correspondre à vos besoins. C’est le nombre qui décide à quel moment l’Arduino commence à émettre le code IR, dans notre cas les codes Volume bas IR
INTENSITÉ DE CHANGEMENT DE VOLUME
#define REPEAT_TX (à partir de 1 pour autant que vous voulez. Commencez par 3 puis fine tune)
Changer combien de fois vous voulez le code télécommande IR transmis à la TV ou le dispositif de contrôle à distance. Si vous voulez plus drastique baisse de volume du téléviseur augmenter ce nombre. Si vous voulez un changement progressif plus en volume, réduire ce nombre.
/============================================================================
Vous pouvez copier et coller ce code dans Arduino et transférez-le
/*
PROJET : SensoDuino IR télécommande Station 0.1
PROGRAMMEUR : Hazim Bitar (techbitar.com)
DATE : 25 NOVEMBRE 2013
FICHIER : sensoduino_ir_station.ino (basé sur sensoduino.ino)
LICENCE : domaine Public
*/
#include < IRremote.h >
#define THRESHOLD_VALUE 0 / / Set niveau critique à détecter. Ignorer si le potentiomètre est utilisé
#define REPEAT_TX 3 / / Combien de fois pour transmettre le code de télécommande IR
#define REMOTE_CODE 0x1CE3E817 / / code de télécommande à transmettre pour le volume vers le bas pour ma TV. Remplacez par votre appareil code IR
#define REMOTE_BIT 32
#define LED13 / / LED utilisé à clignoter quand volume trop élevé
IRsend irsend ; instancier objet IR
#define START_CMD_CHAR ' >'
#define END_CMD_CHAR « \n »
#define DIV_CMD_CHAR «, »
#define DEBUG 1 / / la valeur 0 si vous ne voulez pas sortie séquentielle des données des capteurs
InText chaîne ;
flotteur value0, valeur1, valeur2 ; Vars contenant les valeurs de la sonde.
void setup() {}
Cet article recense capteur aider pour les numéros de capteur
Serial.Begin(9600) ; 9600 est la vitesse par défaut de la HC-05 et la plupart des modules Bluetooth serial
Serial.println("\nSensoDuino 0.13 by TechBitar.com (2013).\n") ;
Serial.println ("Android capteur Type non:") ;
Serial.println ("1-accéléromètre (m/s ^ 2 - X, Y, Z)") ;
Serial.println (« 2-MAGNETIC_FIELD (uT - X, Y, Z)") ;
Serial.println ("3-ORIENTATION (lacet, tangage, roulis)") ;
Serial.println (« 4-GYROSCOPE (rad/s - X, Y, Z)") ;
Serial.println ("5-lumière (SI lux)") ;
Serial.println ("6-pression (hPa millibar)") ;
Serial.println ("7-DEVICE TEMPERATURE (C)") ;
Serial.println ("8-proximité (centimètres ou 1,0)") ;
Serial.println ("9-GRAVITY (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 - temps (H, M, S)") ;
Serial.println ("96 - DATE (Y, M, D)") ;
Serial.println ("97 - AUDIO (Vol.)") ;
Serial.println ("98 - GPS1 (lat., long., alt)") ;
Serial.println ("99 - GPS2 (roulement, vitesse, heure/date)") ;
Serial.println ("\n\nNOTE : ignorer les valeurs de 99.99\n\n") ;
Serial.Flush() ;
pinMode (LED, sortie) ;
}
void loop()
{
Serial.Flush() ;
Clearances int = 0 ;
int SensorType% = 0 ;
unsigned long logCount = 0L ;
char getChar = ' ' ; lire la série
attendre pour les données entrantes
Si (Serial.available() < 1) return end si vide de série, retour à loop().
Parse entrant indicateur de début de commande
getChar = Serial.read() ;
Si (getChar! = START_CMD_CHAR) return ; Si aucune commande ne démarrer drapeau, retour à loop().
analyser des entrants broche et valeur
SensorType% = Serial.parseInt() ; lire capteur typr
logCount = Serial.parseInt() ; lire les lectures du capteur connecté total
value0 = Serial.parseFloat() ; 1ère valeur capteur
valeur1 = Serial.parseFloat() ; 2ème capteur valeur si existe
value2 = Serial.parseFloat() ; capteur de 3ème valeur si existe
Voir la sonde et les valeurs des capteurs pour le débogage.
Si {(DEBUG)
Serial.Print ("type de capteur:") ;
Serial.println(sensorType) ;
Serial.Print ("capteur journal #:") ;
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) ;
}
Changer le numéro du capteur pour faire correspondre le senor vous permettant de lire. Voir capteur aide liste ci-dessus.
Si (SensorType%! = 97) return ; Si je ne lis pas les valeurs de capteur Audio, revenir en arrière et continuez à lire.
Lire la valeur du potentiomètre (0-1023) ou assigner VolValue
à la constante THRESHOLD_VALUE si vous ne souhaitez pas utiliser le potentiomètre.
int volValue = analogRead(A5) ;
Étant donné que mon capteur audio sur mon Arduino retourne des valeurs de 0 à 32K j’ai mappera il analogiques min/max
float volLimit = volValue * (32000 / 1023.0) ; 32K est environ max retourné par capteur SensoDuino Audio
int soundLevel = value0 ; Lire le capteur acoustique de SensoDuino (Bluetooth)
if(soundLevel > volLimit) / / comparer à un seuil de bruit potentiomètre.
{
digitalWrite(LED,HIGH) ; lors de la transmission IR allumer LED
Delay(200) ;
pour (int txCount = 0; txCount < REPEAT_TX ; txCount ++) {/ / transmettre le code de télécommande IR
irsend.sendNEC (REMOTE_CODE, REMOTE_BIT) ; Voir liste commentée ci-dessous et remplacer pour correspondre à votre système IR
Delay(200) ;
Décommentez la fonction qui correspond à votre protocole de contrôle à distance comme indiqué par 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) ; une fois terminé le transmetteur IR, éteignez LED
}