#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// #include <Adafruit_SH1106.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int potPin = A1; // Potenciometr připojený k pinu A0
int showtime = 1; // Zobrazit čas základny (1 = ano, 0 = ne)
int grid = 10; // Zapnout pomocnou mřížku (1 = ano, 0 = ne)
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)
display.clearDisplay(); // vymazání displeje
display.setTextSize(1);
display.setTextColor(WHITE);
display.display(); // aktualizace displeje
}
void loop() {
// Čtení hodnoty z potenciometru a nastavení časové základny
int timeBase = map(analogRead(potPin), 0, 1023, 0, 1000); // Přepočet hodnoty z potenciometru na časovou základnu
// Zobrazení vstupního signálu na displeji jako na osciloskopu
display.clearDisplay();
display.drawLine(0, SCREEN_HEIGHT/2, SCREEN_WIDTH, SCREEN_HEIGHT/2, WHITE); // Vyčištění displeje a kreslení osy Y
for (int i = 0; i < SCREEN_WIDTH; i++) {
int signal = map(analogRead(A0), 0, 1023, SCREEN_HEIGHT, 0); // Přepočet hodnoty z analogového pinu na výšku signálu na displeji
display.drawPixel(i, signal, WHITE); // Kreslení bodu signálu na displeji
//
delayMicroseconds(timeBase);
}
// Zobrazení času základny na displeji
if (showtime == 1) {
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("Time Base:");
display.print(timeBase);
display.print(" ms/div");
}
// Zapnutí pomocné mřížky
if (grid == 1) {
// Kód pro zobrazení mřížky na displeji
int gridWidth = 8;
int gridHeight = 4;
int cellWidth = SCREEN_WIDTH / gridWidth;
int cellHeight = SCREEN_HEIGHT / gridHeight;
for (int x = cellWidth; x < SCREEN_WIDTH; x += cellWidth) {
display.drawLine(x, 0, x, SCREEN_HEIGHT - 1, WHITE);
}
for (int y = cellHeight; y < SCREEN_HEIGHT; y += cellHeight) {
display.drawLine(0, y, SCREEN_WIDTH - 1, y, WHITE);
}
}
display.display(); // Aktualizace displeje
}