sync
This commit is contained in:
BIN
ES/ES assignment 3.pdf
Normal file
BIN
ES/ES assignment 3.pdf
Normal file
Binary file not shown.
BIN
ES/ESAssignment3(KnightRider).zip
Normal file
BIN
ES/ESAssignment3(KnightRider).zip
Normal file
Binary file not shown.
BIN
ES/WhatsApp Video 2025-05-19 at 15.36.29(1).mp4
Normal file
BIN
ES/WhatsApp Video 2025-05-19 at 15.36.29(1).mp4
Normal file
Binary file not shown.
121
ES/main.cpp
Normal file
121
ES/main.cpp
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
#define LED_PIN PD7
|
||||||
|
#define BUTTON1_PIN PD5
|
||||||
|
#define BUTTON2_PIN PD2
|
||||||
|
|
||||||
|
#define LED_BUILTIN_MASK (1 << PB5)
|
||||||
|
#define LED_EXT_MASK (1 << LED_PIN)
|
||||||
|
#define BUTTON1_MASK (1 << BUTTON1_PIN)
|
||||||
|
#define BUTTON2_MASK (1 << BUTTON2_PIN)
|
||||||
|
|
||||||
|
#define KNIGHT_LED_MASK 0x0F // PB0–PB3 (pins 8–11)
|
||||||
|
|
||||||
|
|
||||||
|
unsigned long prevMillisBlink = 0;
|
||||||
|
unsigned long prevMillisDebounce1 = 0;
|
||||||
|
unsigned long prevMillisDebounce2 = 0;
|
||||||
|
unsigned long prevMillisKnight = 0;
|
||||||
|
|
||||||
|
bool ledState = false;
|
||||||
|
bool button1State = false;
|
||||||
|
bool button2State = false;
|
||||||
|
bool lastButton1Reading = false;
|
||||||
|
bool lastButton2Reading = false;
|
||||||
|
|
||||||
|
int knightIndex = 0;
|
||||||
|
bool knightForward = true;
|
||||||
|
uint16_t knightStates[] = {
|
||||||
|
0b0001, 0b0010, 0b0100, 0b1000, // Forward
|
||||||
|
0b0100, 0b0010 // Backward
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t knightStatesMulti[] = {
|
||||||
|
0b0001, // 1
|
||||||
|
0b0011, // 12
|
||||||
|
0b0111, // 123
|
||||||
|
0b1111, // 1234
|
||||||
|
0b1110, // 234
|
||||||
|
0b1100, // 34
|
||||||
|
0b1000, // 4
|
||||||
|
0b1100, // 34
|
||||||
|
0b1110, // 234
|
||||||
|
0b1111, // 1234
|
||||||
|
0b0111, // 123
|
||||||
|
0b0011 // 12
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
// Ext. LED op PD7 en button1 op PD5
|
||||||
|
DDRD |= LED_EXT_MASK;
|
||||||
|
DDRD &= ~BUTTON1_MASK;
|
||||||
|
|
||||||
|
// Internal LED op PB5, Knight Rider LEDs op PB0–PB3
|
||||||
|
DDRB |= LED_BUILTIN_MASK | KNIGHT_LED_MASK;
|
||||||
|
|
||||||
|
// Button2 op PD2 met interne pull-up
|
||||||
|
DDRD &= ~BUTTON2_MASK;
|
||||||
|
PORTD |= BUTTON2_MASK; // interne pull-up aan
|
||||||
|
|
||||||
|
Serial.begin(9600); // voor debug indien nodig
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
unsigned long currentMillis = millis();
|
||||||
|
|
||||||
|
// ---------- LED blink 4 Hz ----------
|
||||||
|
if (currentMillis - prevMillisBlink >= 125) {
|
||||||
|
prevMillisBlink = currentMillis;
|
||||||
|
ledState = !ledState;
|
||||||
|
if (ledState) {
|
||||||
|
PORTD |= LED_EXT_MASK;
|
||||||
|
} else {
|
||||||
|
PORTD &= ~LED_EXT_MASK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- Debounce Button 1 ----------
|
||||||
|
bool reading1 = (PIND & BUTTON1_MASK);
|
||||||
|
if (reading1 != lastButton1Reading) {
|
||||||
|
prevMillisDebounce1 = currentMillis;
|
||||||
|
lastButton1Reading = reading1;
|
||||||
|
}
|
||||||
|
if (currentMillis - prevMillisDebounce1 > 20) {
|
||||||
|
button1State = reading1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Built-in LED aan als button 1 is ingedrukt
|
||||||
|
if (button1State) {
|
||||||
|
PORTB |= LED_BUILTIN_MASK;
|
||||||
|
} else {
|
||||||
|
PORTB &= ~LED_BUILTIN_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- Debounce Button 2 ----------
|
||||||
|
bool reading2 = !(PIND & BUTTON2_MASK);
|
||||||
|
if (reading2 != lastButton2Reading) {
|
||||||
|
prevMillisDebounce2 = currentMillis;
|
||||||
|
lastButton2Reading = reading2;
|
||||||
|
}
|
||||||
|
if (currentMillis - prevMillisDebounce2 > 20) {
|
||||||
|
button2State = reading2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- Knight Rider ----------
|
||||||
|
if (currentMillis - prevMillisKnight >= 100) {
|
||||||
|
prevMillisKnight = currentMillis;
|
||||||
|
|
||||||
|
uint16_t value;
|
||||||
|
if (button2State) {
|
||||||
|
value = knightStates[knightIndex]; // niet ingedrukt → single (6 elementen)
|
||||||
|
knightIndex = (knightIndex + 1) % 6;
|
||||||
|
} else {
|
||||||
|
value = knightStatesMulti[knightIndex]; // ingedrukt → multi (12 elementen)
|
||||||
|
knightIndex = (knightIndex + 1) % 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
PORTB &= ~KNIGHT_LED_MASK;
|
||||||
|
PORTB |= (value & KNIGHT_LED_MASK);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user