/*
Display OLED 0,98", 128x64, 0x3C
*/
#include <Adafruit_GFX.h> // Per le funzioni grafiche (rette, cerchi ...)
#include <Adafruit_SSD1306.h> // NECESSARIA
// "define" delle dimensioni del display (serviranno per creare l'istanza del display)
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define SCREEN_ADDRESS 0x3C // spesso 0x3D for 128x64, 0x3C for 128x32 (qui vedi diagram.json)
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are:
// On an arduino UNO: A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO: 2(SDA), 3(SCL), ...
// Creo un'istanza del display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT);
void setup() {
Serial.begin(9600);
// Inizializzazione del display con l'indirizzo 0x3C
// genera la tensione del display dai 3.3V internamente
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
// Se non sono riuscito ad inizializzare il display
// creo un loop infinito ed impedisco al programma di andare avanti
Serial.println(F("SSD1306 allocation failed"));
while (true);
}
/*
// Pulisco il buffer
display.clearDisplay();
// Applico la pulizia al display
display.display();
//I due passaggi qui sopra evitano di mostrare il logo adafruit all'avvio
*/}
void loop() {
stampa_testo_semplice();
delay(2000);
stampa_rettangolo();
delay(2000);
stampa_linee();
delay(2000);
stampa_testo_su_preced();
delay(2000);
}
void stampa_testo_semplice() {
// Ripulisce il buffer del display
display.clearDisplay();
// Colore del testo "bianco"
display.setTextColor( WHITE);
// Dimensione del testo
display.setTextSize(2);
// Sposta il cursore a metà altezza del display
// display.setCursor(0, SCREEN_HEIGHT / 1);
// Sposta il cursore a 12 pixel dall'alto
display.setCursor(0, 12);
// Stampa una scritta su due righe
display.println(" ARI Udine ");
display.println(" Arduino");
// Manda in stampa
display.display();
}
void stampa_rettangolo() {
// Ripulisce il buffer del display
display.clearDisplay();
// Rettangolo PIENO largo quanto l'intera larghezza del display e alto 16 pixel
display.fillRect(0, 0, SCREEN_WIDTH, 16, WHITE);
// Colore del testo invertito
display.setTextColor(BLACK, WHITE);
// Dimensione del testo (la minima)
display.setTextSize(1);
// Cursore a X = 0 e Y = 4
display.setCursor(0, 4);
// Esempio di stampa
display.print(" Esempio rettangolo");
// Manda in stampa
display.display();
}
void stampa_linee() {
//Ripulisce il buffer del display
display.clearDisplay();
// Creo le linee sui bordi del display
// Coord. inizio (X=0,Y=0), coord. fine (X=largh. display,Y=0)
// Linea orizz.alta
display.drawLine(0, 0, SCREEN_WIDTH-1, 0, WHITE);
// Coord. inizio (X=...,Y=...), coord. fine (X=largh. display,Y=altezza display)
// Linea orizz.bassa
display.drawLine(0, SCREEN_HEIGHT-1, SCREEN_WIDTH-1, SCREEN_HEIGHT-1, WHITE);
// Linea verticale sx display
display.drawLine(0, 0, 0, SCREEN_HEIGHT-1, WHITE);
// Linea verticale dx display
display.drawLine(SCREEN_WIDTH-1, 0, SCREEN_WIDTH-1, SCREEN_HEIGHT-1, WHITE);
// Manda in stampa
display.display();
}
void stampa_testo_su_preced() {
// NON ripulisce il buffer
// display.clearDisplay();
// Colore del testo a "bianco"
display.setTextColor( WHITE);
// Dimensione del testo (grande)
display.setTextSize(5);
// Cursore 20 pixel a destra e ad 1/4 dell'altezza del display
display.setCursor(20, SCREEN_HEIGHT / 4);
// Stampa scritta
display.println("ARI");
// Manda in stampa
display.display();
}