/*-----------------------------------------------------------------------------
Auteur : Ariane Lefèvre
Datum : 20/02/2025
Cursus : Leren programmeren met Arduino - Les 4
Functie: flightsimulator
---------------------------------------------------------------------------*/
// Bibliotheken
#include <Servo.h>
#include <Adafruit_SSD1306.h>
// Definiëren
#define DEBUG 1 // 0=debug mode is uit; 1=debug mode is aan
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
// Objecten
Servo myServo;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// #define PIN_NAME pinValue(0..13, A0..A5)
#define PIN_JOYSTICK_HORIZONTAAL A1
#define PIN_SERVO 10
// Definiëren van andere variabelen
#if DEBUG
#define debug(x) Serial.print(x)
#define debugln(x) Serial.println(x)
#else
#define debug(x)
#define debugln(x)
#endif
// Lijsten
// Variabelen
unsigned long teller = 0;
byte links = 31;
byte rechts = 31;
//int hoek = 0;
int horz;
// Functies
void setupBegin();
void setupEnd();
void setPinMode();
void bedienJoystick();
void beweegServo();
void tekenLijnen();
void setup() {
setupBegin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
myServo.attach(10); // attaches the servo on pin 10 to the servo object
setPinMode();
setupEnd();
}
void loop() {
bedienJoystick();
beweegServo();
tekenLijnen();
}
void setupBegin() {
if (DEBUG == 1) {
// Open communicatie naar het scherm
Serial.begin(115200);
while (!Serial) {} // wacht totdat communicatie naar het scherm open is
}
debugln("Setup - Begin");
}
void setupEnd() {
debugln("Setup - Einde");
debugln("--------------------------------------------------");
}
void setPinMode() {
debugln("Zet modus van de aangesloten pinnen");
pinMode(PIN_JOYSTICK_HORIZONTAAL, INPUT);
}
void bedienJoystick() {
horz = analogRead(PIN_JOYSTICK_HORIZONTAAL);
debugln(horz);
}
void beweegServo() {
myServo.write(map(horz, 0, 1023, 120, 60));
}
void tekenLijnen() {
byte re;
byte li;
byte spatie = 6;
byte hoek = 20;
byte rest = teller % 2;
for (int i = 0; i < 4; i = i + 1) {
li = links + (i * spatie);
re = rechts + (i * spatie);
if (i != 0) {
li += rest;
re += rest;
}
if (horz == 0) {
li += hoek;
re -= hoek;
} else {
if (horz == 1023) {
li -= hoek;
re += hoek;
}
}
display.drawLine(0, li, 128, re, SSD1306_WHITE);
//display.drawLine(X0, Y0, X1, Y1, SSD1306_WHITE)
}
display.display();
display.clearDisplay();
delay(50);
teller = teller + 1;
}