reka6 RTDM (Read That Damn Manual):
Ich habe Dir ja die Referenzen angegeben, wie du die Motoren
anschliessen und steuern solltest.
Dein Programm kann nicht funktionieren denn es läuftt nach dem Prinzip folgender Anekdote:
Sagt der Beifahrer zu Fahrer: Du steuerst das Auto und gibst Gas, unterdessen rühre ich für dich im Öl ..."
Um auf deine Schaltung und Programm zurückzukommen:
Du hast einen Gleichstrommotor und eine Batterie. Du schliesst den einen Anschluss des Motors an +Pol der Batterie an, den anderen Anschluss an den -Pol. Dann dreht sich der Motor zb nach links. Vertauschst Du die Anschlüsse, dann ändert sich die Drehrichtung des Motors. Niimmst Du einen Anschluss fort oder legst beide entweder auf den Plus- oder Minuspol dann steht der Motor still. Mit dem Motor Treiber Baustein steuerst Du über dessen digitalen Eingänge an welchen Pol der Stromversorgung ein Motoranschluss gelegt wird:
Mit digitalWrite(4,0) den einen Anschluss auf minus (GND), mit digitalWrite(4,1) auf plus (Vcc). Analog steuerst Du mit digitalWrite(5,0) und digitalWrite(5,1) die Stromversorgung den anderen Anschluss des Motors. Mit dem PWM Anschluss steuerst Du mit analogWrite(enA,pwmOutput) wievel Strom der Motor bekommen soll (Werte zwischen 0 und 255), dh. wie schnell er sich drehen soll.
Für den Befehl digitalWrite(4,x) gibt es für x als sigenannter Digitalwert nur 2 Zustände: 0 oder 1 bzw. TRUE oder FALSE. Der Atmega328 Microkontroller des Arduino ist eine 8 Bit Maschine, x kann also im Prinzip einen Wert zwischen 0 und 255 annehmen. Da jedoch nur das niedrigste Bit für den Zusand 0 oder 1 eine Rolle spielt, enspricht x = gerade einer 0, x = ungerade einer eins. Indem Du in deinem Programm den Analog-Wert des Potentiometers (=val) für den Digtalausgang (digitalWrite(5,val)) verwendest, rührst Du damit wie oben beschrieben bildlich gesprochen im Öl: Das Potentiometer als Zufallsgenerator (mit Rauschen) steuert den Motor dauernd zwischen vorwärts, neutral und ruckwärts!
Mein folgender Vorschlag für deinen sollte eigentlich also für dein Projekt funktionieren:
`void loop() {
// put your main code here, to run repeatedly:
int val = analogRead(A1);
// Motor soll sich nach rechts drehen
if (val < 491){
int pwmOutput = map (val, 1, 490, 255, 0);
analogWrite(enA, pwmOutput);
digitalWrite (5,0);
digitalWrite (4, 1);
}
// Motor soll sich nach links drehen
if (val > 529 && val < 1023){
int pwmOutput = map (val, 530, 1023, 0, 255);
digitalWrite (4,0);
digitalWrite (5,1);
analogWrite(enA, pwmOutput);
}
// Motor soll stillstehen
if (val > 490 && val < 530){
int pwmOutput = map (val, 491, 529, 0, 0);
digitalWrite (4,0);
digitalWrite(5, 0);
analogWrite(enA, pwmOutput);
}`
Yngvar
PS. Bei val=491 bzw. val =529 befindet sich bei deinem Code-Vorschlag der Motor bzw. der PWM-Ausgang in einem undefinierten Zustand ....