INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
SR-04 + UNO + 4WD Roboter, Abstandsfehler
20.09.2014, 22:16
Beitrag #17
RE: SR-04 + UNO + 4WD Roboter, Abstandsfehler
Big Grin

Da hast du Recht Wink allerdings finde ich in letzter Zeit hier in diesem Forum wenige "schreibfreudige" Leute Tongue

Bin sehr froh das du mir so oft Hilfst Smile

Ps. sobald ich selbst etwas herausfinde melde ich mich Wink



Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 22:42
Beitrag #18
RE: SR-04 + UNO + 4WD Roboter, Abstandsfehler
Hi,
noch was: Eine Frage hast Du noch nicht geklärt: Was sind das für Motoren? Wirklich ganz normale Gleichstrommotoren oder doch Stepper?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.09.2014, 00:07
Beitrag #19
RE: SR-04 + UNO + 4WD Roboter, Abstandsfehler
Hey Wink

Ganz normale kleine DC Motoren.

Bild Link: https://cdn.sparkfun.com//assets/parts/8...089-02.jpg

Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.09.2014, 08:46 (Dieser Beitrag wurde zuletzt bearbeitet: 21.09.2014 09:24 von Thorsten Pferdekämper.)
Beitrag #20
RE: SR-04 + UNO + 4WD Roboter, Abstandsfehler
Hi,
tja, gehen wir mal davon aus, dass da kein Hardware-Fehler vorliegt. Anscheinend wird Dein Motor-Shield nicht mehr gebaut. Es gibt inzwischen ein neues. Möglicherweise passt Deine Version der Library nicht mehr dazu. Oder Du hast eine veraltete Form der Library.
Das ganze muss mit delay() funktionieren. Ansonsten ist da was faul.
Ich würde an Deiner Stelle mal folgendes versuchen:
Klemme mal alles ab, was nicht direkt zu den Motoren gehört. Also Servo und Ultraschallsensor. Auf Deinen Fotos habe ich auch ein LCD gesehen. Falls das angeschlossen ist, dann klemme das auch mal ab. Probier' Deinen einfachst-Sketch (mit delay) damit aus.
Wenn das auch nicht tut, dann probier mal den Sketch am Ende dieses Links aus:
http://playground.arduino.cc/Main/AdafruitMotorShield
(Weiterhin nur das nötigste angeschlossen.)
Gruß,
Thorsten

Hi,
ich hab jetzt noch was gefunden: Die AFMotor-Library spielt mit den PWM-Frequenzen rum. Das beeinflusst in der Regel auch die Timer, die für delay(), millis() und Servos benutzt werden. Das könnte das seltsame Verhalten in Verbindung mit delay() erklären.
Abhilfe müsste der Sketch unter http://playground.arduino.cc/Main/AdafruitMotorShield schaffen. Damit müsste es dann klappen, da der nichts mit der PWM-Frequenz anstellt.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.09.2014, 12:01
Beitrag #21
RE: SR-04 + UNO + 4WD Roboter, Abstandsfehler
Hey,

1.) also ich hatte gestern ja schon ohne die ganze andre Hardware getestet um deine Frage zu beantworten Wink

2.) Ich habe jetzt das getestet code:

