// For ESP32C3 SuperMini & M5Stamp C3U (using "ESP32C3 Dev Module" board)
// -> USB off + Left Button pressed -> USB on + Left button pressed -> Release Left button
// -> After Upload the code, press Right button (reset)
#include <Wire.h>
#include <U8g2lib.h>
#define I2C_SDA 4 //21
#define I2C_SCL 5 //22
#define LED_BLUE 8 //Built-in LED Blue SuperMini Board
#define Pin_AnalogSignal 1 //21 // Pin por el que leeremos el valor de la señal externa.
int AnalogSignal[120];
int printAnalogSignal[120];
bool flagDACbuffer = 0;
// OLED display 0.96 128x64 SSD1306 BiColor 0..14 Yellow 15..63 Blue
// --> u8g2.setFont(u8g2_font_scrum_tr); //https://github.com/olikraus/u8g2/wiki/fntlist8 fuente muy equilibrada, la _tf tambien
// --> u8g2.setFont(u8g2_font_bpixeldouble_tr); fuente un poco más BOLD (negrita)
//U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA); // 0.91 Display
//U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); //M0/ESP32/ESP8266/mega2560/Uno/Leonardo
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // 0.91 Display
//U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0); // 1.3 Display
void draw_welcome_display()
{
u8g2.firstPage();
do {
//keep this the same as it pages through the data generating the screen
//u8g2.setFont(u8g2_font_t0_18_tr);
//u8g2.setFont(u8g2_font_balthasar_titling_nbp_tr);
u8g2.setFont(u8g2_font_scrum_tr);
u8g2.drawStr(0,14,"ADN electronics");
u8g2.setFont(u8g2_font_profont22_tr); //https://github.com/olikraus/u8g2/wiki/fntlist8
u8g2.drawStr(4,40,"ESP32C3");
u8g2.drawStr(6,60,"U8g2lib");
//u8g2.setFont(u8g2_font_profont15_tr); //https://github.com/olikraus/u8g2/wiki/fntlist8
//u8g2.drawStr(6,60,"NPDC development");
} while ( u8g2.nextPage() );
delay(4000);
u8g2.clear();
}
void setup()
{
Serial.begin(115200);
pinMode(Pin_AnalogSignal, INPUT);
pinMode(LED_BLUE, OUTPUT);
for (int i=0; i<7; i++)
{
if (digitalRead(LED_BLUE) == HIGH) {digitalWrite(LED_BLUE, LOW);} // Set to LOW --> LED ON (lógica inversa)
else {digitalWrite(LED_BLUE, HIGH);} // Set to HIGH --> LED OFF (lógica inversa)
delay(500);
}
Wire.setPins(I2C_SDA, I2C_SCL);
Wire.begin();
u8g2.begin();
draw_welcome_display();
}
void loop()
{
f_DAC_getAnalogSignal();
f_DAC_U8g2refresh();
}
void f_DAC_getAnalogSignal()
{
if (flagDACbuffer==0)
{
for (int i=0; i<120; i++)
{
//AnalogSignal[i] = random(0,255);
AnalogSignal[i] = analogRead(Pin_AnalogSignal);
//Serial.println(AnalogSignal[i]);
}
flagDACbuffer = 1;
}
else
{
for (int i=0; i<120; i++)
{
AnalogSignal[i] = printAnalogSignal[i];
}
}
for (int i=0; i<120; i++) // Movemos los puntos ya leídos una posición a la izquienda.
{
if (i>0) {printAnalogSignal[i-1] = AnalogSignal[i];}
}
//printAnalogSignal[119] = random(0,255); // Nueva lectura del último punto [119]
printAnalogSignal[119] = analogRead(Pin_AnalogSignal);
}
void f_DAC_U8g2refresh()
{
u8g2.firstPage();
do { //keep this the same as it pages through the data generating the screen
u8g2.setFont(u8g2_font_scrum_tr);
u8g2.drawStr(0,13,"DAC ch.01 input");
u8g2.setFont(u8g2_font_scrum_tr);
u8g2.drawStr(0,32,"Signal :");
u8g2.setFont(u8g2_font_profont22_tr); //https://github.com/olikraus/u8g2/wiki/fntlist8
u8g2.setCursor(64,34);
u8g2.println(printAnalogSignal[119],1); // El 1 es para definir el redondeo a 1 decimal
byte x = 0;
byte y = 0;
for (int i=0; i<120; i++)
{
x = 4 + i;
y = 63 - map(printAnalogSignal[i], 0, 4095, 0, 22);
u8g2.drawPixel(x,y);
}
} while (u8g2.nextPage());
//delay(10);
}