commutateur-leds-arduino

Commutateur 3 positions, leds, arduino Finalised

Damien Monteillard | Sylvain Philip | Creative Commons BY-NC-SA

Idée du code arduino

Grâce au commutateur et à ses positions, afficher la led (-1, 0, 1) correspondante et pouvoir controler sa couleur.

Elements

Commutateur à cames trois positions

(Position0, Position1, Position2) connecté en digital (20, 21, 22) sur l'arduino mega

3 Leds adressables Neopixel

Elles sont alimentées 5V en parallèle.

Elles sont Branchées sur 3 entrées digitales (LED_1_PIN 28, LED_2_PIN 29, LED_3_PIN 30).

Réslutat obtenu

Arduino

Utiliser la librairie Adafruit NeoPixel

Code arduino


#include "Adafruit_NeoPixel.h"

///////////////////////////////////////////////////////
//////////////////////// Facade ///////////////////////
///////////////////////////////////////////////////////
// Leds adressables : Mini-LED RGBW NeoPixel ADA4776 //
///////////////////////////////////////////////////////
// Puissance des leds en facade
#define PUISSANCE_led_facade_FACADE    5 // Puissance de la led (0 à 255)

const int LED_1_PIN = 28; // fil bleu
const int LED_2_PIN = 29; // fil gris
const int LED_3_PIN = 30; // fil violet

Adafruit_NeoPixel pixel1(1, LED_1_PIN);
Adafruit_NeoPixel pixel2(1, LED_2_PIN);
Adafruit_NeoPixel pixel3(1, LED_3_PIN);

void init_motor()
{
  // Leds facade
  pixel1.begin();
  pixel1.clear();
  pixel1.setBrightness(PUISSANCE_led_facade_FACADE); // ~20% de luminosité
  pixel1.setPixelColor(0, pixel1.Color(0, 0, 0));
  pixel1.show();

  pixel2.begin();
  pixel2.clear();
  pixel2.setBrightness(PUISSANCE_led_facade_FACADE); // ~20% de luminosité
  pixel2.setPixelColor(0, pixel2.Color(255, 122, 0));
  pixel2.show();

  pixel3.begin();
  pixel3.clear();
  pixel3.setBrightness(PUISSANCE_led_facade_FACADE); // ~20% de luminosité
  pixel3.setPixelColor(0, pixel3.Color(0, 0, 0));
  pixel3.show();
}

void startMotor(const int direction, int freq) {
  if (!motorState) {
    motorState = true;
    Serial.print("Démarrage moteur");
    (direction == 1) ? stepDrv.setDirection(DRV8825_CLOCK_WISE) : stepDrv.setDirection(DRV8825_COUNTERCLOCK_WISE);

    pixel2.setPixelColor(0, pixel1.Color(0, 0, 0));

    if (direction == 1) {
      pixel1.setPixelColor(0, pixel1.Color(0, 0, 0));
      pixel3.setPixelColor(0, pixel1.Color(0, 255, 0));
    } else {
      pixel3.setPixelColor(0, pixel3.Color(0, 0, 0));
      pixel1.setPixelColor(0, pixel1.Color(0, 0, 255));
    }
	}

  pixel1.show();
  pixel2.show();
  pixel3.show();
}

void stopMotor()
{
  if (motorState) {
    motorState = false;
    pixel1.setPixelColor(0, pixel1.Color(0, 0, 0));
    pixel2.setPixelColor(0, pixel1.Color(255, 122, 0));
    pixel3.setPixelColor(0, pixel1.Color(0, 0, 0));
  }

  pixel1.show();
  pixel2.show();
  pixel3.show();
}

void setup() {
  Serial.begin(9600);  // Utilise 115200 bauds

  pinMode(FORWARD_PIN, INPUT_PULLUP);
  pinMode(BACKWARD_PIN, INPUT_PULLUP);
  pinMode(OFF_PIN, INPUT_PULLUP);
  init_motor();
}

void loop() {

  // Contrôle du moteur
  if (digitalRead(FORWARD_PIN) == LOW) {
    startMotor(1, 0);
  } else if (digitalRead(BACKWARD_PIN) == LOW) {
    startMotor(-1, 0);
  } else {
    stopMotor();
  }
}