Code:
// Simple Motor Shield sketch
// -----------------------------------
//
// By arduino.cc user "Krodal".
// June 2012
// Open Source / Public Domain
//
// Using Arduino 1.0.1
//
// A simple sketch for the motor shield,
// without using the Adafruit library.
//
// The outputs can be used for DC-motors
// (either full H-bridge or just On and Off), lights,
// relays, solenoids, etc.
// But stepper motors can not be used !
// Servo motors can be used with the default Servo library.
//
// A maximum of 4 DC motors can be used with full-bridge,
// or a maximum of 8 normal outputs, or a combination.
// Two servo motors can always be used, they use the +5V
// of the Arduino board, so the voltage regulator could
// get hot.
//
// Tested with an Ebay clone with the Arduino Uno.
//
// Parts of the code are from an old Adafruit Motor Shield
// library, which was public domain at that time.
// This code is also public domain
//
// This simplified program is using the normal
// Arduino library functions as much as possible.
//
// The motors will make a whistling sound,
// due to the analogWrite() PWM frequency.
// The Adafruit library is specifically designed to avoid
// this, so use the Adafruit library for a better result.
//
//
//
// Connector usage
// ---------------
// The order is different than what you would expect.
// If the Arduino (Uno) board is held with the USB
// connector to the left, the positive (A) side is
// at the top (north), and the negative (B) side is
// the bottom (south) for both headers.
//
//   Connector X1:
//     M1 on outside = MOTOR1_A   (+) north
//     M1 on inside  = MOTOR1_B   (-)
//     middle        = GND
//     M2 on inside  = MOTOR2_A   (+)
//     M2 on outside = MOTOR2_B   (-) south
//
//   Connector X2:
//     M3 on outside = MOTOR3_B   (-) south
//     M3 on inside  = MOTOR3_A   (+)
//     middle        = GND
//     M4 on inside  = MOTOR4_B   (-)
//     M4 on outside = MOTOR4_A   (+) north
//
//
//         -------------------------------
//         | -+s                         |
//         | -+s                         |
//    M1 A |                             | M4 A
//    M1 B |                             | M4 B
//    GND  |                             | GND
//    M2 A |                             | M3 A
//    M2 B |                             | M3 B
//         |                       ..... |
//         -------------------------------
//                + -
//
//
//
// Pin usage with the Motorshield
// ---------------------------------------
// Analog pins: not used at all
//     A0 ... A5 are still available
//     They all can also be used as digital pins.
//     Also I2C (A4=SDA and A5=SCL) can be used.
//     These pins have a breadboard area on the shield.
// Digital pins: used: 3,4,5,6,7,8,9,10,11,12
//     Pin 9 and 10 are only used for the servo motors.
//     Already in use: 0 (RX) and 1 (TX).
//     Unused: 2,13
//     Pin 2 has an soldering hole on the board,
//           easy to connect a wire.
//     Pin 13 is also connected to the system led.
// I2C is possible, but SPI is not possible since
// those pins are used.
//


#include <Servo.h>


// Arduino pins for the shift register
#define MOTORLATCH 12
#define MOTORCLK 4
#define MOTORENABLE 7
#define MOTORDATA 8

// 8-bit bus after the 74HC595 shift register
// (not Arduino pins)
// These are used to set the direction of the bridge driver.
#define MOTOR1_A 2
#define MOTOR1_B 3
#define MOTOR2_A 1
#define MOTOR2_B 4
#define MOTOR3_A 5
#define MOTOR3_B 7
#define MOTOR4_A 0
#define MOTOR4_B 6

// Arduino pins for the PWM signals.
#define MOTOR1_PWM 11
#define MOTOR2_PWM 3
#define MOTOR3_PWM 6
#define MOTOR4_PWM 5
#define SERVO1_PWM 10
#define SERVO2_PWM 9

// Codes for the motor function.
#define FORWARD 1
#define BACKWARD 2
#define BRAKE 3
#define RELEASE 4


// Declare classes for Servo connectors of the MotorShield.
Servo servo_1;
Servo servo_2;


void setup()
{
  Serial.begin(9600);
  Serial.println("Simple Motor Shield sketch");

  // Use the default "Servo" library of Arduino.
  // Attach the pin number to the servo library.
  // This might also set the servo in the middle position.
  servo_1.attach(SERVO1_PWM);
  servo_2.attach(SERVO2_PWM);
}


void loop()
{
  // Suppose there are two servo motors connected.
  // Let them move 180 degrees.
  servo_1.write(0);  
  delay(1000);
  servo_1.write(180);
  delay(2000);

  servo_2.write(0);
  delay(1000);
  servo_2.write(180);
  delay(2000);


  // Suppose there is a relay, or light or solenoid
  // connected to M3_A and GND.
  // Note that the 'speed' (the PWM, the intensity)
  // is for both M3_A and M3_B.
  // The output is a push-pull output (half bridge),
  // so it can also be used to drive something low.
  // The 'speed' (the PWM, the intensity) can be set
  // to zero, that would make the output disabled
  // and floating.
  motor_output(MOTOR3_A, HIGH, 255);
  delay(2000);
  motor_output(MOTOR3_A, LOW, 255);


  // Suppose a DC motor is connected to M1_A(+) and M1_B(-)
  // Let it run full speed forward and half speed backward.
  // If 'BRAKE' or 'RELEASE' is used, the 'speed' parameter
  // is ignored.
  motor(1, FORWARD, 255);
  delay(2000);
  // Be friendly to the motor: stop it before reverse.
  motor(1, RELEASE, 0);
  delay(500);
  motor(1, BACKWARD, 128);
  delay(2000);
  motor(1, RELEASE, 0);
}


