Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //******************************************************************************************************************************************************************************
- // Le 24/04/2022 fonctionne, à noter toutefois un pic trés bref de vitesse lors du passage de neutre à V1
- // Le ValueDac donne une information analogique en tension destinée à jouer sur le volume sonore du bruitage moteur
- // NE PLUS TOUCHER
- //******************************************************************************************************************************************************************************
- #include "wiring_analog_extras.h" // Librairie permettant de passer à 20Khz la fréquence PWM
- #define BrocheEntreePWM 1 // Broche (2) PB3 entrée impulsion PWM
- #define BrocheSens1 8 // Broche (6) PB1 de la commande 1 du sens du moteur
- #define BrocheSens2 9 // Broche (7) PB2 de la commande 2 du sens du moteur
- #define BrochePWMMoteur 7 // Broche (5) PB0 de la commande PWM du moteur
- #define BrochePresence 2 // Broche (3) PB4 pour signaler la présence du module moteur au module principal
- #define BrocheDAC A0
- #define BrochePWMMoteurInverse 6 // Broche créée de part la nécessité de rajouter un interface à transistor pour adapter le 3.3V Seeeduino vers le L298N
- int accelerationMoteur = 0;
- int selectBoite = 0; // Variable contenant la position courante de la boite de vitesses
- int ValueDAC; // Variable du signal DAC
- int V1Min = 125;
- int V1MinAR = 135;
- int V1Max = 170;
- int V1MaxAR = 150;
- int V2Min = 170;
- int V2Max = 255;
- unsigned long dureeImpulsion = 0; // Valeur de l'impulsion lue sur la broche d'entrée PWM
- void setup()
- {
- analogReadResolution(10); // Spécification résolution à utiliser pour la lecture ANA
- analogWriteResolution(10);
- analogWrite(BrocheDAC, 0);
- pinMode(BrocheEntreePWM, INPUT_PULLUP); // Configuration de la broche en entrée
- pinMode(BrocheSens1, OUTPUT); // Configuration des ports en Sorties
- pinMode(BrocheSens2, OUTPUT);
- pinMode(BrochePWMMoteur, OUTPUT);
- pinMode(BrochePWMMoteurInverse, OUTPUT); // Broche pour signal complémentaire à celui de BrochePWMMoteur
- pinMode(BrochePresence, OUTPUT);
- digitalWrite(BrochePresence, HIGH); // Signale la présence de ce module au module principal
- digitalWrite(BrocheSens1, LOW); // Initialisation des relais du moteur
- digitalWrite(BrocheSens2, LOW);
- digitalWrite(BrochePWMMoteur, 0); // Initialisation de la PWM du moteur
- digitalWrite(BrochePWMMoteurInverse, 255); // Idem ci-dessus mais inversé
- delay (1000);
- }
- void loop()
- {
- //*************************************************************************************************************************************************************************
- noInterrupts();
- dureeImpulsion = pulseIn(BrocheEntreePWM, HIGH); // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Lecture de la durée d'impulsion du signal PWM envoyé par le module principal
- interrupts();
- if (dureeImpulsion > 2032) {dureeImpulsion = 2032;} // Borne la durée d'impulsion
- //*************************************************************************************************************************************************************************
- if (dureeImpulsion >= 23 && dureeImpulsion <= 53 && selectBoite != 0) // ++++++++++++++++++++++++++++++++++++++++++++ // Sélection Boite = Stop
- {
- selectBoite = 0; // Mémorise la position de la boite de vitesses
- accelerationMoteur = 0;
- digitalWrite(BrocheSens1, HIGH); // Positionne l'inverseur pour un freinage
- digitalWrite(BrocheSens2, HIGH);
- analogWrite(BrocheDAC, 0);
- analogWrite20kHz(BrochePWMMoteur, 0);
- analogWrite20kHz(BrochePWMMoteurInverse, 255 - 0); // Complément de BrochePWMMoteur
- }
- else if (dureeImpulsion >= 180 && dureeImpulsion <= 210 && selectBoite != 20) // ------------------------------------ // Sélection Boite = Neutre
- {
- delay (50);
- selectBoite = 20; // Mémorise la position de la boite de vitesses
- accelerationMoteur = 0;
- analogWrite(BrocheDAC, 0);
- analogWrite20kHz(BrochePWMMoteur, 0); // PWM Moteur = 0
- analogWrite20kHz(BrochePWMMoteurInverse, 255 - 0);
- digitalWrite(BrocheSens1, LOW); // Positionne l'inverseur au repos
- digitalWrite(BrocheSens2, LOW);
- delay (100);
- }
- else if (dureeImpulsion >= 340 && dureeImpulsion <= 370 && selectBoite != 30) // ------------------------------------ // Sélection Boite = Vitesse 1
- {
- accelerationMoteur = 0;
- delay (50);
- selectBoite = 30; // Mémorise la position de la boite de vitesses
- delay (100);
- analogWrite(BrocheDAC, 0);
- analogWrite20kHz(BrochePWMMoteur, 0); // PWM Moteur = 0
- analogWrite20kHz(BrochePWMMoteurInverse, 255 - 0);
- digitalWrite(BrocheSens1, HIGH); // Positionne l'inverseur pour une marche avant
- digitalWrite(BrocheSens2, LOW);
- }
- else if (dureeImpulsion >= 500 && dureeImpulsion <= 530 && selectBoite != 40) // ------------------------------------ // Sélection Boite = Vitesse 2
- {
- selectBoite = 40; // Mémorise la position de la boite de vitesses
- analogWrite(BrocheDAC, 0);
- analogWrite20kHz(BrochePWMMoteur, 0); // PWM Moteur = 0
- analogWrite20kHz(BrochePWMMoteurInverse, 255 - 0);
- digitalWrite(BrocheSens1, HIGH); // Positionne l'inverseur pour une marche avant
- digitalWrite(BrocheSens2, LOW);
- }
- else if (dureeImpulsion >= 660 && dureeImpulsion <= 700 && selectBoite != 50) // ------------------------------------ // Sélection Boite = Marche Arrière
- {
- selectBoite = 50; // Mémorise la position de la boite de vitesses
- analogWrite(BrocheDAC, 0);
- analogWrite20kHz(BrochePWMMoteur, 0); // PWM Moteur = 0
- analogWrite20kHz(BrochePWMMoteurInverse, 255 - 0);
- digitalWrite(BrocheSens1, LOW); // Positionne l'inverseur pour une marche arrière
- digitalWrite(BrocheSens2, HIGH);
- }
- //*************************************************************************************************************************************************************************
- if (selectBoite == 30 || selectBoite == 40 || selectBoite == 50) // +++++++++++++++++++++++++++++++++++++++++++++++++ // Active ou désactive la PWM moteur
- {
- if (selectBoite == 30) // ----------------------------------------------------------------------------------------- / Accélération en Vitesse 1
- {
- accelerationMoteur = map(dureeImpulsion, 943, 2032, V1Max,V1Min); // Convertit l'impulsion reçue en accélération de 118 à 150
- ValueDAC = map(dureeImpulsion, 943, 2032, (V1Max*1023/255),(V1Min*1023/255));
- analogWrite(BrocheDAC, ValueDAC);
- if (accelerationMoteur <= V1Min) {accelerationMoteur = 0;}
- analogWrite20kHz(BrochePWMMoteur, accelerationMoteur); // Active la PWM moteur en fonction de la valeur reçue
- analogWrite20kHz(BrochePWMMoteurInverse, 255 - accelerationMoteur);
- }
- else if (selectBoite == 40) // ------------------------------------------------------------------------------------ // Accélération en Vitesse 2
- {
- accelerationMoteur = map(dureeImpulsion, 943, 2032, V2Max, V2Min); // Convertit l'impulsion reçue en accélération de 118 à 255
- ValueDAC = map(dureeImpulsion, 943, 2032, (V2Max*1023/255),(V2Min*1023/255));
- analogWrite(BrocheDAC, ValueDAC);
- if (accelerationMoteur <= V2Min) {accelerationMoteur = 0;}
- analogWrite20kHz(BrochePWMMoteur, accelerationMoteur); // Active la PWM moteur en fonction de la valeur reçue
- analogWrite20kHz(BrochePWMMoteurInverse, 255 - accelerationMoteur);
- }
- else if (selectBoite == 50) // ------------------------------------------------------------------------------------ // Accélération en Marche Arrière
- {
- accelerationMoteur = map(dureeImpulsion, 943, 2032, V1MaxAR, V1MinAR); // Convertit l'impulsion reçue en accélération de 126 à 150
- ValueDAC = map(dureeImpulsion, 943, 2032, (V1MaxAR*1023/255),(V1MinAR*1023/255));
- analogWrite(BrocheDAC, ValueDAC);
- if (accelerationMoteur <= V1MinAR) {accelerationMoteur = 0;}
- analogWrite20kHz(BrochePWMMoteur, accelerationMoteur); // Active la PWM moteur en fonction de la valeur reçue
- analogWrite20kHz(BrochePWMMoteurInverse, 255 -accelerationMoteur);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment