/* Petit programme pour afficher le jeu de caractères de la bibliothèque. */

#include <Adafruit_ssd1306syp.h>

// Définition des broches pour la ligne I2C.
#define broche_SCL 12 // D7 utilisée en sortie.
#define broche_SDA 11 // D6 utilisée en sortie.

// Initialisation des broches en sorties et affectations.
Adafruit_ssd1306syp display(broche_SDA, broche_SCL);

// Constantes du programme.
#define LED_Arduino 13 // LED verte sur le C.I.
#define NB_tests_antirebonds 50 // Nombre de tests de stabilisation B.P.

// Variables du programme.
boolean Clic_sur_le_BP, Augmenter_le_choix, Clic_long;

void setup() {display.initialize(); delay(300); display.clear(); display.update(); }
  
void loop() {
  display.setTextSize(1); // Taille la plus petite.
  display.setCursor(0,0); // X puis Y.
  for (byte I=0; I<128; I++) display.print(char(I)); display.update();
  Clic_sur_le_BP = false; while (!Clic_sur_le_BP) Tester_le_BP_A0(); // Attend un BP pour sortir.
  display.setCursor(0,0); display.clear();
  for (byte I=128; I<255; I++) display.print(char(I)); display.update();
  Clic_sur_le_BP = false; while (!Clic_sur_le_BP) Tester_le_BP_A0(); // Attend un BP pour sortir.
  display.setCursor(20,16); display.clear();
  display.print(char(16)); // Triangle doite
  display.print(char(17)); // Triangle gauche
  display.print(char(18)); // Flèche Haut/Bas
  display.print(char(24)); // Flèche Haut
  display.print(char(25)); // Flèche Bas
  display.print(char(26)); // Flèche Droite
  display.print(char(27)); // Flèche Gauche
  display.print(char(35)); // #
  display.print(char(126)); // Alternatif. (Tilde)
  display.print(char(130)); // é
  display.print(char(133)); // à
  display.print(char(218)); // BLANK
  display.print(char(229)); // µ
  display.print(char(232)); // Triangle haut/Bas
  display.print(char(233)); // Ohm
  display.print(char(240)); // PlusMoins
  display.print(char(175)); // >>
  display.print(char(174)); // <<
  display.update();
  INFINI: goto INFINI; }
  
// >>>>>>>>>>>>> Le B.P. est câblé en "Analogique" <<<<<<<<<<<<<<<<<<
void Tester_le_BP_A0() { // La lecture sur A0 donne 0 ou 930 maximum.
  int Numerisation_BP; // Valeur retournée par la CAN de A0.
  byte COMPTEUR; unsigned long Horloge_actuelle;
  Numerisation_BP = analogRead(0);
  if ((Numerisation_BP > 710) || (Numerisation_BP < 240)) {
    Clic_sur_le_BP = true; digitalWrite(LED_Arduino, LOW);
    Augmenter_le_choix = false;
    Horloge_actuelle = millis(); Clic_long = false;
    if (Numerisation_BP > 710) { Augmenter_le_choix = true; }
    delay(100); // Attendre_la_stabilisation du travail.
    // Attendre_la_stabilisation du repos :
    COMPTEUR = 0;
    while (COMPTEUR < NB_tests_antirebonds) {
      COMPTEUR++; Numerisation_BP = analogRead(0);
      if ((Numerisation_BP > 710) || (Numerisation_BP < 240)) { COMPTEUR = 0; } }
    digitalWrite(LED_Arduino, HIGH); // Éteindre la LED verte.
    if ((millis() - Horloge_actuelle) > 500) Clic_long = true; } }