// Initializing
// ------------
// There is no initialization function.
//
// The shiftWrite() has an automatic initializing.
// The PWM outputs are floating during startup,
// that's okay for the Motor Shield, it stays off.
// Using analogWrite() without pinMode() is valid.
//


// ---------------------------------
// motor
//
// Select the motor (1-4), the command,
// and the speed (0-255).
// The commands are: FORWARD, BACKWARD, BRAKE, RELEASE.
//
void motor(int nMotor, int command, int speed)
{
  int motorA, motorB;

  if (nMotor >= 1 && nMotor <= 4)
  {  
    switch (nMotor)
    {
    case 1:
      motorA   = MOTOR1_A;
      motorB   = MOTOR1_B;
      break;
    case 2:
      motorA   = MOTOR2_A;
      motorB   = MOTOR2_B;
      break;
    case 3:
      motorA   = MOTOR3_A;
      motorB   = MOTOR3_B;
      break;
    case 4:
      motorA   = MOTOR4_A;
      motorB   = MOTOR4_B;
      break;
    default:
      break;
    }

    switch (command)
    {
    case FORWARD:
      motor_output (motorA, HIGH, speed);
      motor_output (motorB, LOW, -1);     // -1: no PWM set
      break;
    case BACKWARD:
      motor_output (motorA, LOW, speed);
      motor_output (motorB, HIGH, -1);    // -1: no PWM set
      break;
    case BRAKE:
      // The AdaFruit library didn't implement a brake.
      // The L293D motor driver ic doesn't have a good
      // brake anyway.
      // It uses transistors inside, and not mosfets.
      // Some use a software break, by using a short
      // reverse voltage.
      // This brake will try to brake, by enabling
      // the output and by pulling both outputs to ground.
      // But it isn't a good break.
      motor_output (motorA, LOW, 255); // 255: fully on.
      motor_output (motorB, LOW, -1);  // -1: no PWM set
      break;
    case RELEASE:
      motor_output (motorA, LOW, 0);  // 0: output floating.
      motor_output (motorB, LOW, -1); // -1: no PWM set
      break;
    default:
      break;
    }
  }
}


// ---------------------------------
// motor_output
//
// The function motor_ouput uses the motor driver to
// drive normal outputs like lights, relays, solenoids,
// DC motors (but not in reverse).
//
// It is also used as an internal helper function
// for the motor() function.
//
// The high_low variable should be set 'HIGH'
// to drive lights, etc.
// It can be set 'LOW', to switch it off,
// but also a 'speed' of 0 will switch it off.
//
// The 'speed' sets the PWM for 0...255, and is for
// both pins of the motor output.
//   For example, if motor 3 side 'A' is used to for a
//   dimmed light at 50% (speed is 128), also the
//   motor 3 side 'B' output will be dimmed for 50%.
// Set to 0 for completelty off (high impedance).
// Set to 255 for fully on.
// Special settings for the PWM speed:
//    Set to -1 for not setting the PWM at all.
//
void motor_output (int output, int high_low, int speed)
{
  int motorPWM;

  switch (output)
  {
  case MOTOR1_A:
  case MOTOR1_B:
    motorPWM = MOTOR1_PWM;
    break;
  case MOTOR2_A:
  case MOTOR2_B:
    motorPWM = MOTOR2_PWM;
    break;
  case MOTOR3_A:
  case MOTOR3_B:
    motorPWM = MOTOR3_PWM;
    break;
  case MOTOR4_A:
  case MOTOR4_B:
    motorPWM = MOTOR4_PWM;
    break;
  default:
    // Use speed as error flag, -3333 = invalid output.
    speed = -3333;
    break;
  }

  if (speed != -3333)
  {
    // Set the direction with the shift register
    // on the MotorShield, even if the speed = -1.
    // In that case the direction will be set, but
    // not the PWM.
    shiftWrite(output, high_low);

    // set PWM only if it is valid
    if (speed >= 0 && speed <= 255)    
    {
      analogWrite(motorPWM, speed);
    }
  }
}


