Dat is jammer 😞
OK, laten we wat tests doen.
Â
Test 1 - motor AAN met RC1
- het starten van de Arduino = motor niet aan
- als RC1 HIGH gaat -> Motor aan
Eerst kijken dus of we het RC1 deel aan de gang kunnen krijgen. Hiervoor zet ik even commentaar-tekens voor de code van rc2 (rood):
#include "CytronMotorDriver.h"
// Pins voor de motor: PWM = Pin 3, DIR = Pin 4
#define motorDIRpin 4
#define motorPWMpin 3
// Configure the motor driver.
CytronMD motor(PWM_DIR, motorPWMpin, motorDIRpin);
#define rc1pin 2 // gebruik pin 2 voor reedcontact 1
#define rc2pin 7 // gebruik pin 7 voor reedcontact 2
// deze functie draait 1x als de Arduino aangezet wordt
void setup() {
pinMode(rc1pin, INPUT);
pinMode(rc2pin, INPUT);
}
// de loop blijft herhalen tot de Arduino wordt uitgezet.
void loop() {
if (digitalRead(rc1pin) == HIGH) {
MotorActie();
}
delay(300); // kleine pauze
}
void MotorActie() {
// de stappen die nodig zijn om de motor aan te zetten en de omwenteling af te handelen
// dus: Motor AAN
motor.setSpeed(255); // 100% snelheid - evt aanpassen aan wat wenselijk is
// Laat motor lopen to rc2 gesloten wordt
//while (digitalRead(rc2pin) == LOW) {
// niks doen tot rc2 HIGH wordt, en dus niet meer LOW is
//}
// als rc2 gesloten wordt, stop de motor
//motor.setSpeed(0);
}
Dit om uit te sluiten dat RC2 niet te snel de motor weer uitzet.
Merk op: we kunnen eventueel de serieel monitor gebruiken om het e.e.a. zichtbaar te maken op de PC. Maar dat kunnen we, als dat onhandig is, ook later doen.
OK, als dit werkt (start Arduino = motor UIT, zodra RC1 HIGH => motor AAN, en deze blijft lopen), dan weten we dat de code voor RC1 goed is.
Â
Â
Test 2 - Motor UIT met RC2
Wat zou kunnen zijn is dat de Arduino te snel RC2 leest en daardoor meteen weer uitgaat.
We zouden dit even kunnen proberen op te vangen door een vertraging in de RC2 code te zetten.
Bijvoorbeeld (ik heb de commentaar tekens voor de RC2 code weer verwijderd in dit voorbeeld):
#include "CytronMotorDriver.h"
// Pins voor de motor: PWM = Pin 3, DIR = Pin 4
#define motorDIRpin 4
#define motorPWMpin 3
// Configure the motor driver.
CytronMD motor(PWM_DIR, motorPWMpin, motorDIRpin);
#define rc1pin 2 // gebruik pin 2 voor reedcontact 1
#define rc2pin 7 // gebruik pin 7 voor reedcontact 2
// deze functie draait 1x als de Arduino aangezet wordt
void setup() {
pinMode(rc1pin, INPUT);
pinMode(rc2pin, INPUT);
}
// de loop blijft herhalen tot de Arduino wordt uitgezet.
void loop() {
if (digitalRead(rc1pin) == HIGH) {
MotorActie();
}
delay(300); // kleine pauze
}
void MotorActie() {
// de stappen die nodig zijn om de motor aan te zetten en de omwenteling af te handelen
// dus: Motor AAN
motor.setSpeed(255); // 100% snelheid - evt aanpassen aan wat wenselijk is
delay(2000); // tijdelijke pauze om RC1/RC2 conflict te voorkomen
// Laat motor lopen to rc2 gesloten wordt
while (digitalRead(rc2pin) == LOW) {
// niks doen tot rc2 HIGH wordt, en dus niet meer LOW is
}
// als rc2 gesloten wordt, stop de motor
//motor.setSpeed(0);
}
Ik heb als delay waarde 2 seconden gekozen, ik weet niet of dat een geschikte waarde is, maar het zal wel lukken voor onze test.
Als de tweede test ook correct gaat, dan weten we in ieder geval dat de stappen werken en dat RC2 te snel gelezen werd.Â
Â
Als alternatief voor de RC2 stop kunnen we overwegen de omgekeerde optie te gebruiken. Daarmee bedoel ik: motor laten lopen zolang RC2 niet HIGH is.
Geen idee of dat uit gaat maken - ik vermoed van niet, maar de moeite om even te testen.
void MotorActie() {
// de stappen die nodig zijn om de motor aan te zetten en de omwenteling af te handelen
// dus: Motor AAN
motor.setSpeed(255); // 100% snelheid - evt aanpassen aan wat wenselijk is
delay(2000); // tijdelijke pauze om RC1/RC2 conflict te voorkomen
// Laat motor lopen to rc2 gesloten wordt
while (digitalRead(rc2pin) != HIGH) {
// niks doen tot rc2 zolang rc2 niet HIGH is
}
// als rc2 gesloten wordt, stop de motor
//motor.setSpeed(0);
}
Â
Ik vermoed echter dat de vertraging in Test 2 al de oplossing biedt.Â