oled-i2c.ino
Una OLED I2C 128x64 muestra la tensión leída en A0 y el tiempo de funcionamiento. El framebuffer gestionado por Adafruit_SSD1306 permite gráficos completos (texto, curvas, sprites) con un solo bus de dos hilos.
Hardware
Un Teensy 3.2 (NXP Kinetis MK20DX256, Cortex-M4 @ 72 MHz, lógica de 3,3 V) alimentado por USB. 1 módulo OLED SSD1306 I2C (dirección 0x3C o 0x3D).
Cableado
SDA (pin 18 en Teensy 3.x, 18/19 en 4.x), SCL (19/16), VCC 3,3 V, GND. El módulo acepta lógica de 3,3 V.
Funcionamiento
Wire gestiona I2C a 400 kHz; el framebuffer 128x64 se construye en RAM y se transfiere de golpe con display(). El ADC de 12 bits da la tensión de A0 (máx 3,3 V).
Ejecución
Instala el plugin Teensyduino en el Arduino IDE, elige la placa « Teensy 3.2 », pulsa Subir y luego el botón del Teensy Loader. Atención: pines de 3,3 V.
Variantes
Dibujar una curva en tiempo real de las medidas (drawPixel en un bucle), o mostrar el nivel de un sensor táctil como barra.
oled-i2c.ino
// OLED 0,96" SSD1306 (I2C 0x3C) avec la bibliotheque Adafruit_SSD1306.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define ADRESSE 0x3C
#define RAZ -1 // pas de broche reset sur les modules I2C
Adafruit_SSD1306 ecran(128, 64, &Wire, RAZ);
void setup() {
Serial.begin(9600);
Wire.setClock(400000); // les Teensy montent a 400 kHz sans souci
if (!ecran.begin(SSD1306_SWITCHCAPVCC, ADRESSE)) {
Serial.println(F("OLED absent (verifier 0x3C/0x3D)"));
for (;;);
}
ecran.clearDisplay();
ecran.setTextColor(SSD1306_WHITE);
ecran.setTextSize(1);
ecran.setCursor(0, 0);
ecran.println(F("Teensy + OLED"));
ecran.display();
}
void loop() {
static unsigned long t0 = 0;
if (millis() - t0 < 500) return;
t0 = millis();
analogReadResolution(12);
float v = analogRead(A0) * 3.3 / 4095.0;
ecran.clearDisplay();
ecran.setCursor(0, 0);
ecran.print(F("A0 : ")); ecran.print(v, 2); ecran.println(F(" V"));
ecran.print(F("Up : ")); ecran.print(millis() / 1000); ecran.println(F(" s"));
ecran.display(); // transfert du framebuffer vers l'ecran
}