// ---------------------------------
// shiftWrite
//
// The parameters are just like digitalWrite().
//
// The output is the pin 0...7 (the pin behind
// the shift register).
// The second parameter is HIGH or LOW.
//
// There is no initialization function.
// Initialization is automatically done at the first
// time it is used.
//
void shiftWrite(int output, int high_low)
{
  static int latch_copy;
  static int shift_register_initialized = false;

  // Do the initialization on the fly,
  // at the first time it is used.
  if (!shift_register_initialized)
  {
    // Set pins for shift register to output
    pinMode(MOTORLATCH, OUTPUT);
    pinMode(MOTORENABLE, OUTPUT);
    pinMode(MOTORDATA, OUTPUT);
    pinMode(MOTORCLK, OUTPUT);

    // Set pins for shift register to default value (low);
    digitalWrite(MOTORDATA, LOW);
    digitalWrite(MOTORLATCH, LOW);
    digitalWrite(MOTORCLK, LOW);
    // Enable the shift register, set Enable pin Low.
    digitalWrite(MOTORENABLE, LOW);

    // start with all outputs (of the shift register) low
    latch_copy = 0;

    shift_register_initialized = true;
  }

  // The defines HIGH and LOW are 1 and 0.
  // So this is valid.
  bitWrite(latch_copy, output, high_low);

  // Use the default Arduino 'shiftOut()' function to
  // shift the bits with the MOTORCLK as clock pulse.
  // The 74HC595 shiftregister wants the MSB first.
  // After that, generate a latch pulse with MOTORLATCH.
  shiftOut(MOTORDATA, MOTORCLK, MSBFIRST, latch_copy);
  delayMicroseconds(5);    // For safety, not really needed.
  digitalWrite(MOTORLATCH, HIGH);
  delayMicroseconds(5);    // For safety, not really needed.
  digitalWrite(MOTORLATCH, LOW);
}

Mit diesem Sketch passiert folgendes:

Mein Servo (an Pin 10), bewegt sich rechts links.
Dann gibt der Motor Nummer 3 Vollgas nach vorne nach ein paar Sekunden bleibt dieser stehen.

Dann fährt Motor 1 Vollgas nach vorne , dann pause, dann mit langsamerer Geschwindigkeit nach hinten.

Das sollte also passen steht ja PWM 255 nach vorne & PWM 128 nach hinten.

Was ich aber merkwürdig finde:

hab den Sketch mehrmals mit Reset über das Terminal (Serial Monitor) versucht.

Manchmal läuft der sketch super durch immer die selben Abfolgen.

und manchmal hängt sich irgendwie etwas auf und dann gibt Motor 3 nur Vollgas nach vorne bis ich Reset drücke oder Terminal neustarre. Das is doch nicht OK ?!

//

Habe versucht den code auf das minimalste zu kürzen aber da kommt immer:

Build options changed, rebuilding all
sketch_sep21e.ino: In function 'void loop()':
sketch_sep21e.ino:51:24: error: 'motor' was not declared in this scope

???????

Hier der code:

Code:
#include <Servo.h>


// Arduino pins for the shift register
#define MOTORLATCH 12
#define MOTORCLK 4
#define MOTORENABLE 7
#define MOTORDATA 8

// 8-bit bus after the 74HC595 shift register
// (not Arduino pins)
// These are used to set the direction of the bridge driver.
#define MOTOR1_A 2
#define MOTOR1_B 3
#define MOTOR2_A 1
#define MOTOR2_B 4
#define MOTOR3_A 5
#define MOTOR3_B 7
#define MOTOR4_A 0
#define MOTOR4_B 6

// Arduino pins for the PWM signals.
#define MOTOR1_PWM 11
#define MOTOR2_PWM 3
#define MOTOR3_PWM 6
#define MOTOR4_PWM 5
#define SERVO1_PWM 10
#define SERVO2_PWM 9

// Codes for the motor function.
#define FORWARD 1
#define BACKWARD 2
#define BRAKE 3
#define RELEASE 4


void setup()
{
  
}


void loop()
{
  


  motor(1, FORWARD, 255);
  delay(2000);
  // Be friendly to the motor: stop it before reverse.
  motor(1, RELEASE, 0);
  delay(500);
  motor(1, BACKWARD, 128);
  delay(2000);
  motor(1, RELEASE, 0);
}


Gruß Marc

Und danke für deine Hilfe Wink

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.09.2014, 12:08
Beitrag #22
RE: SR-04 + UNO + 4WD Roboter, Abstandsfehler
Hi,
klar, die Funktionsdefinitionen nach loop() musst Du natürlich auch drinlassen. Klar kennt er die Funktion motor nicht, wenn Du sie rauslöschst.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.09.2014, 12:26 (Dieser Beitrag wurde zuletzt bearbeitet: 21.09.2014 12:39 von Marc2014.)
Beitrag #23
RE: SR-04 + UNO + 4WD Roboter, Abstandsfehler
Ok Wink

