Comment utiliser une télécommande pour faire fonctionner le Casque iron-man avec carte arduino nano every

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 :rage:) 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
image

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 :wink:

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.