//Zo zou de code voor de DC-motorsturing die je upload naar je Arduino Nano er ongeveer moeten uitzien
//TK = Tegen de klok
//K = Met de klok
int TK_TK_button = 3;
int K_K_button = 4;
int TK_K_button = 5;
int K_TK_button = 6;
int PWM_M1 = 10; // Deze wordt verbonden met A-IB van de motordriver
int PWM_M2 = 11; // B-IB
int Dir_M1 = 12; // A-IA
int Dir_M2 = 13; // B-IA
int Speed_pot = A0; // Deze wordt verbonden met de potentiometer
int Speed_read = 0;
int Speed_write = 0;
void setup()
{
pinMode(TK_TK_button, INPUT);
pinMode(K_K_button, INPUT);
pinMode(TK_K_button, INPUT);
pinMode(K_TK_button, INPUT);
pinMode(PWM_M1, OUTPUT);
pinMode(PWM_M2, OUTPUT);
pinMode(Dir_M1, OUTPUT);
pinMode(Dir_M2, OUTPUT);
Serial.begin(9600);
}
void loop()
{
// Achteruit
if (digitalRead(TK_TK_button) == HIGH) {
Speed_read = analogRead(Speed_pot);
// Deze mapfunctie gaat van 50 naar 255. Deze 50 is de duty cycle waar de motor genoeg stroom komt om te beginnen draaien
// Bij een kleinere duty cycle staat deze stil. Het kan zijn dat dit bij jullie schakeling een ander getal is.
// Daarom is het beste dat deze waarde bepaald worden door dit zelf te testen
Speed_write = map(Speed_read, 0, 1024, 50, 255);
digitalWrite(Dir_M1, HIGH); //IA
digitalWrite(Dir_M2, HIGH);
// (1- duty cycle) bepaald de snelheid wanneer de IA op 1 staat
// Waarom dit is wordt een aantal keren uitgelegd in het labo en de theorieles 9 en 10
analogWrite(PWM_M1, 255 - Speed_write); //IB
analogWrite(PWM_M2, 255 - Speed_write);
}
else {
// Vooruit
if (digitalRead(K_K_button) == HIGH) {
Speed_read = analogRead(Speed_pot);
Speed_write = map(Speed_read, 0, 1024, 50, 255);
digitalWrite(Dir_M1, LOW);
digitalWrite(Dir_M2, LOW);
//duty cycle bepaald de snelheid
analogWrite(PWM_M1, Speed_write);
analogWrite(PWM_M2, Speed_write);
}
else {
//Links
if (digitalRead(TK_K_button) == HIGH) {
Speed_read = analogRead(Speed_pot);
Speed_write = map(Speed_read, 0, 1024, 50, 255);
digitalWrite(Dir_M1, HIGH);
digitalWrite(Dir_M2, LOW);
analogWrite(PWM_M1, 255 - Speed_write);
analogWrite(PWM_M2, Speed_write);
}
else {
// Rechts
if (digitalRead(K_TK_button) == HIGH) {
Speed_read = analogRead(Speed_pot);
Speed_write = map(Speed_read, 0, 1024, 50, 255);
digitalWrite(Dir_M1, LOW);
digitalWrite(Dir_M2, HIGH);
analogWrite(PWM_M1, Speed_write);
analogWrite(PWM_M2, 255 - Speed_write);
}
// Hier is een geneste if else structuur toegepast
// Dit om ervoor te zorgen dat de volgende else alleen maar voorkomt wanneer op geen
// elke knop wordt gedrukt
else {
Speed_write = 0;
// Hier worden beide motors de richting op LOW gezet
// Als je dit niet doet kan het zijn dat een Speed_write van 0 overeen komt met een maximale snelheid
// als de richting toevallig nog op HIGH zou staan.
digitalWrite(Dir_M1, LOW);
digitalWrite(Dir_M2, LOW);
analogWrite(PWM_M1, Speed_write);
analogWrite(PWM_M2, Speed_write);
}
}
}
}
}