Also hab jetzt nochmal das mit den Frequenzen getestet.

Das is so merkwürdig !

Hab jetzt von 1KHZ - 64KHZ alle getestet.

Wenn ich 1 Motor deklariere dann fährt der nur vorwärts und wenn er rückwärts fahren soll machen alle Motoren irgend einen Mist! Wenn ich alle Motoren deklariere, passiert das selbe ! NUR wenn ich den andren 3 "unbenutzten Motoren in void Setup sage:

motor2.setSpeed(0); (für alle 3 unbenutzten).

Dann bleiben die auch ruhig aber der andre Motor fährt trotzdem nicht rückwärts -.-
sondern spinnt vor sich her.....

Hier mal der code:

Code:
#include <AFMotor.h>

AF_DCMotor motor1(1, MOTOR12_2KHZ);  
AF_DCMotor motor2(2, MOTOR12_2KHZ);  
AF_DCMotor motor3(3, MOTOR34_1KHZ);  
AF_DCMotor motor4(4, MOTOR34_1KHZ);  



// ################################################################################​################################################################################​###############################################################

void setup() {
  
  
motor1.setSpeed(255);                                                           // Motor 1 Geschwindigkeit festlegen.
motor2.setSpeed(0);                                                             // Motor 2 Geschwindigkeit festlegen.
motor3.setSpeed(0);                                                             // Motor 3 Geschwindigkeit festlegen.
motor4.setSpeed(0);                                                             // Motor 4 Geschwindigkeit festlegen.

}



// ################################################################################​################################################################################​###############################################################

  void loop () {
  

    
    motor1.run(FORWARD);
    delay(1000);  // run forward for 1 second
    motor1.run(RELEASE);
    delay(2000);  // 'coast' for 1/10 second
    motor1.run(BACKWARD);  // run in reverse
    delay(1000);  // run forward for 1 second
    motor1.run(RELEASE);
    delay(2000);  // 'coast' for 1/10 second
    
    
  }





// ################################################################################​################################################################################​###############################################################


Ich werde jetzt nochmal den andren versuchen und damit testen das muss doch mal laufen ;/

Gruß Marc

NACHTRAG


! ICH SCHMEIS ES IN DEN SCHROTT !


Das Teil macht was es will aber nicht das was es soll mit einem Motor geht das noch einigermaßen aber mit 4 ist es reiner Zufall was die Motoren machen, da brauch ich keinen Roboter mit antreiben der hält sich dann ja an nichts...

KAUFT NIEMALS : das alte Motorshield Leute !

Ich besorge mir jetzt ein andres das hoffentlich geht, so ist das verschwendete Zeit und unnötiger aufwand....

Hier der code:

Code:
#include <Servo.h>


#define MOTORLATCH 12
#define MOTORCLK 4
#define MOTORENABLE 7
#define MOTORDATA 8

#define MOTOR1_A 2
#define MOTOR1_B 3
#define MOTOR2_A 1
#define MOTOR2_B 4
#define MOTOR3_A 5
#define MOTOR3_B 7
#define MOTOR4_A 0
#define MOTOR4_B 6

#define MOTOR1_PWM 11
#define MOTOR2_PWM 3
#define MOTOR3_PWM 6
#define MOTOR4_PWM 5
#define SERVO1_PWM 10
#define SERVO2_PWM 9

#define FORWARD 1
#define BACKWARD 2
#define BRAKE 3
#define RELEASE 4


Servo servo_1;
Servo servo_2;


void setup()
{
  Serial.begin(9600);


  servo_1.attach(SERVO1_PWM);
  servo_2.attach(SERVO2_PWM);
}


void loop()
{
  

  
  motor(1, FORWARD, 255);
  motor(2, FORWARD, 255);
  motor(3, FORWARD, 255);
  motor(4, FORWARD, 255);

  delay(2000);
  motor(1, RELEASE, 0);
  motor(2, RELEASE, 0);
  motor(3, RELEASE, 0);
  motor(4, RELEASE, 0);

  delay(500);
  motor(1, BACKWARD, 128);
  motor(2, BACKWARD, 128);
  motor(3, BACKWARD, 128);
  motor(4, BACKWARD, 128);

  delay(2000);
  motor(1, RELEASE, 0);
  motor(2, RELEASE, 0);
  motor(3, RELEASE, 0);
  motor(4, RELEASE, 0);

}



