From 33f130d8f328cd916180b5fdd8e431117d7380be Mon Sep 17 00:00:00 2001 From: Serge NOEL Date: Mon, 10 Aug 2026 16:39:04 +0200 Subject: [PATCH] =?UTF-8?q?Initialisation=20d=C3=A9pot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.fr.md | 16 ++++++++++++++++ platformio.ini | 13 +++++++++++++ src/main.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 README.fr.md create mode 100644 platformio.ini create mode 100644 src/main.cpp 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); +}