/* 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;
byte X,Y;
int Dephasage;

void setup() {
  display.initialize(); delay(100);
  Dephasage = 0;}
  
void loop() {
  display.clear(); Affiche_cadre_du_haut(9); display.print("Dephasage porteuse.");
  display.drawLine(16, 4, 17, 3, WHITE);
  for (int Angle = 0; Angle < 360; Angle ++) {
  X = 64 + (sin(radians(Angle + Dephasage)) * 57);
  Y = 40 + (sin(radians(4 * Angle)) * 20);
  display.drawPixel(X, Y,WHITE);}
  Dephasage = Dephasage + 1; Afficher_le_graticule();
  display.update();}  
  
void Afficher_le_graticule() {
    // Trace le cadre extérieur.
  display.drawRect(0, 17, 128, 47, WHITE); // Coordonnées et taille.
  // Trace les quatre graduations Horizontales.
  for (byte I=24; I < 64; I=I+11) display.drawLine(0, I, 128, I, WHITE);
  // Trace les neuf graduations Verticales.
  for (byte I=12; I < 128; I=I+13) display.drawLine(I, 17, 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);}
