Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********* Pleasedontcode.com **********
- Pleasedontcode thanks you for automatic code generation! Enjoy your code!
- - Terms and Conditions:
- You have a non-exclusive, revocable, worldwide, royalty-free license
- for personal and commercial use. Attribution is optional; modifications
- are allowed, but you're responsible for code maintenance. We're not
- liable for any loss or damage. For full terms,
- please visit pleasedontcode.com/termsandconditions.
- - Project: "LED Sequencer"
- - Source Code NOT compiled for: Arduino Nano
- - Source Code created on: 2024-12-08 21:29:13
- ********* Pleasedontcode.com **********/
- /****** SYSTEM REQUIREMENTS *****/
- /****** SYSTEM REQUIREMENT 1 *****/
- /* Add a multiplexer */
- /****** END SYSTEM REQUIREMENTS *****/
- /* START CODE */
- /****** DEFINITION OF LIBRARIES *****/
- #include "Multiplexer.h" // Include the multiplexer library
- /****** FUNCTION PROTOTYPES *****/
- void setup(void);
- void loop(void);
- // Définition des broches de contrôle S0, S1, S2, S3
- const int S0 = 6; // S0 connecté à la broche D6
- const int S1 = 5; // S1 connecté à la broche D5
- const int S2 = 4; // S2 connecté à la broche D4
- const int S3 = 3; // S3 connecté à la broche D3
- const int SIG = A0; // SIG connecté à la broche A0 (pour lire la sortie du multiplexeur)
- // Définition des broches des boutons, des LEDs, et des boutons de contrôle du séquenceur
- const int buttonPins[] = {0, 1, 2, 3, 4, 5, 6, 7}; // PIN du multiplexeur
- const int ledPins[] = {8, 9, 10, 11, 12, 13, 14, 15}; // PIN du multiplexeur
- const int sequencerButtonPin = 9; // Bouton pour démarrer/arrêter le séquenceur
- const int directionButtonPin = 10; // Bouton pour changer le sens du séquenceur
- const int potPin = A1; // Potentiomètre pour ajuster la vitesse
- // Variables pour stocker l'indice du dernier bouton pressé, du séquenceur, et du sens de défilement
- int lastButtonPressed = -1;
- int currentLed = 0;
- bool forwardDirection = true; // true = avant, false = arrière
- // Variables de délai pour le séquenceur
- unsigned long sequenceDelay = 500; // Initialisé à 500 ms pour 120 BPM
- unsigned long previousMillis = 0;
- // État du séquenceur (true = activé, false = désactivé)
- bool sequencerActive = false;
- bool lastSequencerButtonState = HIGH; // État précédent du bouton de séquenceur
- bool lastDirectionButtonState = HIGH; // État précédent du bouton de direction
- bool sequencerWasActive = false; // Indique si le séquenceur était actif avant l'appui d'un bouton
- // Instantiate the multiplexer object
- Multiplexer mux(S0, S1, S2, S3, SIG);
- void setup(void) {
- // put your setup code here, to run once:
- // Initialisation des broches des LEDs en sortie et des boutons en entrée
- for (int i = 0; i < 8; i++) {
- pinMode(ledPins[i], OUTPUT);
- pinMode(buttonPins[i], INPUT); // Entrée sans pull-up
- }
- pinMode(sequencerButtonPin, INPUT_PULLUP); // Bouton de démarrage/arrêt en pull-up
- pinMode(directionButtonPin, INPUT_PULLUP); // Bouton de changement de sens en pull-up
- }
- void loop(void) {
- // put your main code here, to run repeatedly:
- bool buttonPressed = false;
- // Lecture de la valeur du potentiomètre pour ajuster la vitesse du séquenceur
- int potValue = analogRead(potPin);
- sequenceDelay = map(potValue, 0, 1023, 100, 1000); // Convertit la plage (0-1023) en délai (100-1000 ms)
- // Vérifie l'état du bouton de démarrage/arrêt du séquenceur
- bool sequencerButtonState = digitalRead(sequencerButtonPin);
- if (sequencerButtonState == LOW && lastSequencerButtonState == HIGH) {
- sequencerActive = !sequencerActive; // Bascule l'état du séquenceur
- lastButtonPressed = -1; // Réinitialise l'état des LEDs
- }
- lastSequencerButtonState = sequencerButtonState;
- // Vérifie l'état du bouton de changement de direction
- bool directionButtonState = digitalRead(directionButtonPin);
- if (directionButtonState == LOW && lastDirectionButtonState == HIGH) {
- forwardDirection = !forwardDirection; // Inverse le sens du séquenceur
- }
- lastDirectionButtonState = directionButtonState;
- // Vérifie si un des boutons A0-A3 est pressé
- for (int i = 0; i < 8; i++) {
- if (digitalRead(buttonPins[i]) == HIGH) { // Si le bouton est pressé
- lastButtonPressed = i; // Mémorise le bouton pressé
- buttonPressed = true; // Indique qu'un bouton a été pressé
- if (sequencerActive) {
- sequencerWasActive = true; // Mémorise que le séquenceur était actif
- sequencerActive = false; // Arrête temporairement le séquenceur
- }
- }
- }
- if (buttonPressed) {
- // Allume uniquement la LED du dernier bouton pressé
- for (int i = 0; i < 8; i++) {
- if (i == lastButtonPressed) {
- digitalWrite(ledPins[i], HIGH);
- } else {
- digitalWrite(ledPins[i], LOW);
- }
- }
- } else if (sequencerWasActive) {
- // Si le séquenceur était actif avant l'appui du bouton, réactive le séquenceur après le relâchement
- sequencerActive = true;
- sequencerWasActive = false; // Réinitialise l'indicateur
- }
- // Exécution de la séquence si le séquenceur est activé
- if (sequencerActive) {
- unsigned long currentMillis = millis();
- if (currentMillis - previousMillis >= sequenceDelay) {
- previousMillis = currentMillis;
- // Éteint toutes les LEDs
- for (int i = 0; i < 8; i++) {
- digitalWrite(ledPins[i], LOW);
- }
- // Allume la LED actuelle dans le séquenceur
- digitalWrite(ledPins[currentLed], HIGH);
- // Passe à la LED suivante ou précédente en fonction du sens
- if (forwardDirection) {
- currentLed = (currentLed + 1) % 8; // Avance
- } else {
- currentLed = (currentLed - 1 + 8) % 8; // Recule avec boucle de 0 à 3
- }
- }
- } else if (!buttonPressed) {
- // Si le séquenceur est désactivé et aucun bouton n'est pressé, éteindre toutes les LEDs
- for (int i = 0; i < 8; i++) {
- digitalWrite(ledPins[i], LOW);
- }
- }
- }
- /* END CODE */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement