/* Petit programme pour tester l'afficheur miniature OLED 128 x 64.
   Simulation d'un écran oscilloscope. */

#include <Adafruit_ssd1306syp.h>

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

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

// variables du programme;
boolean Augmente;
byte X,Y;
byte Amplitude;
int Dephasage;

void setup() {
  display.initialize(); delay(100);
  Dephasage = 0; Augmente = true; Amplitude = 5;}
  
void loop() {
  display.clear(); Afficher_la_grille();
  Dephasage = Dephasage + 15; // Déphase la courbe de 1°.
  if (Augmente) Amplitude++; else Amplitude--;
  if(Amplitude == 28) Augmente = false; if(Amplitude == 5) Augmente = true; 
  // Trace deux arcs de sinusoïde.
  for (byte I=0; I < 128; I++)
      // 0.1 = 4 * PI / 128. On désire un angle de 4 PI si I = 128.
      // Mult par 28 pour avoir une amplitude de 56 pixels.
      // 32 constant pour placer le zéro à H/2.
      {X = I; Y = 32 + (sin((I*0.1) + radians(Dephasage)) * Amplitude); display.drawPixel(X, Y,WHITE);}
  Effacer_zone(27, 41, 13); display.drawLine(27, 40,99, 40, BLACK);
  display.setCursor(33,41); display.print("TELEMESURES.");
  display.update();} // Transfère les pixels sur l'écran LCD.  
  
void Afficher_la_grille() {
    // Trace le cadre extérieur.
  display.drawRect(0, 0, 128, 64, WHITE); // Coordonnées et taille.
  // Trace les quatre graduations Horizontales.
  for (byte I=12; I < 64; I=I+13) display.drawLine(0, I, 128, I, WHITE);
  // Trace les neuf graduations Verticales.
  for (byte I=13; I < 128; I=I+13) display.drawLine(I, 0, I, 63, WHITE);}

void Effacer_zone(byte X, byte Y, byte NB_caracteres) {
  byte I = 10; 
  for (byte J=0; J < I; J++)
       display.drawLine(X, Y + J, X + (NB_caracteres * 6), Y + J, BLACK);}

void CADRE_UP() {display.drawRect(0, 0, 128, 16, WHITE);}
void CADRE() {display.drawRect(0, 16, 128, 48, WHITE);}
void Affiche_cadre_du_haut(byte X) {CADRE_UP(); display.setCursor(X,4);}