void motor(int nMotor, int command, int speed)
{
  int motorA, motorB;

  if (nMotor >= 1 && nMotor <= 4)
  {  
    switch (nMotor)
    {
    case 1:
      motorA   = MOTOR1_A;
      motorB   = MOTOR1_B;
      break;
    case 2:
      motorA   = MOTOR2_A;
      motorB   = MOTOR2_B;
      break;
    case 3:
      motorA   = MOTOR3_A;
      motorB   = MOTOR3_B;
      break;
    case 4:
      motorA   = MOTOR4_A;
      motorB   = MOTOR4_B;
      break;
    default:
      break;
    }

    switch (command)
    {
    case FORWARD:
      motor_output (motorA, HIGH, speed);
      motor_output (motorB, LOW, -1);     // -1: no PWM set
      break;
    case BACKWARD:
      motor_output (motorA, LOW, speed);
      motor_output (motorB, HIGH, -1);    // -1: no PWM set
      break;
    case BRAKE:
    
      motor_output (motorA, LOW, 255); // 255: fully on.
      motor_output (motorB, LOW, -1);  // -1: no PWM set
      break;
    case RELEASE:
      motor_output (motorA, LOW, 0);  // 0: output floating.
      motor_output (motorB, LOW, -1); // -1: no PWM set
      break;
    default:
      break;
    }
  }
}



void motor_output (int output, int high_low, int speed)
{
  int motorPWM;

  switch (output)
  {
  case MOTOR1_A:
  case MOTOR1_B:
    motorPWM = MOTOR1_PWM;
    break;
  case MOTOR2_A:
  case MOTOR2_B:
    motorPWM = MOTOR2_PWM;
    break;
  case MOTOR3_A:
  case MOTOR3_B:
    motorPWM = MOTOR3_PWM;
    break;
  case MOTOR4_A:
  case MOTOR4_B:
    motorPWM = MOTOR4_PWM;
    break;
  default:
    speed = -3333;
    break;
  }

  if (speed != -3333)
  {
    
    shiftWrite(output, high_low);

    if (speed >= 0 && speed <= 255)    
    {
      analogWrite(motorPWM, speed);
    }
  }
}



void shiftWrite(int output, int high_low)
{
  static int latch_copy;
  static int shift_register_initialized = false;

  if (!shift_register_initialized)
  {
    pinMode(MOTORLATCH, OUTPUT);
    pinMode(MOTORENABLE, OUTPUT);
    pinMode(MOTORDATA, OUTPUT);
    pinMode(MOTORCLK, OUTPUT);

    digitalWrite(MOTORDATA, LOW);
    digitalWrite(MOTORLATCH, LOW);
    digitalWrite(MOTORCLK, LOW);
    digitalWrite(MOTORENABLE, LOW);

    latch_copy = 0;

    shift_register_initialized = true;
  }

  
  bitWrite(latch_copy, output, high_low);

  
  shiftOut(MOTORDATA, MOTORCLK, MSBFIRST, latch_copy);
  delayMicroseconds(5);    // For safety, not really needed.
  digitalWrite(MOTORLATCH, HIGH);
  delayMicroseconds(5);    // For safety, not really needed.
  digitalWrite(MOTORLATCH, LOW);
}


Gruß Marc Wink

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.09.2014, 14:20
Beitrag #24
RE: SR-04 + UNO + 4WD Roboter, Abstandsfehler
Es liegt nicht am Motorshield oder an der Software!


Der Roboter ist aus Alu also das Gehäuse und sobald ich den Deckel des Gehäuseboden s entferne läuft alles super wenn ich den Deckel schlisse spielt alles verrückt! Das habe ich durch Zufall rausgefunden als ich aus Verzweiflung einen andren Uno getestet habe weil ich dachte evtl hat mein andrer Uno einen schlag weg.

Also irgendwas stört da anscheinen wenn alle 4 Motoren in einem geschlossenen Alu Gehäuse sind stört das irgendwie jetzt muss ich noch ne Lösung dafür finden!

SOWAS KRASSES !

Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  kleiner Roboter blichi 24 785 27.07.2016 14:02
Letzter Beitrag: torsten_156
  Roboter-Bau Probleme blebbens 8 374 12.07.2016 07:35
Letzter Beitrag: Binatone
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 537 06.07.2016 14:59
Letzter Beitrag: Binatone
  Neo's Roboter Neoneo23 74 5.882 11.11.2015 21:18
Letzter Beitrag: Neoneo23
  Roboter J4Ng0 2 1.526 21.07.2013 15:49
Letzter Beitrag: Snake8811

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste