#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// IR sensor pins
const int irPins[6] = {PA0, PA1, PA6, PA7, PB0, PB1};
int irValues[6];
int barHeights[6];
void setup() {
Serial.begin(9600);
for (int i = 0; i < 6; i++) {
pinMode(irPins[i], INPUT);
}
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("OLED not found!"));
while (1);
}
display.clearDisplay();
display.display();
}
void loop() {
// Read IR values and convert to bar height (max 50 pixels)
for (int i = 0; i < 6; i++) {
irValues[i] = analogRead(irPins[i]);
barHeights[i] = map(irValues[i], 0, 4095, 0, 50); // for 12-bit ADC
}
display.clearDisplay();
// Draw axis
display.drawLine(0, SCREEN_HEIGHT - 1, SCREEN_WIDTH, SCREEN_HEIGHT - 1, SSD1306_WHITE);
display.drawLine(0, 0, 0, SCREEN_HEIGHT - 1, SSD1306_WHITE);
// Draw bars
for (int i = 0; i < 6; i++) {
int barWidth = 16;
int spacing = 2;
int x = i * (barWidth + spacing) + 2;
int barHeight = barHeights[i];
int y = SCREEN_HEIGHT - 1 - barHeight;
display.fillRect(x, y, barWidth, barHeight, SSD1306_WHITE);
// Optional: label under each bar
display.setCursor(x + 2, SCREEN_HEIGHT - 8);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.print(i);
}
display.display();
delay(100);
}
Loading
stm32-bluepill
stm32-bluepill