Brauche Hilfe mit Potentiometer

Hallo,

ich habe einen Motor Shield und möchte mit Hilfe die Poti (10K) die Richtung einstellen.

Poti von Mitte nach links (Rückwärts mit PWM)
Poti Mitte (Bremsen)
Poti von Mitte nach rechts (Vorwärts mit PWM)

#define PWM_A 3          //Motor Shield
#define BRAKE_A 9        //Motor Shield
#define DIR_A 12         //Motor Shield
 
int JoyStick_Y = 5; //Y
 
void setup()
{
  pinMode(PWM_A, OUTPUT);
  pinMode(BRAKE_A, OUTPUT);
  pinMode(DIR_A, OUTPUT);
  Serial.begin(9600); // 9600 bps
}
void loop() {
  JoyStick_Y = analogRead(5);
  JoyStick_Y = map(JoyStick_Y, 512, 1023, 0, 255); //Forward
  JoyStick_Y = map(JoyStick_Y, 0, 512, 0, 255);    //Backward
  Serial.println(JoyStick_Y);
  
  if ((JoyStick_Y < 512) && (JoyStick_Y > 512)) {
    brake();
  }
  
  if (JoyStick_Y > 512) {
    forward();
  }
  
  if (JoyStick_Y < 512) {
    backward();
  }
 }

void forward() {
  digitalWrite(DIR_A, HIGH);
  digitalWrite(BRAKE_A, LOW);
  analogWrite(PWM_A, JoyStick_Y);
  delay(50);
}

void backward() {
  digitalWrite(DIR_A, LOW);
  digitalWrite(BRAKE_A, LOW);
  analogWrite(PWM_A, JoyStick_Y);
  delay(50);
}

void brake() {
  digitalWrite(BRAKE_A, HIGH);
  analogWrite(PWM_A, 0);
}

DEAFBOY:

  if ((JoyStick_Y < 512) && (JoyStick_Y > 512)) {

brake();
  }

Aha, Du hast Dich um die programmtechnische Umsetzung von "wer bremst verliert" in Arduino-Code bemüht!
]:smiley:

@jurs Geil :smiley:

@TS:
Wozu mappst du da zweimal?

mappe doch einfach die 0-1023 des Poti auf -255 bis + 255.
Wenns kleiner als -10 ist dann rückwärts mit -1*pwm
wens größer als 10 ist dann einfach den Wert nehmen und dazwischen wie Jurs schon bemerkte deine Bremsfunktion.

Ich kenn den Motorshield net, aber wenns ne doppel-H-Brücke ist vom Prinzip, dann vergiss nicht, dass du evtl. Pins umschreiben musst vom vorigen Zustand wenn du von vorwärts auf rückwärts gehst und nicht nur die jweiligen die du für den neuen Zustand brauchst.

dertester:
@jurs Geil :smiley:

@TS:
Wozu mappst du da zweimal?

mappe doch einfach die 0-1023 des Poti auf -255 bis + 255.
Wenns kleiner als -10 ist dann rückwärts mit -1*pwm
wens größer als 10 ist dann einfach den Wert nehmen und dazwischen wie Jurs schon bemerkte deine Bremsfunktion.

So einfach ist nun auch nicht.

Schon beim drehen nach links (-1) beschleunigt das Motor (das entspricht 255). Drehe ich weiter nach links, wird die Motor immer langsamer. Bei -255 angekommen steht Motor still.

Verhalten:
Poti nach rechts
0 bis 126 nimmt die Motorgeschwindigkeit proportional zu
Ab 127 steht die Motor plötzlich still.
Ab 140 dreht die Motor wieder

Poti nach links
Schon ab -1 dreht die Motor schnell
Dazwischen steht die Motor still, danach geht es wieder
Bei -255 steht die Motor still

This code works

// http://www.bajdi.com
// Potentiometer controlling small dc motor through standalone L298n board
 
const int in1 = 2;    // direction pin 1
const int in2 = 4;    // direction pin 2
const int ena = 3;    // PWM pin to change speed
 
int pot;              // integer for potentiometer
int fspeed;           // forward speed
int bspeed;           // backward speed
 
void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(ena, OUTPUT);
}
 
void loop() {
  pot = analogRead(A0);
 
  if (pot >= 480 && pot <= 540)
  {
    stop();
  }
  if (pot < 500)
  {
    fspeed = map(pot, 479, 0, 70, 250);
    forward(fspeed);
  }
  if (pot > 520)
  {
    bspeed = map(pot, 541, 1023, 70, 250);
    backward(bspeed);
  }
}
 
void stop()
{
  analogWrite(ena, 0);
}
 
void forward(int fspeed)
{
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  analogWrite(ena, fspeed);
}
 
void backward(int bspeed)
{
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  analogWrite(ena, bspeed);
}

MIt den Werten sind wirs noch nicht.

 if (pot >= 480 && pot <= 540)
  {
    stop();
  }
  if (pot < 500)
  {
    fspeed = map(pot, 479, 0, 70, 250);
    forward(fspeed);
  }
  if (pot > 520)
  {
    bspeed = map(pot, 541, 1023, 70, 250);
    backward(bspeed);
  }

zwischen 480 und 540 stop
unterhalb 500 linkslauf
oberhalb 520 rechtslauf

Was soll der Motor nun zwischen 480 und 500 bzw 520 und 540 tun?
Bremsen und beschleunigen?

Grüße Uwe