Merci pour votre réponse, le casque est fait et fonctionne, je voulais juste donner une touche de personnalisation, je suis handicapé et j'ai des gros soucis de concentration suite a des accidents de jeunesse, j'ai essayé mais la programmation je n'y arrive pas, merci beaucoup pour toutes vos réponses, cordialement, Pierre
Si tu utilises Chromium (version opensource sans "trop" de mouchards) ou Chrome version officielle Gogole tu fais un clic avec le "Majeur" (je suis gaucher donc vos clics droits sont mes clics gauches
) tu verras apparaitre un menu où tu pourras lire "Traduire cette page".
La traduction est instantanée et de bonne qualité.
Une fois testé, on ne peut plus s'en passer.
merci pour l'info, cordialement Pierre
Bonjour lapierre12
Cette télécommande doit aller, ça doit âtre assez simple d'ajouter cette fonction au programme, je regarde et te redis comment faire.
A+
Cordialement
jpbbricole
Bonjour, merci beaucoup, voici le montage de ma carte Arduino nano, comme ça vous voyez ou je peux ajouter le module ir.
et le fichier ino pour la programmation
mk5_sketch_11-28-2021.ino (5,0 Ko)
Encore merci pour votre aide, bien à vous, Pierre
Bonjour lapierre12
Ce sera sur la pin D3.
Je te mets ça en fin d'après-midi.
A+
Cordialement
jpbbricole
ok, merci beaucoup, bien à vous, Pierre
Bonsoir lapierre12
Voilà, avec un peu de retard, l'intégration de l'interface infrarouge (IR) dans ton programme.
J'ai utilisé la bibliothèque IRLremote.h, qui s'installe par

