#include <Arduino.h>
#include <Wire.h>
#include <U8g2lib.h>
// Pin definitions
#define SDA_PIN 21
#define SCL_PIN 22
#define ADC1_PIN 33
#define ADC2_PIN 35
#define BUTTON_PIN 4
// OLED display dimensions
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 128
int X = SCREEN_WIDTH/2-16/2;
int Y = SCREEN_HEIGHT/2-16/2;
int X1 = SCREEN_WIDTH/2;
int Y1 = SCREEN_HEIGHT/2;
bool X2;
bool Y2;
// Initialize U8g2 library for SH1106 in I2C mode
U8G2_SH1107_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL_PIN, /* data=*/ SDA_PIN);
void setup() {
// Initialize serial communication
Serial.begin(115200);
// Initialize the OLED display
u8g2.begin();
u8g2.clearBuffer();
u8g2.drawFrame(X, Y, 16, 16);
u8g2.drawCircle(X1, Y1, 8);
u8g2.sendBuffer();
// Configure ADC pins
analogReadResolution(12); // Set resolution to 12-bit (0-4095)
// Configure button pin
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
int potValueY = analogRead(ADC1_PIN); // Read analog value from ADC1
int potValueX = analogRead(ADC2_PIN); // Read analog value from ADC2
if((potValueX <= 400) && (X < 109)){ //rechts
X = X + 3;
}else if((potValueX >= 3900) && (X > 3)){ //links
X = X - 3;
}
if((potValueY <= 400) && (Y < 109)){ //onder
Y = Y + 3;
}else if((potValueY >= 3900) && (Y > 3)){ //boven
Y = Y - 3;
}
if(X1 >= 120){
X2 = !X2;
}else if(X1 <= 8){
X2 = !X2;
}
if(Y1 >= 120){
Y2 = !Y2;
}else if(Y1 <= 8){
Y2 = !Y2;
}
if(X2 == 0){
X1--;
}else{
X1++;
}
if(Y2 == 0){
Y1 = Y1 - 2;
}else{
Y1 = Y1 + 2;
}
u8g2.clearBuffer();
u8g2.drawCircle(X1, Y1, 8);
u8g2.drawFrame(X, Y, 16, 16);
u8g2.sendBuffer();
if (digitalRead(BUTTON_PIN) == LOW) {
X = SCREEN_WIDTH/2-16/2;
Y = SCREEN_HEIGHT/2-16/2;
u8g2.clearBuffer();
u8g2.drawFrame(X, Y, 16, 16);
u8g2.sendBuffer();
delay(200); // Debounce delay
}
}
Loading
grove-oled-sh1107
grove-oled-sh1107