#include <U8glib.h>
// OLED 디스플레이 객체 (I2C 인터페이스 방식)
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
const int JOY_X = A1; // 조이스틱 X축 핀
const int JOY_Y = A2; // 조이스틱 Y축 핀
int joyXValue = 0; // 조이스틱 X축 값
int joyYValue = 0; // 조이스틱 Y축 값
int totalValue = 0; // 조이스틱의 총합
void setup()
{
Serial.begin(9600);
// 아날로그 핀 모드 설정
pinMode(JOY_X, INPUT);
pinMode(JOY_Y, INPUT);
}
void loop()
{
readAnalogValues(); // 조이스틱 X, Y값 읽기
calculatePlusXY(); // 조이스틱 + 방향 값 계산
calculateMinusXY(); // 조이스틱 - 방향 값 계산
printOLED(); // OLED에 totalValue 값 표시
printSerial(); // 시리얼 모니터에 totalValue 값 출력
delay(100); // 화면 갱신을 위한 딜레이 (100ms)
}
void readAnalogValues()
{
joyXValue = analogRead(JOY_X);
joyYValue = analogRead(JOY_Y);
}
void calculatePlusXY()
{
// X축 오른쪽 이동이면 + 값 계산
if (joyXValue > 600)
{
totalValue++;
}
// Y축 위로 이동이면 + 값 계산
if (joyYValue > 600)
{
totalValue++;
}
}
void calculateMinusXY()
{
// X축 왼쪽 이동이면 - 값 계산
if (joyXValue < 400)
{
totalValue--;
}
// Y축 아래로 이동이면 - 값 계산
if (joyYValue < 400)
{
totalValue--;
}
}
void printOLED()
{
// OLED 초기화 및 출력
u8g.firstPage();
do
{
u8g.setFont(u8g_font_6x10); // 기본 폰트 사용
char buf[20];
sprintf(buf, "Total: %d", totalValue);
u8g.drawStr(0, 12, buf);
} while (u8g.nextPage());
}
void printSerial()
{
Serial.print("Total Value: ");
Serial.println(totalValue);
}