en recherchant IRLremote.
Les paramètres sont ici:
//------------------------------------- Télécommande IR
CNec IRLremote; // Protocole
const int irReceiverPin = 3; // Pin récepteur infrarouge
const int irWakeUpCode = 0x15; // Touche + en héxadécimal
bool irWakeUpTouche = false;
Actuellement la touche active est la touche + (0x15 déc. 21).
Si tu presses une autre touche, son code s'affichera et tu pourras, ainsi, changer la touche active (irWakeUpCode).
buttonPin est, bien sûre, toujours actif.
J'ai mis des remarques, si ce n'est pas suffisant, n'hésites pas ![]()
Le programme:
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
//#include <IRremote.h> // https://www.arduino.cc/reference/en/libraries/irremote/
#include <IRLremote.h> //https://www.arduino.cc/reference/en/libraries/irlremote/
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define SERVOMIN 150 // This is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX 450 // This is the 'maximum' pulse length count (out of 4096)
#define USMIN 600 // This is the rounded 'minimum' microsecond length based on the minimum pulse of 150
#define USMAX 2400 // This is the rounded 'maximum' microsecond length based on the maximum pulse of 600
#define SERVO_FREQ 50 // Analog servos run at ~50 Hz updates
uint8_t servonum = 0;
int buttonPin = 2;
int ledPin = 6;
int buttonState = 0;
int globalPos = 1;
unsigned long previousMillis = 0;
unsigned long interval = 5000;
int a = 60;
int mainServoL = 0;
int mainServoR = 1;
int mainServoClosed = 5;
int mainServoOpen = 90;
int servoBrowCenter = 4;
int servoBrowCenterOpen = 40;
int servoBrowCenterClosed = 120;
int animDelay = 1;
//------------------------------------- Télécommande IR
CNec IRLremote; // Protocole
const int irReceiverPin = 3; // Pin récepteur infrarouge
const int irWakeUpCode = 0x15; // Touche + en héxadécimal
bool irWakeUpTouche = false;
void setup() {
Serial.begin(9600);
Serial.println("Boot Up");
pwm.begin();
pwm.setOscillatorFrequency(27000000);
pwm.setPWMFreq(SERVO_FREQ);
pinMode(buttonPin, INPUT_PULLUP);
delay(50);
pwm.sleep();
//----------------------------------- Démarrage infrarouge
if (!IRLremote.begin(irReceiverPin))
{
Serial.println(F("IR Mauvaise pin selectionnée ?"));
}
}
int getAngleToPulse(int angle) {
return map(angle, 0, 180, SERVOMIN, SERVOMAX);
}
int getAngleToMilli(int angle) {
return map(angle, 0, 180, USMIN, USMAX);
}
void loop() {
if (IRLremote.available()) // Si réception sur IR
{
auto data = IRLremote.read(); // Lecture de la touche pressée
irWakeUpTouche = false;
if (data.command == irWakeUpCode) // Si la touche est irWakeUpCode
{
irWakeUpTouche = true;
}
else // Si le code n'est pas irWakeUpCode, affichage du code
{
if (data.command != 0)
{
Serial.println("\t\tCode : 0x" + String(data.command, HEX) + "\tdec. " + String(data.command));
}
}
}
buttonState = digitalRead(buttonPin);
if ((buttonState == 0) || (irWakeUpTouche == true)) {
Serial.println("\nWake up");
pwm.wakeup();
if (globalPos > 0) {
Serial.println("Opening");
// CHEEKS
for (uint16_t pulselen = 90; pulselen >= 20; pulselen--) {
pwm.setPWM(9, 0, getAngleToPulse(90 + 20 - pulselen));
pwm.setPWM(8, 0, getAngleToPulse(pulselen));
}
delay(animDelay);
Serial.println("1. Cheeks Open");
// NOSE Side
for (uint16_t pulselen = 86; pulselen >= 10; pulselen--) {
pwm.setPWM(6, 0, getAngleToPulse(86 + 10 - pulselen));
pwm.setPWM(7, 0, getAngleToPulse(pulselen));
}
delay(animDelay);
Serial.println("2. Nose Side Open");
//BROW Center
for (uint16_t pulselen = servoBrowCenterClosed; pulselen >= servoBrowCenterOpen; pulselen--) {
pwm.setPWM(servoBrowCenter, 0, getAngleToPulse(pulselen));
}
delay(animDelay);
Serial.println("3. Brow Center Open");
// BROW Side
for (uint16_t pulselen = 30; pulselen <= 90; pulselen++) {
pwm.setPWM(2, 0, getAngleToPulse(pulselen));
pwm.setPWM(3, 0, getAngleToPulse(30 + 90 - pulselen));
}
delay(animDelay);
Serial.println("4. Brow Side Open");
// NOSE Center
for (uint16_t pulselen = 110; pulselen >= 1; pulselen--) {
pwm.setPWM(5, 0, getAngleToPulse(pulselen));
}
delay(animDelay);
Serial.println("5. Nose Center Open");
// EYES
analogWrite(ledPin, 0);
// MAIN SERVOS
for (uint16_t microsec = 750; microsec < 1950; microsec +=5) {
pwm.writeMicroseconds(mainServoL, microsec);
pwm.writeMicroseconds(mainServoR, (1950+750-microsec));
}
globalPos = 0;
delay(animDelay);
Serial.println("6. Main Open");
//delay(100);
//Serial.println("Sleep");
//pwm.sleep();
} else {
Serial.println("Closing");
//MAIN SERVOS
for (uint16_t microsec = 1950; microsec > 750; microsec-=5) {
pwm.writeMicroseconds(mainServoL, microsec);
pwm.writeMicroseconds(mainServoR, (1950+750-microsec));
}
delay(animDelay);
//NOSE Center
for (uint16_t pulselen = 1; pulselen <= 110; pulselen++) {
pwm.setPWM(5, 0, getAngleToPulse(pulselen));
}
delay(animDelay);
// BROW Side
for (uint16_t pulselen = 90; pulselen >= 30; pulselen--) {
pwm.setPWM(2, 0, getAngleToPulse(pulselen));
pwm.setPWM(3, 0, getAngleToPulse(30 + 90 - pulselen));
}
delay(animDelay);
for (uint16_t pulselen = servoBrowCenterOpen; pulselen <= servoBrowCenterClosed; pulselen++) {
pwm.setPWM(servoBrowCenter, 0, getAngleToPulse(pulselen));
}
delay(animDelay);
// NOSE Side
for (uint16_t pulselen = 10; pulselen <= 86; pulselen++) {
pwm.setPWM(6, 0, getAngleToPulse(86 + 10 - pulselen));
pwm.setPWM(7, 0, getAngleToPulse(pulselen));
}
delay(animDelay);
//CHEEKS
for (uint16_t pulselen = 20; pulselen <= 90; pulselen++) {
pwm.setPWM(9, 0, getAngleToPulse(90 + 20 - pulselen));
pwm.setPWM(8, 0, getAngleToPulse(pulselen));
}
delay(animDelay);
//EYES
analogWrite(ledPin, 255);
globalPos = 1;
delay(100);
Serial.println("Sleep");
pwm.sleep();
}
delay(500);
}
delay(10);
}
Je te souhaite bien du plaisir!
Cordialement
jpbbricole
merci beaucoup normalement je reçoit le module demain, voici le croquis de montage que je penses faire, puis-je utilisé la pin 5v déjà utilisé? qu'en pensez-vous
Cordialement Pierre
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.


