Hello,
Comme je n'ai pas, dans mes tiroirs, de module récepteur comme celui de Christian, je suis allé a la déchetterie en prélever un sur le 1er téléviseur venu.
Bon, c'est pas tout a fait pareil, c'est d'une plus vieille technologie car l'électronique est sur un petit CI sous le récepteur mais ca fonctionne de la même manière, sur la même fréquence (c'est un HC 337M, doc
ICI )
J'ai également choisi d'utiliser une petite télécommande genre celle d'une camera, du coup, les codes ne sont pas les mêmes... j'ai donc encore une fois modifié un peu le code de Christian pour déclarer en début de programme les codes qui vont bien et modifié le petit bout de programme qui les utilise.
En revanche, j'ai eu plus de soucis avec le fontionnement proprement dit; Alors que sur le petit bout de test que j'ai extrait du programme principal pour debugguer le capteur tout fonctionne comme prévu, une fois réintégré dans Stepduino ca n'allait plus du tout;
des ordres passaient sans arret.... la cause probable est la durée de la boucle totale qui est trop longue et de durée variable selon le chemin, que mon capteur est parasité car j'ai oté le blindage (je suis trop curieux) et que l'ensemble produit des faux ordres. J'ai donc modifié un peut tout ca aussi et j'en ai profité pour intégrer le repeat des touches up et down pour faire avancer/reculer le moteur dans la recherche du second point de la course a effectuer avec la télécommande.
Le code du test du recepteur qui fonctionne tel quel, mais qui, une fois reporté dans Stepduino débloque pas mal :
- Code: Tout sélectionner
#include <IRremote.h>
int RECV_PIN = 7;
int PinBuzzer = 8; // Buzzer
IRrecv irrecv(RECV_PIN);
decode_results results;
int lcd_key = -1; // key Joystick
//Code de la télécomman,de IR
// Pour préciser qu'un nombre est codé en hexa, ajouter "Ox" avant le nombre
const long IrOK = 0xFF9867;
const long IrUp =0xFFA857;
const long IrDwn =0xFF18E7;
const long IrLeft =0xFF6897;
const long IrRight =0xFFB04F;
const long IrShoot =0xFFE21D;
// key Joystick
const int btnRIGHT = 0;
const int btnUP = 1;
const int btnDOWN = 2;
const int btnLEFT = 3;
const int btnSELECT = 4;
const int btnShoot=5;
void setup()
{
Serial.begin(115200);
irrecv.enableIRIn(); // Démarre de récepteur
pinMode(PinBuzzer, OUTPUT);
//P'tite mélodie de mise en route
buzz(PinBuzzer, 2500, 25); // Bip
delay(100);
buzz(PinBuzzer, 2000, 25); // Bip
delay(100);
buzz(PinBuzzer, 2200, 25); // Bip
delay(100);
buzz(PinBuzzer, 2500, 25); // Bip
delay(100); // délai supplémentaire pour capter un ordre de télécommande
}
void loop() {
if (irrecv.decode(&results)) {
buzz(PinBuzzer, 2000, 25); // Bip
delay(100);
Serial.println(results.value, HEX);
switch (results.value)
{
case IrUp:
lcd_key = btnUP; // bt.2
break;
case IrDwn:
lcd_key = btnDOWN; // bt.8
break;
case IrLeft:
lcd_key = btnLEFT; // bt.4
break;
case IrRight:
lcd_key = btnRIGHT; // bt.6
break;
case IrOK:
lcd_key = btnSELECT; // bt.5
break;
case IrShoot:
lcd_key = btnShoot; // bt.0
break;
default:
lcd_key = 999;
}
Serial.println(lcd_key);
irrecv.resume(); // Receive the next value
}
}
// Buzz (remplace TONE qui crée des conflits avec la librairie IR a cause de l'utilisation commune du timer2)
void buzz(int targetPin, long frequency, long length) {
long delayValue = 1000000/frequency/2; // Calcul de la demie-période du signal
// en microsecondes
long numCycles = frequency * length/ 1000; // calcul du nombre de périodes
//// par rapport a la durée demandée (en millisecondes)
for (long i=0; i < numCycles; i++)
{
digitalWrite(targetPin,HIGH); // pousse le piezzo
delayMicroseconds(delayValue); // pendant une demie-période
digitalWrite(targetPin,LOW); // relâche le piezzo
delayMicroseconds(delayValue); // pendant une demie-période
}
}
J'en ai assez des potentats d'une gauche qui se croit bienpensante et qui conduit notre pays a sa perte.