Initialisation dépot
This commit is contained in:
@@ -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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include <Servo.h>
|
||||||
|
|
||||||
|
#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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user