//proyecto 10 señal a osciloscopio
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
#define DAC_PIN 25 // Pin DAC1 del ESP32
// Vector de datos para generar la señal
const uint8_t signalData[] = {
128, 140, 152, 164, 175, 185, 194, 202, 209, 214,
218, 220, 221, 220, 218, 214, 209, 202, 194, 185,
175, 164, 152, 140, 128, 115, 103, 91, 80, 70,
61, 53, 46, 41, 37, 35, 34, 35, 37, 41,
46, 53, 61, 70, 80, 91, 103, 115,
128, 140, 152, 164, 175, 185, 194, 202, 209, 214,
218, 220, 221, 220, 218, 214, 209, 202, 194, 185,
175, 164, 152, 140, 128, 115, 103, 91, 80, 70,
61, 53, 46, 41, 37, 35, 34, 35, 37, 41,
46, 53, 61, 70, 80, 91, 103, 115,
128, 140, 152, 164, 175, 185, 194, 202, 209, 214,
218, 220, 221, 220, 218, 214, 209, 202, 194, 185,
175, 164, 152, 140, 128, 115, 103, 91, 80, 70,
61, 53, 46, 41, 37, 35, 34, 35, 37, 41,
46, 53, 61, 70, 80, 91, 103, 115
};
void setup() {
Serial.begin(9600);
pinMode(DAC_PIN, OUTPUT);
Wire.begin(21, 22); // Inicializar el bus I2C con los pines 21 y 22
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("No se pudo inicializar la pantalla OLED SSD1306"));
for(;;);
}
display.display();
delay(200);
// Limpiar el buffer del display
display.clearDisplay();
}
void loop() {
// Graficar la señal en el OLED
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Unir los puntos en el OLED y generar la señal en el DAC
for (int i = 0; i < sizeof(signalData) - 1; i++) {
// Dibujar línea en el OLED
int y1 = map(signalData[i], 0, 255, 64 - 1, 0);
int y2 = map(signalData[i + 1], 0, 255, 64 - 1, 0);
display.drawLine(i, y1, i + 1, y2, SSD1306_WHITE);
// Escribir en el DAC
dacWrite(DAC_PIN, signalData[i]);
// Pequeño retraso para la visualización
delay(10);
}
display.display();
delay(200);
}