Advertisement
claudiusmarius

Untitled

Oct 16th, 2022
1,091
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 18.11 KB | Software | 0 0
  1. // Le 27/07/2022 début de la migration pour utiliser le PCB BELEN MUSIC BOX
  2. // Le 27/07/2022 OK fonctionne sur les fonctions principales
  3. // Le 27/07/2022 17H40 OK fonctionne avec 2 Touch supplémentaires : "BPPause" restart et "BPMosfetGate" : mise à zéro de la sortie 5 destinée infine à forir de la puissance au Neopixel
  4. // Restera à mettre une valeur fixe pour Outime ==>FAIT
  5. // Le 29/07/2022 13H43 : Réglage des Beeps OK
  6. // Le 29/07/2022 18H40 : Essai en cours infructueux de faire correspondre un DAC avec un Appui sur Touch
  7. // Le 30/07/2022 17H40 : Les DACs correspondent, quelques valeurs parasites subisistent, il faudra les rendre inoffensives, reste encore une petite anomalie sur Qt1
  8. // Le 12/08/2022 14H49 : Plus de problème "Touch" le support en bois a été remplacé par un système en PVC
  9. // Le 12/08/2022 21H06 : Tentative sans succés de mémoriser la teinte
  10. // Le 13/08/2022 11H26 : Recherche du pourquoi "Chroma plus" lors de l'arrêt automatique
  11. // Le 13/08/2022 11H33 : Résolu par modification de la valeur DAC de 186 à 744
  12. // Le 13/08/2022 16H25 : Résolu le chroma + et le chroma - qui comptaient dans le mauvais sens. Arrêt dans le prochaine version des recherches de mise en EEPROM de la teinte (irrésolu).
  13. // Le 13/08/2022 17H13 : Mise en place d'une butée descente et montée sur teinte chromatique, 2 nouveaux messages à venir
  14. // *************************************************************************************************************************************
  15. #include <Adafruit_NeoPixel.h>                                    // Librairie pour la gestion des LED RGB NeoPixel de l'Objet NeoPixel
  16. #include "Adafruit_FreeTouch.h"
  17.  
  18. Adafruit_FreeTouch qt_1 = Adafruit_FreeTouch(A8, OVERSAMPLE_4, RESISTOR_20K, FREQ_MODE_NONE);     // UpChroma
  19. Adafruit_FreeTouch qt_2 = Adafruit_FreeTouch(A9, OVERSAMPLE_4, RESISTOR_20K, FREQ_MODE_NONE);     // DownChroma
  20.  
  21. Adafruit_FreeTouch qt_4 = Adafruit_FreeTouch(A7, OVERSAMPLE_4, RESISTOR_20K, FREQ_MODE_NONE);     // RESET (coupure lumière)
  22. Adafruit_FreeTouch qt_3 = Adafruit_FreeTouch(A10, OVERSAMPLE_4, RESISTOR_20K, FREQ_MODE_NONE);    // VccCoupure
  23.  
  24.  
  25. //#define BrocheDAC A0
  26. int ValueDAC = 0;
  27.  
  28. #define BrochePotarLuminosite             A4
  29.  
  30. #define BrocheBuzzer                      1
  31. #define BrocheDELPlusTeinteChroma         2
  32. #define BrocheDELMoinsTeinteChroma        3
  33. #define BrocheSortieActivationVcc         5
  34.  
  35. #define BrocheObjetNeopixel               6
  36.  
  37.  
  38. int EtatTouchActivationVcc = HIGH;
  39. int EtatTouchActivationReset = HIGH;
  40. unsigned long interval = 2000000;
  41. bool Outtime = false;
  42.  
  43. const int nombreLEDObjetNeopixel = 8;     // Nombre de LED RGB NeoPixel de l'Objet NeoPixel
  44.  
  45. int LuminositeCourante = 20;              // Valeur de la luminosité courante de l'Objet NeoPixel (entre 0 et 255)
  46. int ValeurANALuminositeLue = 0;           // Valeur analogique lue sur l'entrée du potentiomètre de réglage de la luminosité (entre 0 et 1023)
  47.  
  48. long PasCourant = 0;                      // Valeur du pas courant de déplacement lors du parcours les valeurs des teintes de la roue chromatique
  49. int ValeurANAPasLue = 0;                  // Valeur analogique lue sur l'entrée du potentiomètre de réglage du pas (entre 0 et 1023)
  50.  
  51. bool EtatBPPlusTeinteChroma = LOW;        // Etat courant du bouton poussoir "BPPlusTeinteChroma"
  52. bool EtatBPMoinsTeinteChroma = LOW;
  53.  
  54. //long TeinteRoueChromatique =65535;
  55.  
  56. long TeinteRoueChromatique = 32768;          // Valeur de la teinte courante de la roue chromatique
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63. //long TeinteRoueChromatique =16384;
  64.  
  65. //long TeinteRoueChromatique =8192;
  66.  
  67. //long TeinteRoueChromatique =4096;
  68.  
  69. //long TeinteRoueChromatique =2048;
  70.  
  71. //long TeinteRoueChromatique =1024;
  72.  
  73. //long TeinteRoueChromatique =512;
  74.  
  75. //long TeinteRoueChromatique =1;
  76.  
  77.  
  78.  
  79. Adafruit_NeoPixel ObjetNeopixel(nombreLEDObjetNeopixel, BrocheObjetNeopixel, NEO_GRB + NEO_KHZ800);     // Crée l'objet "ObjetNeopixel"
  80.  
  81. void setup()
  82. {
  83.   Serial.begin(115200);
  84.   pinMode (A0, INPUT);                                              // Artifice pour ne pas envoyer de tension aléatoire
  85.  
  86.   delay(10);
  87.   analogReadResolution(10);                                        // Spécification résolution à utiliser pour la lecture ANA
  88.   analogWriteResolution(10);                                       // Spécification résolution à utiliser pour l'écriture ANA (DAC)
  89.  
  90.   delay(2);
  91.  
  92.   SerialUSB.begin(115200);
  93.   if (! qt_1.begin())
  94.     SerialUSB.println("Failed to begin qt on pin A8");
  95.   if (! qt_2.begin())
  96.     SerialUSB.println("Failed to begin qt on pin A9");
  97.  
  98.   if (! qt_3.begin())
  99.     SerialUSB.println("Failed to begin qt on pin A7");
  100.   if (! qt_4.begin())
  101.     SerialUSB.println("Failed to begin qt on pin A10");
  102.  
  103.   pinMode (BrocheDELPlusTeinteChroma, OUTPUT);
  104.   pinMode (BrocheDELMoinsTeinteChroma, OUTPUT);
  105.  
  106.   pinMode (BrocheSortieActivationVcc, OUTPUT);
  107.   pinMode (BrocheBuzzer, OUTPUT);
  108.  
  109. #define BrocheDAC A0
  110.   ValueDAC = 527;
  111.   analogWrite(BrocheDAC, ValueDAC);
  112.   delay(2000);
  113.   //delay(100);
  114.  
  115.   digitalWrite (BrocheSortieActivationVcc, HIGH);
  116.   delay(10);
  117.  
  118.   ValueDAC = 527;
  119.   analogWrite(BrocheDAC, ValueDAC);
  120.   delay(2000);
  121.   // delay(100);
  122.   //Buzzer(50, 120, 5);
  123.  
  124.   ObjetNeopixel.begin();                                  // Démarre la librairie NeoPixel pour la gestion des LED RGB NeoPixel de l'Objet NeoPixel
  125.   ObjetNeopixel.show();                                                       // Eteint toutes les LED RGB NeoPixel de l'Objet NeoPixel
  126.   ObjetNeopixel.setBrightness(LuminositeCourante);        // Définit la luminosité courante des LED RGB NeoPixel de l'Objet NeoPixel
  127.  
  128.   delay(10);                                              // Temporise 10 millisecondes
  129.  
  130.   //interval = interval + millis();
  131.  
  132.  
  133.  
  134.   delay(5);
  135. }
  136. void loop()
  137. {
  138.  
  139.   /* if (analogRead (BrocheDAC) < 160)
  140.     {
  141.     analogWrite(BrocheDAC, 5);
  142.     //delay(100);
  143.     }*/
  144.   Serial.print ("TEINTE :  ");
  145.   Serial.println (TeinteRoueChromatique);
  146.   if ((millis() >= interval) && digitalRead (BrocheSortieActivationVcc) == HIGH)                   // Outime false permet de n'actionner la tempo qu'une fois parmi tous les cycles
  147.   {
  148.     Buzzer(130, 200, 8);
  149.     //ValueDAC = 186;
  150.     ValueDAC = 744;
  151.     delay (10);
  152.     analogWrite(BrocheDAC, ValueDAC);                                                     // Activation MSG01 : Arrêt en cours
  153.     delay (2000);
  154.     digitalWrite (BrocheSortieActivationVcc, LOW);
  155.     EtatTouchActivationVcc = LOW;
  156.     delay (10);
  157.     interval = interval + millis();
  158.     Outtime = false;
  159.   }
  160.  
  161.   int qt1_Threshold = 750;
  162.   int qt2_Threshold = 700;
  163.   int qt3_Threshold = 700;
  164.   int qt4_Threshold = 700;
  165.  
  166.   /*int qt1_Threshold = 800;
  167.     int qt2_Threshold = 800;
  168.     int qt3_Threshold = 800;
  169.     int qt4_Threshold = 800;*/
  170.  
  171.   /*int qt1_Threshold = 790;
  172.     int qt2_Threshold = 820;
  173.     int qt3_Threshold = 800;
  174.     int qt4_Threshold = 800;*/
  175.  
  176.   digitalWrite(LED_BUILTIN, HIGH);
  177.   int qt1 = 0;
  178.   int qt2 = 0;
  179.   int qt3 = 0;
  180.   int qt4 = 0;
  181.  
  182.   qt1 = qt_1.measure();
  183.   qt2 = qt_2.measure();
  184.   qt3 = qt_3.measure();
  185.   qt4 = qt_4.measure();
  186.  
  187.   if (qt1 >= qt1_Threshold)
  188.   {
  189.     digitalWrite (BrocheDELPlusTeinteChroma, HIGH);                                                          // Activation MSG02 : Chroma Plus
  190.   }
  191.   else
  192.   {
  193.     digitalWrite (BrocheDELPlusTeinteChroma, LOW);
  194.   }
  195.   //delay(10);
  196.  
  197.   if (qt2 >= qt2_Threshold)
  198.   {
  199.     digitalWrite (BrocheDELMoinsTeinteChroma, HIGH);                                                        // Activation MSG03 : Chroma Moins
  200.   }
  201.   else
  202.   {
  203.     digitalWrite (BrocheDELMoinsTeinteChroma, LOW);
  204.   }
  205.  
  206.   if (digitalRead(BrocheDELPlusTeinteChroma) == HIGH && digitalRead(BrocheDELMoinsTeinteChroma) == LOW && digitalRead (BrocheSortieActivationVcc) == HIGH)
  207.   {
  208.     ValueDAC = 279;
  209.     analogWrite(BrocheDAC, ValueDAC);
  210.     //delay(5);
  211.   }
  212.  
  213.   if (digitalRead(BrocheDELPlusTeinteChroma) == HIGH && digitalRead(BrocheDELMoinsTeinteChroma) == LOW && digitalRead (BrocheSortieActivationVcc) == LOW)
  214.   {
  215.     ValueDAC = 837;
  216.     analogWrite(BrocheDAC, ValueDAC);
  217.     //delay(5);
  218.   }
  219.  
  220.  
  221.  
  222.   /*if (analogRead (BrocheDAC) < 160)
  223.     {
  224.     analogWrite(BrocheDAC, 0);
  225.     //delay(5);
  226.     }*/
  227.  
  228.   if (digitalRead(BrocheDELPlusTeinteChroma) == LOW && digitalRead(BrocheDELMoinsTeinteChroma) == LOW)
  229.   {
  230.     ValueDAC = 0;
  231.     analogWrite(BrocheDAC, ValueDAC);
  232.     //delay(5);
  233.   }
  234.  
  235.   /*if (analogRead (BrocheDAC) < 160)
  236.     {
  237.     analogWrite(BrocheDAC, 0);
  238.     //delay(5);
  239.     }*/
  240.  
  241.   //if (digitalRead(BrocheDELMoinsTeinteChroma)==HIGH && digitalRead(BrocheDELPlusTeinteChroma)==LOW)
  242.   if (digitalRead(BrocheDELMoinsTeinteChroma) == HIGH && digitalRead(BrocheDELPlusTeinteChroma) == LOW && digitalRead (BrocheSortieActivationVcc) == HIGH)
  243.   {
  244.     ValueDAC = 434;
  245.     analogWrite(BrocheDAC, ValueDAC);
  246.     //delay(5);
  247.   }
  248.  
  249.   if (digitalRead(BrocheDELMoinsTeinteChroma) == HIGH && digitalRead(BrocheDELPlusTeinteChroma) == LOW && digitalRead (BrocheSortieActivationVcc) == LOW)
  250.   {
  251.     ValueDAC = 837;
  252.     analogWrite(BrocheDAC, ValueDAC);
  253.     //delay(5);
  254.   }
  255.  
  256.   /*if (analogRead (BrocheDAC) < 160)
  257.     {
  258.  
  259.     //delay(5);
  260.     }*/
  261.  
  262.   if ((qt4 >= qt4_Threshold) && digitalRead (BrocheSortieActivationVcc) == LOW)
  263.   { // Activation MSG04 : Redémarrage Système
  264.     Buzzer(150, 200, 4);
  265.     delay(5);
  266.     analogWrite(BrocheDAC, 0);
  267.  
  268.     delay(10);
  269.     Serial.print ("TEINTE :  ");
  270.     Serial.println(TeinteRoueChromatique);
  271.     Serial.print ("Longueur mémoire");
  272.     delay(2000);
  273.     NVIC_SystemReset();
  274.  
  275.     digitalWrite (BrocheSortieActivationVcc, HIGH);
  276.  
  277.     EtatTouchActivationVcc = HIGH;
  278.  
  279.   }
  280.  
  281.   if ((qt4 >= qt4_Threshold) && (EtatTouchActivationVcc == HIGH))
  282.  
  283.   {
  284.     Buzzer(1000, 500, 1);
  285.     delay(5);
  286.     EtatTouchActivationVcc = HIGH;
  287.     delay (500);
  288.     ValueDAC = 651;
  289.     analogWrite(BrocheDAC, ValueDAC);                                                               // Activation MSG05 : Système déjà en Marche
  290.     delay (2000);
  291.     ValueDAC = 0;
  292.     analogWrite(BrocheDAC, ValueDAC);
  293.     //EtatTouchActivationVcc = LOW;
  294.     //delay (50);
  295.   }
  296.  
  297.   /*if (analogRead (BrocheDAC) < 160)
  298.     {
  299.  
  300.     //delay(5);
  301.     }*/
  302.  
  303.   if ((qt3 >= qt3_Threshold) && EtatTouchActivationVcc ==  HIGH)
  304.   {
  305.  
  306.     delay(5);
  307.  
  308.     Buzzer(100, 100, 3);
  309.     ValueDAC = 744;
  310.     analogWrite(BrocheDAC, ValueDAC);                                                               // Activation MSG06 : Arrêt Système
  311.     delay(2000);
  312.     ValueDAC = 0;
  313.     analogWrite(BrocheDAC, ValueDAC);
  314.     delay(10);
  315.  
  316.     digitalWrite (BrocheSortieActivationVcc, LOW);
  317.  
  318.     delay(10);
  319.     Serial.print ("TEINTE :  ");
  320.     Serial.println (TeinteRoueChromatique);
  321.  
  322.     delay(100);
  323.     Serial.print ("TEINTE :  ");
  324.     Serial.println (TeinteRoueChromatique);
  325.     delay(10);
  326.  
  327.     EtatTouchActivationVcc = LOW;
  328.     qt3 = 0;
  329.     delay(100);
  330.   }
  331.  
  332.   /*if (analogRead (BrocheDAC) < 160)
  333.     {
  334.     analogWrite(BrocheDAC, 0);
  335.     //delay(5);
  336.     }*/
  337.  
  338.   //if ((qt3 >= qt3_Threshold) && digitalRead (BrocheSortieActivationVcc) == LOW)
  339.   if ((qt3 >= qt3_Threshold) && EtatTouchActivationVcc ==  LOW)
  340.   {
  341.     Buzzer(1000, 500, 1);
  342.     delay (5);
  343.     EtatTouchActivationVcc = LOW;
  344.     digitalWrite (BrocheSortieActivationVcc, LOW);
  345.     ValueDAC = 837;
  346.     analogWrite(BrocheDAC, ValueDAC);                                                             // Activation MSG07 : Système déjà arrêté
  347.     delay (2000);
  348.     ValueDAC = 0;
  349.     analogWrite(BrocheDAC, ValueDAC);
  350.     EtatTouchActivationVcc = LOW;
  351.   }
  352.  
  353.   /*if (analogRead (BrocheDAC) < 160)
  354.     {
  355.     analogWrite(BrocheDAC, 0);
  356.     //delay(5);
  357.     }*/
  358.  
  359.   ValeurANALuminositeLue = analogRead(BrochePotarLuminosite); // *** // Lit la valeur analogique sur l'entrée du potentiomètre de réglage de la luminosité (entre 0 et 1023)
  360.   //LuminositeCourante = map(ratio1024, 0, 1023, 10, 255);
  361.   LuminositeCourante = map(ValeurANALuminositeLue, 0, 1023, 3, 255); // Convertit la valeur analogique lue en valeur de la luminosité courante (entre 1 et 255)
  362.   ObjetNeopixel.setBrightness(LuminositeCourante);           // Définit la luminosité courante des LED RGB NeoPixel de l'Objet NeoPixel
  363.  
  364.   //ValeurANAPasLue = analogRead(BrochePotarPas); // **************** // Lit la valeur analogique sur l'entrée du potentiomètre de réglage du pas (entre 0 et 1023)
  365.   ValeurANAPasLue = 1023;
  366.   //PasCourant = map(ValeurANAPasLue, 0, 1203, 0, 254);   // Convertit la valeur analogique lue en valeur de pas courant (entre 1 et 254)
  367.   PasCourant = 350;
  368.  
  369.   //*****************************************************************************************************************************************************************
  370.   //TeinteRoueChromatique = EEPROM.read (address);
  371.   EtatBPPlusTeinteChroma = digitalRead(BrocheDELPlusTeinteChroma); // ******************* // Lit le bouton poussoir "BPPlusTeinteChroma"
  372.   delay(50);
  373.   //if (EtatBPPlusTeinteChroma == LOW) // ************************************ // Si pression sur le bouton poussoir "BPPlusTeinteChroma"
  374.   if (EtatBPPlusTeinteChroma == HIGH) // ************************************ // Si pression sur le bouton poussoir "BPPlusTeinteChroma"
  375.   {
  376.  
  377.     TeinteRoueChromatique = TeinteRoueChromatique + PasCourant; // Incrémente d'un pas la valeur de la teinte courante de la roue chromatique
  378.     //EEPROM.update (address, TeinteRoueChromatique);
  379.     //EEPROM.write (address,TeinteRoueChromatique);
  380.     //Serial.println (TeinteRoueChromatique);
  381.  
  382.     if (TeinteRoueChromatique > 65535) // +++++++++ // Si la valeur de la teinte courante de la roue chromatique est supérieure à 65535
  383.     {
  384.       //TeinteRoueChromatique = 0;                                        // Borne la valeur de la teinte courante de la roue chromatique
  385.       TeinteRoueChromatique = 65535;                                      // Stoppe la montée et bloque à 65535
  386.       Buzzer(1000, 500, 1);
  387.       delay (5);
  388.       //EtatTouchActivationVcc = LOW;
  389.       //digitalWrite (BrocheSortieActivationVcc, LOW);
  390.       ValueDAC = 837;                                                     // Value DAC à changer, MSG pour signaler la butée haute et invitation à utiliser le bouton de descente
  391.       analogWrite(BrocheDAC, ValueDAC);                                                             // Activation MSG07 : Système déjà arrêté!!! A REVOIR#########################
  392.       delay (2000);
  393.       ValueDAC = 0;
  394.       analogWrite(BrocheDAC, ValueDAC);
  395.       //EtatTouchActivationVcc = LOW;
  396.     }
  397.     delay(50);                                                                                                        // Temporise 50ms
  398.   }
  399.  
  400.   //*****************************************************************************************************************************************************************
  401.  
  402.   //*****************************************************************************************************************************************************************
  403.   //TeinteRoueChromatique = EEPROM.read (address);
  404.   EtatBPMoinsTeinteChroma = digitalRead(BrocheDELMoinsTeinteChroma); // **************** // Lit le bouton poussoir "BPMoinsTeinteChroma"
  405.   delay(50);
  406.   if (EtatBPMoinsTeinteChroma == HIGH) // ********************************** // Si pression sur le bouton poussoir "BPMoinsTeinteChroma"
  407.   {
  408.  
  409.     TeinteRoueChromatique = TeinteRoueChromatique - PasCourant;                                                       // Décrémente d'un pas la valeur de la teinte courante de la roue chromatique
  410.  
  411.     if (TeinteRoueChromatique < 0) // +++++++++++++++++ // Si la valeur de la teinte courante de la roue chromatique est inférieure à 0
  412.     {
  413.       //TeinteRoueChromatique = 65535;                                    // Borne la valeur de la teinte courante de la roue chromatique
  414.       TeinteRoueChromatique = 0;                                          // Stoppe la descente et bloque à zero
  415.       Buzzer(1000, 500, 1);
  416.       delay (5);
  417.       ValueDAC = 837;                                                     // Value DAC à changer, MSG pour signaler la butée basse et invitation à utiliser le bouton de montée
  418.       analogWrite(BrocheDAC, ValueDAC);                                                             // Activation MSG07 : Système déjà arrêté!!! A REVOIR#########################
  419.       delay (2000);
  420.       ValueDAC = 0;
  421.       analogWrite(BrocheDAC, ValueDAC);
  422.       //EtatTouchActivationVcc = LOW;
  423.  
  424.     }
  425.     delay(50);                                                                                                        // Temporise 50ms
  426.   }
  427.  
  428.   EtatBPMoinsTeinteChroma = digitalRead(BrocheDELMoinsTeinteChroma); // ******************* // Lit le bouton poussoir "BPPlusTeinteChroma"
  429.   delay(50);
  430.  
  431.   //*****************************************************************************************************************************************************************
  432.  
  433.   for (int numeroLED = 0; numeroLED < ObjetNeopixel.numPixels(); numeroLED++) // ************************************ // Parcourt les LED RGB NeoPixel de l'Objet NeoPixel
  434.   {
  435.     ObjetNeopixel.setPixelColor(numeroLED, ObjetNeopixel.gamma32(ObjetNeopixel.ColorHSV(TeinteRoueChromatique)));     // Active la LED RGB NeoPixel de rang "numeroLED" avec une correction gamma de la teinte "TeinteRoueChromatique"
  436.   }
  437.   ObjetNeopixel.show();                                              // Rafraîchit l'affichage des LED RGB NeoPixel de l'Objet NeoPixel
  438.   delay(100);
  439.  
  440. }
  441.  
  442. void Buzzer (int TempsH, int TempsL, int nb)                      // TempsH => délai buzzer ON, TempsL => délai buzzer OFF, nb => nombre de bips
  443. {
  444.   for (int x = 1; x <= nb; x++)                                     // Boucle le nombre de fois voulu passé par l'argument "int nb"
  445.   {
  446.     digitalWrite(BrocheBuzzer, HIGH);                                 // Active le buzzer
  447.     delay (TempsH);                                                   // Temporisation à l'état haut du buzzer pendant la durée passée par l'argument "int TempsH"
  448.     digitalWrite(BrocheBuzzer, LOW);                                  // Désactive le buzzer
  449.     delay (TempsL);                                                   // Temporisation à l'état bas du buzzer pendant la durée passée par l'argument "int TempsL"
  450.   }
  451. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement