#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
float valorAnalogico = 0;
float voltaje = 0;
float graficaVoltaje = 0;
float voltaje_f=0;
int x[128]; //buffer de la grafica
int y[128]; //buffer secundario de la grafica
void setup() {
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.setRotation(0);
display.dim(true);
display.setTextColor(WHITE);
display.setTextSize(1);
//llenamos las matrices con un valor fuera del rango de medicion >1023
for(int i=127;i>=0;i--){
x[i]=9999;
}
for(int i=127;i>=0;i--){
y[i]=9999;
}
Serial.println(F("Display initialized"));
}
void loop() {
Serial.println("Inicio");
//limpia el buffer del display
display.clearDisplay();
// Prueba un solo `print`
display.setCursor(0, 0);
display.print(F("277"));
display.setCursor(0, 11);
display.print(F("223"));
display.setCursor(0, 22);
display.print(F("169"));
display.setCursor(0, 32);
display.print(F("111"));
display.setCursor(0, 43);
display.print(F("57"));
display.drawLine(15, 0, 25, 0, WHITE);
display.drawLine(15, 11, 25, 11, WHITE);
display.drawLine(15, 22, 25, 22, WHITE);
display.drawLine(15, 32, 25, 32, WHITE);
display.drawLine(15, 43, 25, 43, WHITE);
//dibuja eje X y Y
display.drawLine(0, 53, 127, 53, WHITE);
display.drawLine(25, 53, 25, 0, WHITE);
valorAnalogico = analogRead(A0); //lee el valor analogico del pin A0
voltaje=(valorAnalogico*5)/1024; //calcula el valor en voltaje
voltaje_f=map(valorAnalogico,0,1023,0,277.5);
graficaVoltaje=map(valorAnalogico,0,1023,53,0); //escala el valor analogico a un pixel imprimible en pantalla
x[127]=graficaVoltaje; //asigna el valor escalado a el ultimo dato de la matriz
for(int i=127;i>=25;i--){
display.drawPixel(i, x[i], WHITE); //dibuja punto a punto el contenido de x
y[i-1]=x[i]; //guarda la informacion desplazada una posicion temporalmente en y
}
//imprime el voltaje en texto
display.setCursor(25, 57);
display.print(voltaje_f,1);
display.print(F(" mmHg "));
Serial.print("Presión: ");
Serial.println(voltaje_f,1);
for(int i=127;i>=0;i--){
x[i]=y[i]; //envia los datos desplazados de vuelta a la variable x
}
display.display(); //despliega la informacion del buffer en la pantalla
delay(1000); // Pausa para observar el comportamiento
Serial.println("Fin");
}
Loading
ssd1306
ssd1306