granteeric

programme capteur

May 8th, 2023
737
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Arduino.h>
  2.  
  3. //Capteur
  4. #define PIN_CAPTEUR1 A0
  5. #define PIN_CAPTEUR2 A1
  6. #define PIN_CAPTEUR3 A2
  7. #define PIN_CAPTEUR4 A3
  8. #define PIN_CAPTEUR5 A4
  9. #define PIN_CAPTEUR6 A5
  10. #define PIN_CAPTEUR7 A6
  11. #define PIN_CAPTEUR8 A7
  12.  
  13. //de 0 à 1023 pour 5V max sur la pin en entree de l'arduino, le pas est de 5/1023 soit 0048875855V.
  14. //Pour 1V, il faut donc 204.8 soit 205
  15. //Pour 2V, il faut donc 409.6 soit 410
  16. //Pour 3V, il faut donc 614.4 soit 614
  17. //Pour 4V, il faut donc 819.2 soit 819
  18. //Pour 5V, il faut donc 1023 soit 1023
  19. #define TENSION_CAPTEURS  5.0f                  //Tension max sur les capteurs
  20. #define CAPTEURS_TEMPS_RAFRAICHISSEMENT         1000UL    // 1seconse 1000ms
  21. #define CAPTEUR_1_SEUIL_DECLENCHEMENT           511     //default 2.5V
  22. #define CAPTEUR_2_SEUIL_DECLENCHEMENT           511
  23. #define CAPTEUR_3_SEUIL_DECLENCHEMENT           511
  24. #define CAPTEUR_4_SEUIL_DECLENCHEMENT           511
  25. #define CAPTEUR_5_SEUIL_DECLENCHEMENT           511
  26. #define CAPTEUR_6_SEUIL_DECLENCHEMENT           511
  27. #define CAPTEUR_7_SEUIL_DECLENCHEMENT           511
  28. #define CAPTEUR_8_SEUIL_DECLENCHEMENT           511
  29.  
  30.  
  31. //Afficheur 7 segments
  32. #define AFFICHER_TYPE_ANODE                     1       //0 = cathode commun , 1 = anode commun,
  33. #define AFFICHEUR_TEMPS_RAFRAICHISSEMENT        10UL    //temps en ms entre chaque rafraichissement de l'afficheur
  34. #define PIN_AFFICHEUR_SEGMENT_A                 PB0     //D8 nano
  35. #define PIN_AFFICHEUR_SEGMENT_B                 PB1     //D9 nano
  36. #define PIN_AFFICHEUR_SEGMENT_C                 PB2     //D10 nano
  37. #define PIN_AFFICHEUR_SEGMENT_D                 PB3     //D11 nano
  38. #define PIN_AFFICHEUR_SEGMENT_E                 PB4     //D12 nano
  39. #define PIN_AFFICHEUR_SEGMENT_F                 PB5     //D13 nano
  40. #define PIN_AFFICHEUR_SEGMENT_G                 PD6     //D6 nano
  41. #define PIN_AFFICHEUR_SEGMENT_DP                PD7     //D7 nano
  42.  
  43.  
  44.  
  45. //Prototype des fonctions
  46. void printNombre(const int& nombre);
  47. void readCapteurs();
  48. void selectCapteurOK();
  49.  
  50. //Variables globales
  51. enum number{ZERO = 0, UN = 1, DEUX = 2, TROIS = 3, QUATRE = 4, CINQ = 5, SIX = 6, SEPT = 7, HUIT = 8, NEUF = 9, OFF = 10 };
  52. const uint8_t tabNumber[11] = { 0b00000011,0b11100111,0b10010001,0b11000001,0b01100101,0b01001001,0b00001001,0b01100011,0b00000001,0b01000001,0b11111111 };
  53. const uint16_t tabSeuilDeclenchement[8] { CAPTEUR_1_SEUIL_DECLENCHEMENT,CAPTEUR_2_SEUIL_DECLENCHEMENT,CAPTEUR_3_SEUIL_DECLENCHEMENT,CAPTEUR_4_SEUIL_DECLENCHEMENT,CAPTEUR_5_SEUIL_DECLENCHEMENT,CAPTEUR_6_SEUIL_DECLENCHEMENT,CAPTEUR_7_SEUIL_DECLENCHEMENT,CAPTEUR_8_SEUIL_DECLENCHEMENT };
  54.  
  55. unsigned long afficheurTempsPrecedent = 0UL;
  56. unsigned long capteursTempsPrecedent = 0UL;
  57. uint16_t capteursValue[8] = {0,0,0,0,0,0,0,0};
  58. uint8_t capteurSelect ={10};  //off
  59. uint16_t cpteur=0;
  60.  
  61. void setup(){
  62.     Serial.begin(115200);
  63.     //Initialisation des ports
  64.     DDRC = 0xFF;        //ADC Input
  65.  
  66.    
  67.     printNombre(OFF);
  68.     //afficheur segment A-G DP
  69.     DDRB |= (1 << PIN_AFFICHEUR_SEGMENT_A) | (1 << PIN_AFFICHEUR_SEGMENT_B) | (1 << PIN_AFFICHEUR_SEGMENT_C) | (1 << PIN_AFFICHEUR_SEGMENT_D) | (1 << PIN_AFFICHEUR_SEGMENT_E) | (1 << PIN_AFFICHEUR_SEGMENT_F);
  70.     DDRD |= (1 << PIN_AFFICHEUR_SEGMENT_G) | (1 << PIN_AFFICHEUR_SEGMENT_DP);
  71.     afficheurTempsPrecedent=millis() + AFFICHEUR_TEMPS_RAFRAICHISSEMENT;
  72.     capteursTempsPrecedent = millis() + CAPTEURS_TEMPS_RAFRAICHISSEMENT;
  73. }
  74.  
  75. void loop(){
  76.     unsigned long tempsActuel = millis();
  77.     //determination du nombre a afficher
  78.     if( abs(tempsActuel-afficheurTempsPrecedent) >= AFFICHEUR_TEMPS_RAFRAICHISSEMENT){
  79.         afficheurTempsPrecedent = tempsActuel;
  80.         printNombre(capteurSelect);        
  81.     }
  82.  
  83.     if( abs(tempsActuel-capteursTempsPrecedent) >= CAPTEURS_TEMPS_RAFRAICHISSEMENT){
  84.         // 1 Lecture des capteurs
  85.         readCapteurs();
  86.         // 2 determination du capteur a afficher
  87.         selectCapteurOK();
  88.         capteursTempsPrecedent = tempsActuel;
  89.     }
  90.  
  91. }
  92.  
  93.  
  94. void printNombre(const int& nombre){
  95.     const uint8_t& nb = ( (AFFICHER_TYPE_ANODE) ? tabNumber[nombre]: (~tabNumber[nombre]));
  96.     const uint8_t& off = ( (AFFICHER_TYPE_ANODE) ? tabNumber[OFF]: (~tabNumber[OFF]));
  97.     PORTB = (PORTB & 0b11000000) | (off >> 2);  
  98.     PORTD = (PORTD & 0b00111111) | ((off & 0b00000011) << 6);
  99.     PORTB = (PORTB & 0b11000000) | (nb >> 2);
  100.     PORTD = (PORTD & 0b00111111) | ((nb & 0b00000011) << 6);
  101. }
  102.  
  103. void readCapteurs(){
  104.     capteursValue[0] = analogRead(PIN_CAPTEUR1);
  105.     capteursValue[1] = analogRead(PIN_CAPTEUR2);
  106.     capteursValue[2] = analogRead(PIN_CAPTEUR3);
  107.     capteursValue[3] = analogRead(PIN_CAPTEUR4);
  108.     capteursValue[4] = analogRead(PIN_CAPTEUR5);
  109.     capteursValue[5] = analogRead(PIN_CAPTEUR6);
  110.     capteursValue[6] = analogRead(PIN_CAPTEUR7);
  111.     capteursValue[7] = analogRead(PIN_CAPTEUR8);
  112. }
  113.  
  114. void selectCapteurOK(){
  115.     //determination du capteur OK
  116.     for(int i =7 ; i >= 0 ; i--){
  117.         if( capteursValue[i] >= (tabSeuilDeclenchement[i]) ){ capteurSelect = i+1;  break; }
  118.     }
  119. }
  120.  
Advertisement
Add Comment
Please, Sign In to add comment