Ollivier

DFR0075 commenté (expliqué ??)

Aug 18th, 2020 (edited)
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.71 KB | None | 0 0
  1.  
  2. // DFR0075 ======================================================= COMMENTAIRES =
  3. // Code fabricant commenté module 5 boutons DFR0075
  4. // https://wiki.dfrobot.com/ADKeyboard_Module__SKU__DFR0075_
  5. // une version sans commentaire de ce code modifié (revu) qui
  6. // permet le simple clic (clic court), le clic long, et le double-clic
  7. // se trouve ici :
  8. // https://pastebin.com/uWBVLtGx
  9. // une version hyper commentée de ce code se trouve ici :
  10. // https://pastebin.com/gVZBu2Wg
  11. // ===============================================================================
  12. // Ollivier JULLIEN || aout 2020
  13. // commentaires 100% libre de droit
  14. // (en cas d'utilisation de ces explications, merci de citer l'auteur...
  15. // il a travaillé dur pour vous le donner ;) )
  16. // ===============================================================================
  17.  
  18. //ADKeyboard Module
  19. //Developed by DFRobot.com
  20. //Last modified 30/11/2011
  21. //Version 1.0
  22. //https://wiki.dfrobot.com/ADKeyboard_Module__SKU__DFR0075_
  23.  
  24. int adc_key_val[5] = {600, 650, 700, 800, 900 }; // Les valeurs de tension limite haute des bouton
  25. int NUM_KEYS = 5; // Le nombre de bouton
  26. int adc_key_in; // valeur reçue par la broche analogique
  27. int key = -1; // numero de bouton, défini à "pas de bouton enfoncé
  28. int oldkey = -1; // numero mémoire de bouton, défini comme pas de bouton enfoncé
  29.  
  30. void setup()
  31. {
  32. Serial.begin(9600); // 9600 bps
  33. }
  34.  
  35. void loop() {
  36.  
  37. // Ce module avec ce code execute les fonctions au moment ou on enfonce le bouton
  38.  
  39. /* Si on appuie sur le bouton 0 (S1), la valeur analogique reçue est inférieure à 600
  40. * Si on appuie sur le bouton 1 (S2), la valeur analogique reçue est supérieure à 600 et inférieure à 650
  41. * Si on appuie sur le bouton 2 (S3), la valeur analogique reçue est supérieure à 650 et inférieure à 700
  42. * Si on appuie sur le bouton 3 (S4), la valeur analogique reçue est supérieure à 700 et inférieure à 800
  43. * Si on appuie sur le bouton 4 (S5), la valeur analogique reçue est supérieure à 800 et inférieure à 900
  44. * Si on appuie pas la valeur analogique reçue est supérieure à 900 (1023, normalement)
  45. * Ces valeurs sont celles fixée par le tableau
  46. * Si un bouton ne fonctionne pas, faire un Serial.print(adc_key_in); , juste en dessous de
  47. * adc_key_in = analogRead(0); pour connaitre sa valeur, et modifier la valeur correspondante
  48. * dans le tableau adc_key_val[] de manière à ce que la limite correspondant à ce bouton dans le tableau
  49. * soit supérieure à la valeur du bouton
  50. */
  51. adc_key_in = analogRead(0); // Lit la valeur à la borne du senseur
  52. key = get_key(adc_key_in); // on converti cette valeur en numero de clé (bouton)
  53.  
  54. if (key != oldkey) { // Si on appuie (la nouvelle valeur est différente de l'ancienne)
  55.  
  56. /* ===================================================================================================== */
  57.  
  58. delay(50); // on fait une pause pour vérifier qu'il est bien enfoncé
  59. adc_key_in = analogRead(0); // on reelit la valeur à la borne du senseur
  60. key = get_key(adc_key_in); // on converti cette valeur en numero de clé (bouton)
  61. if (key != oldkey) { // Si on appuie (la nouvelle valeur est différente de l'ancienne)
  62.  
  63. /* ===================================================================================================== */
  64. // pourquoi on refait la manip ? Vérification que le bouton soit enfoncé plus de 50 ms, je pense
  65. // pour eviter d'agir sur une "interférence"
  66. /* ===================================================================================================== */
  67.  
  68. oldkey = key; // on redéfini la valeur de oldkey en lui donnant la valeur de key
  69. if (key >= 0) { // Si key positif ou nul ( != -1 "aucune touche enfoncée
  70. switch (key) { // Suivant les valeurs de key
  71.  
  72. case 0: Serial.println("S1 OK"); // key = 0 => on affiche "S1 OK"
  73. break; // on passe direct au delay(100); en dessous
  74.  
  75. case 1: Serial.println("S2 OK"); // key = 0 => on affiche "S1 OK"
  76. break; // on passe direct au delay(100); en dessous
  77.  
  78. case 2: Serial.println("S3 OK"); // key = 0 => on affiche "S1 OK"
  79. break; // on passe direct au delay(100); en dessous
  80.  
  81. case 3: Serial.println("S4 OK"); // key = 0 => on affiche "S1 OK"
  82. break; // on passe direct au delay(100); en dessous
  83.  
  84. case 4: Serial.println("S5 OK"); // key = 0 => on affiche "S1 OK"
  85. break; // on passe direct au delay(100); en dessous
  86. }
  87. }
  88. }
  89. }
  90. delay(100); // on fait une pause de 0.1s
  91. }
  92.  
  93.  
  94. /* ===================================================================================================== */
  95. // Valeur qui converti la valeur de la tension à la borne analogique en numero de bouton
  96. /* ===================================================================================================== */
  97. int get_key(unsigned int input) {
  98.  
  99. int k;
  100. for (k = 0; k < NUM_KEYS; k++) { // on fait tourner sur le nombre de bouton
  101. // une boucle qui vérifie que la valeur lue est inférieure
  102. // ou non a la limite qui correspond au tour dans le tableau
  103. if (input < adc_key_val[k]) { // si la valeur est inférieur à sa limite
  104. return k; // on renvoie la valeur du bouton
  105. } // si la valeur est supérieur, on n'envoie rien
  106. } // du coup en fin de bouble c'est la dernière valeur qui ait été inférieur,
  107. // qui est la dernière retournée, qui sera retenue
  108. if (k >= NUM_KEYS)k = -1; // No valid key pressed // Si la valeur est au dela de la derniere limite 900,
  109. // aucun bouton sélectionné, on attribue la valeur -1 au bouton
  110. return k; // et on retourne la valeur
  111. }
Add Comment
Please, Sign In to add comment