#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);
#define CLK 2
#define DT 3
#define SW 4
#define EXTRA_LED 6
int lastClk;
int bright = 0;
void setup() {
pinMode(CLK, INPUT_PULLUP);
pinMode(DT, INPUT_PULLUP);
pinMode(SW, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(EXTRA_LED, OUTPUT);
lastClk = digitalRead(CLK);
//OLED初始化
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
int clkVal = digitalRead(CLK);
int dtVal = digitalRead(DT);
if(clkVal != lastClk)
{
if(dtVal != clkVal)
{
bright +=5;
if(bright>255) bright=255;
}else{
bright -=5;
if(bright<0) bright=0;
}
analogWrite(LED_BUILTIN, bright);
analogWrite(EXTRA_LED, bright);
lastClk = clkVal;
//计算百分比
int percent = map(bright,0,255,0,100);
display.clearDisplay();
display.setCursor(0,0);
display.print("Brightness: ");
display.print(percent);
display.println(" %");
display.display();
}
if(digitalRead(SW) == LOW)
{
bright = 0;
analogWrite(LED_BUILTIN, bright);
analogWrite(EXTRA_LED, bright);
int percent = map(bright,0,255,0,100);
display.clearDisplay();
display.setCursor(0,0);
display.print("Brightness: ");
display.print(percent);
display.println(" %");
display.display();
delay(200);
}
delay(10);
}
Loading
st-nucleo-c031c6
st-nucleo-c031c6
Loading
ssd1306
ssd1306