Advertisement
claudiusmarius

GenerateurFonction

Apr 12th, 2022
1,133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.00 KB | None | 0 0
  1.  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2.   // Claude DUFOURMONT Le 09/04/2022
  3.  
  4.   // Générateur de fonction, c'est à dire générateur de signal dont la forme est réalisée à partir de segments de droite
  5.   // Première partie : tracé de courbe
  6.   // Deuxième partie : action potentiométrique
  7.   //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  8.  
  9.   #define BrocheDAC A0                                               // Signal analogique en 0 / 3.3V
  10.   #define potPinInterval A4                                          // RP1 10K ==> ATTENTION +Vcc = 3.3V et non pas 5V
  11.  
  12.   int ValueDAC;                                                      // Echelle : 0 -> 1023 points (analogWriteResolution(10)) pour 0 -> 3.3v
  13.  
  14.   #define BrocheLedGaucheTempo A2                                    // LED2 Bleue en série avec R12 valeur 33 ohms
  15.   #define BrocheLedDroiteTempo A1                                    // LED1 Jaune en série avec R11 valeur 82 ohms  
  16.            
  17.      
  18.   float x;  
  19.   int y;
  20.   void setup()
  21.   {
  22.   analogWrite(BrocheDAC, 0);
  23.  
  24.   int ValueDAC = 0;
  25.  
  26.   pinMode (BrocheLedGaucheTempo, OUTPUT);
  27.  
  28.   pinMode (BrocheLedDroiteTempo, OUTPUT);
  29.    
  30.   analogReadResolution(10);                                           // Spécification résolution à utiliser pour la lecture ANA
  31.   analogWriteResolution(10);                                          // Spécification résolution à utiliser pour l'écriture ANA (DAC)
  32.  
  33.   digitalWrite (BrocheLedGaucheTempo, LOW);                           // Allumage LED bleue (bord droit zone1)
  34.   digitalWrite (BrocheLedDroiteTempo, LOW);                           // Allumage LED jaune (bord gauche zone3) nota : si nous sommes en zone2 LED bleue et jaune allumées
  35.   }
  36.  
  37.   void loop()
  38.   {
  39.   Serial.begin(115200);
  40.    //courbe1();                                                     // Fonction permettant de voir le tracé de la courbe de réponse à une rampe
  41.  
  42.   //courbe2();                                                        // Fonction imaginaire Consigne de puissance de chauffage fonction de l'écart ConsigneTempérature - TempératureMesurée
  43.   //courbe3();                                                          // Fonction consigne descendante puis montante avec une bande morte entre les 2
  44.   manuel();                                                        // Fonction permettant de voir la réponse à une variation de tension (potentiomètre)
  45.   }
  46.  
  47.  
  48.   // ----------------------------------------------------------------- Fonction courbe1 DEBUT --------------------------------------------------------------------------
  49.   void courbe1()
  50.   {
  51.    
  52.   for (x = 0; x <=500; x++)                                             // Pour la démo, la valeur de 500 est choisie pour avoir l'ensemble de la courbe sur le traceur série
  53.   {
  54.   if (x < 167)                                                          // 167 représente le 1/3 de la valeur maximale de x
  55.   {
  56.   y =  map (x, 0, 166, 0,6);                                            // Segment1 de 0 à 6 mn sur le 1er tiers du potentiomètre
  57.   //digitalWrite (BrocheLedGaucheTempo, HIGH);
  58.   //digitalWrite (BrocheLedDroiteTempo, LOW);
  59.   Serial.println (y) ;
  60.   ValueDAC = y;
  61.   //Serial.println (ValueDAC) ;
  62.   analogWrite(BrocheDAC, ValueDAC);
  63.   //delay (100);
  64.   }
  65.  
  66.   if ( (x < 334) && (x > 166))
  67.   {
  68.   y =  map (x, 167,333,6,60);                                           // Segment2 de 6 à 60 mn sur le 2ème tiers du potentiomètre
  69.   //digitalWrite (BrocheLedGaucheTempo, HIGH);
  70.   //digitalWrite (BrocheLedDroiteTempo, HIGH);
  71.   Serial.println (y) ;
  72.   ValueDAC = y;
  73.   //Serial.println (ValueDAC) ;
  74.   analogWrite(BrocheDAC, ValueDAC);
  75.   //delay (100);
  76.   }
  77.  
  78.   if ( (x <501) && (x > 333))
  79.   {
  80.   y = map (x, 334,500,60,600);                                          // Segment2 de 6 à 60 mn sur le 2ème tiers du potentiomètre
  81.   //digitalWrite (BrocheLedGaucheTempo, LOW);
  82.   //digitalWrite (BrocheLedDroiteTempo, HIGH);
  83.   Serial.println (y) ;
  84.   ValueDAC = y;
  85.   //Serial.println (ValueDAC) ;
  86.   analogWrite(BrocheDAC, ValueDAC);
  87.   //delay (100);
  88.   }
  89.   }
  90.   delay (10000);
  91.   }
  92.   // ------------------------------------------------------------------- Fonction courbe1 FIN --------------------------------------------------------------------------
  93.  
  94.  
  95.   // ------------------------------------------------------------------ Fonction courbe2 DEBUT -------------------------------------------------------------------------
  96.   void courbe2()
  97.   {
  98.   for (x = 0; x <=500; x++)                                             // Pour la démo, la valeur de 500 est choisie pour avoir l'ensemble de la courbe sur le traceur série
  99.   {
  100.   if (x < 100)                                                          // 167 représente le 1/3 de la valeur maximale de x
  101.   {
  102.   y =  map (x, 0, 100, 0,0);                                            // Segment1
  103.   //digitalWrite (BrocheLedGaucheTempo, HIGH);
  104.   //digitalWrite (BrocheLedDroiteTempo, LOW);
  105.   Serial.println (y) ;
  106.   //ValueDAC = y*1023/500;
  107.   //Serial.println (ValueDAC) ;
  108.   //analogWrite(BrocheDAC, ValueDAC);
  109.   //delay (100);
  110.   }
  111.  
  112.   if ( (x < 201) && (x > 100))
  113.   {
  114.   y =  map (x, 101,200,100,100);                                        // Segment2
  115.   //digitalWrite (BrocheLedGaucheTempo, HIGH);
  116.   //digitalWrite (BrocheLedDroiteTempo, HIGH);
  117.   Serial.println (y) ;
  118.   //ValueDAC = y*1023/600;
  119.   //Serial.println (ValueDAC) ;
  120.   //analogWrite(BrocheDAC, ValueDAC);
  121.   //delay (100);
  122.   }
  123.  
  124.   if ( (x <301) && (x > 200))
  125.   {
  126.   y = map (x, 201,300,100,300);                                       // Segment3
  127.   //digitalWrite (BrocheLedGaucheTempo, LOW);
  128.   //digitalWrite (BrocheLedDroiteTempo, HIGH);
  129.   Serial.println (y) ;
  130.   //ValueDAC = y*1023/600;
  131.   //Serial.println (ValueDAC) ;
  132.   //analogWrite(BrocheDAC, ValueDAC);
  133.   //delay (100);
  134.   }
  135.  
  136.   if ( (x <401) && (x > 300))
  137.   {
  138.   y = map (x, 301,400,300,600);                                        // Segment4
  139.   //digitalWrite (BrocheLedGaucheTempo, LOW);
  140.   //digitalWrite (BrocheLedDroiteTempo, HIGH);
  141.   Serial.println (y) ;
  142.   //ValueDAC = y*1023/600;
  143.   //Serial.println (ValueDAC) ;
  144.   //analogWrite(BrocheDAC, ValueDAC);
  145.   //delay (100);
  146.   }
  147.  
  148.   if ( (x <501) && (x > 400))
  149.   {
  150.   y = map (x, 401,500,600,1023);                                        // Segment5
  151.   //digitalWrite (BrocheLedGaucheTempo, LOW);
  152.   //digitalWrite (BrocheLedDroiteTempo, HIGH);
  153.   Serial.println (y) ;
  154.   //ValueDAC = y*1023/600;
  155.   //Serial.println (ValueDAC) ;
  156.   //analogWrite(BrocheDAC, ValueDAC);
  157.   //delay (100);
  158.   }
  159.  
  160.   }
  161.   delay (10000);
  162.   }
  163.   // -------------------------------------------------------------------- Fonction courbe2 FIN ----------------------------------------------------------------------------
  164.  
  165.  
  166.  
  167.   // ------------------------------------------------------------------- Fonction courbe3 DEBUT ---------------------------------------------------------------------------
  168.   void courbe3()
  169.   {
  170.   for (x = 0; x <=500; x++)                                             // Pour la démo, la valeur de 500 est choisie pour avoir l'ensemble de la courbe sur le traceur série
  171.   {
  172.   if (x < 100)                                                          //
  173.   {
  174.   y =  map (x, 0, 100, 1023,1023);                                      // Segment1
  175.   //digitalWrite (BrocheLedGaucheTempo, HIGH);
  176.   //digitalWrite (BrocheLedDroiteTempo, LOW);
  177.   Serial.println (y) ;
  178.   ValueDAC = y;
  179.   //Serial.println (ValueDAC) ;
  180.   //analogWrite(BrocheDAC, ValueDAC);delay (100);
  181.  
  182.   }
  183.  
  184.   if ( (x < 201) && (x > 100))
  185.   {
  186.   y =  map (x, 101,200,1023,300);                                       // Segment2
  187.   //digitalWrite (BrocheLedGaucheTempo, HIGH);
  188.   //digitalWrite (BrocheLedDroiteTempo, HIGH);
  189.   Serial.println (y) ;
  190.   ValueDAC = y;
  191.   //Serial.println (ValueDAC) ;
  192.   //analogWrite(BrocheDAC, ValueDAC);delay (100);
  193.  
  194.   }
  195.  
  196.   if ( (x <301) && (x > 200))
  197.   {
  198.   y = map (x, 201,300,300,300);                                         // Segment3
  199.   //digitalWrite (BrocheLedGaucheTempo, LOW);
  200.   //digitalWrite (BrocheLedDroiteTempo, HIGH);
  201.   Serial.println (y) ;
  202.   ValueDAC = y;
  203.   //Serial.println (ValueDAC) ;
  204.   //analogWrite(BrocheDAC, ValueDAC);delay (100);
  205.  
  206.   }
  207.  
  208.   if ( (x <401) && (x > 300))
  209.   {
  210.   y = map (x, 301,400,300,1023);                                        // Segment4
  211.   //digitalWrite (BrocheLedGaucheTempo, LOW);
  212.   //digitalWrite (BrocheLedDroiteTempo, HIGH);
  213.   Serial.println (y) ;
  214.   ValueDAC = y;
  215.   //Serial.println (ValueDAC) ;
  216.   //analogWrite(BrocheDAC, ValueDAC);delay (100);
  217.  
  218.   }
  219.  
  220.   if ( (x <501) && (x > 400))
  221.   {
  222.   y = map (x, 401,500,1023,1023);                                      // Segment5
  223.   //digitalWrite (BrocheLedGaucheTempo, LOW);
  224.   //digitalWrite (BrocheLedDroiteTempo, HIGH);
  225.   Serial.println (y) ;
  226.   ValueDAC = y*1023/600;
  227.   //Serial.println (ValueDAC) ;
  228.   //analogWrite(BrocheDAC, ValueDAC);delay (100);
  229.  
  230.   }
  231.   }
  232.   delay (15000);
  233.   }
  234.   // ----------------------------------------------------------------- Fonction courbe3 FIN -----------------------------------------------------------------------------
  235.  
  236.  
  237.  
  238.   // ---------------------------------------------------- Fonction par action potentiométrique DEBUT --------------------------------------------------------------------
  239.   void manuel()
  240.   {
  241.   x = 0;
  242.   delay (5);
  243.   x = analogRead (potPinInterval);
  244.  
  245.   if (x < 342)                                                     // 342 représente le 1/3 de la valeur maximale de x
  246.   {
  247.   y =  map (x, 0, 341, 0,6);                                       // Segment1 de 0 à 6 mn sur le 1er tiers du potentiomètre
  248.   digitalWrite (BrocheLedGaucheTempo, HIGH);
  249.   digitalWrite (BrocheLedDroiteTempo, LOW);
  250.   Serial.println (y) ;
  251.   ValueDAC = y;
  252.   Serial.println (ValueDAC) ;
  253.   analogWrite(BrocheDAC, ValueDAC);
  254.   //delay (100);
  255.   }
  256.  
  257.   if ( (x < 683) && (x > 341))
  258.   {
  259.   y =  map (x, 341,682,6,60);                                      // Segment2 de 6 à 60 mn sur le 2ème tiers du potentiomètre
  260.   digitalWrite (BrocheLedGaucheTempo, HIGH);
  261.   digitalWrite (BrocheLedDroiteTempo, HIGH);
  262.   Serial.println (y) ;
  263.   ValueDAC = y;
  264.   //Serial.println (ValueDAC) ;
  265.   analogWrite(BrocheDAC, ValueDAC);
  266.   //delay (100);
  267.   }
  268.  
  269.   if ( (x <1024) && (x > 681))
  270.   {
  271.   y = map (x, 681,1024,60,600);                                     // Segment2 de 6 à 60 mn sur le 2ème tiers du potentiomètre
  272.   digitalWrite (BrocheLedGaucheTempo, LOW);
  273.   digitalWrite (BrocheLedDroiteTempo, HIGH);
  274.   Serial.println (y) ;
  275.   ValueDAC = y;
  276.   //Serial.println (ValueDAC) ;
  277.   analogWrite(BrocheDAC, ValueDAC);
  278.   //delay (100);
  279.   }
  280.   delay (5);
  281.   }
  282.   // ---------------------------------------- Fonction par action potentiométrique FIN --------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement