commit 33f130d8f328cd916180b5fdd8e431117d7380be Author: Serge NOEL Date: Mon Aug 10 16:39:04 2026 +0200 Initialisation dépot diff --git a/README.fr.md b/README.fr.md new file mode 100644 index 0000000..77c2b92 --- /dev/null +++ b/README.fr.md @@ -0,0 +1,16 @@ +# Helico + +Ce projet consiste à réaliser une animation ferrovière. Il s'agit de piloter un hélicoptere. + +Basé sur un arduino nano, la partie électronique est constituée de : + +- une entrée 'signal' recevant le signal DCC (PIN 2) +- une sortie 'led' qui simule un strobe sur l'hélicoptère +- une sortie 'pwm' permettant de lancer le micro-moteur (pales) +- une sortie 'servo' qui actionne un servo de +100% à -100% pour la montée et descente. + + +Principe, sur réception de commande accessoire DCC : +- Mise en route 'strobe' ON/OFF +- Mise en route 'moteur pale' ON/OFF +- Action sur le servo Up et Down ON/OFF/OFF \ No newline at end of file diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..be81204 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,13 @@ +[env:nanoatmega328] +platform = atmelavr +board = nanoatmega328 +framework = arduino + +build_flags = + -D DCC_SIGNAL_PIN=2 + -D LED_PIN=3 + -D PWM_PIN=5 + -D SERVO_PIN=6 + +lib_deps = + arduino-libraries/Servo@^1.1.9 diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..07079f8 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,42 @@ +#include +#include + +#define DCC_SIGNAL_PIN 2 +#define LED_PIN 3 +#define PWM_PIN 5 +#define SERVO_PIN 6 + +Servo servoMotor; +volatile bool dccSignalReceived = false; + +void IRAM_ATTR handleDccSignal() { + dccSignalReceived = true; +} + +void setup() { + pinMode(DCC_SIGNAL_PIN, INPUT); + pinMode(LED_PIN, OUTPUT); + pinMode(PWM_PIN, OUTPUT); + + servoMotor.attach(SERVO_PIN); + servoMotor.write(90); // position centrale + + attachInterrupt(digitalPinToInterrupt(DCC_SIGNAL_PIN), handleDccSignal, RISING); +} + +void loop() { + if (dccSignalReceived) { + dccSignalReceived = false; + + // TODO: Décoder la commande DCC et piloter les sorties + digitalWrite(LED_PIN, !digitalRead(LED_PIN)); + analogWrite(PWM_PIN, digitalRead(PWM_PIN) ? 0 : 255); + servoMotor.write(0); + delay(250); + servoMotor.write(180); + delay(250); + servoMotor.write(90); + } + + delay(10); +}