byte smer = 0; // 0 = stop, 1 = dopredu, 2 = dozadu, 3 = dolava, 4 = doprava
void setup() {
// Výstupy pre motor driver
DDRD |= (1 << 7) | (1 << 6) | (1 << 5) | (1 << 4);
// Vstupy pre tlačidlá
DDRB &= ~(1 << 0); // D8 ako vstup
DDRB &= ~(1 << 1); // D9 ako vstup
DDRB &= ~(1 << 2); // D10 ako vstup
DDRB &= ~(1 << 3); // D11 ako vstup
// Zapneme interné pull-up rezistory
PORTB |= (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3);
}
void loop() {
// Ak je tlačidlo stlačené, nastavíme smer
if ((PINB & (1 << 0)) == 0) { // D8 stlačený
smer = 1; // Dopredu
}
else if ((PINB & (1 << 1)) == 0) { // D9 stlačený
smer = 2; // Dozadu
}
else if ((PINB & (1 << 2)) == 0) { // D10 stlačený
smer = 3; // Doľava
}
else if ((PINB & (1 << 3)) == 0) { // D11 stlačený
smer = 4; // Doprava
}
// Podľa hodnoty smeru nastavíme motory
switch (smer) {
case 1: // Dopredu
PORTD |= (1 << 4); // IN1 HIGH
PORTD &= ~(1 << 5); // IN2 LOW
PORTD |= (1 << 6); // IN3 HIGH
PORTD &= ~(1 << 7); // IN4 LOW
break;
case 2: // Dozadu
PORTD &= ~(1 << 4); // IN1 LOW
PORTD |= (1 << 5); // IN2 HIGH
PORTD &= ~(1 << 6); // IN3 LOW
PORTD |= (1 << 7); // IN4 HIGH
break;
case 3: // Doľava
PORTD &= ~(1 << 4); // IN1 LOW
PORTD |= (1 << 5); // IN2 HIGH
PORTD |= (1 << 6); // IN3 HIGH
PORTD &= ~(1 << 7); // IN4 LOW
break;
case 4: // Doprava
PORTD |= (1 << 4); // IN1 HIGH
PORTD &= ~(1 << 5); // IN2 LOW
PORTD &= ~(1 << 6); // IN3 LOW
PORTD |= (1 << 7); // IN4 HIGH
break;
default: // Stop
PORTD &= ~((1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
break;
}
}