- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 41

Thema: Alles PWM oder wie?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    So,

    anhand des Sketches vermute ich mal daß das auf einem Due oder Mega 2560 läuft.
    Auf einem Uno oder Nano funktioniert das nicht mit PWM und diesen PIN's.
    Code:
    PWM Pins
    Nano: 3; 5; 6; 9; 10; 11
    Uno: 3; 5; 6; 9; 10; 11
    Due: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    Mega 2560: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    Code:
    int IN1 = 9;
    int IN2 = 8;
    int IN3 = 7;
    int IN4 = 6;
    - - - Aktualisiert - - -

    Dann kann der Motor nur mit 100% laufen,
    Code:
    void Forward() {
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      Serial.print("Motor 1 Forward");
      Serial.println();
    
    
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      Serial.println("Motor 2 Forward");
      Serial.println();
    }
    Für PWM sollte es aber ein
    Code:
    analogWrite(pin, value)
    sein.
    https://www.arduino.cc/en/Tutorial/PWM

    https://www.arduino.cc/reference/en/...o/analogwrite/

    - - - Aktualisiert - - -

    So, das ist jetzt mit der heißen Nadel gestrickt.
    Habe hier keine Hardware auf dem ich es laufen lassen kann.
    Lässt sich aber fehlerfrei comilieren.
    Code:
    /* 
    PWM Pins
    Nano: 3; 5; 6; 9; 10; 11
    Uno: 3; 5; 6; 9; 10; 11
    Due: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    Mega 2560: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    */
    
    int IN1 = 9;
    int IN2 = 8;
    int IN3 = 7;
    int IN4 = 6;
    int speed;
    
    void setup()
    {
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
    
      Serial.begin(9600);
      Serial.println("Enter number for control option:");
      Serial.println("1. FORWARD");
      Serial.println("2. REVERSE");
      Serial.println("3. STOP");
      Serial.println();
    }
    
    void loop()
    {
      for (int speed=0; speed <=255; speed++){
        Forward(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Forward(speed);
        delay(10);
      }
      for (int speed=0; speed <=255; speed++){
        Backward(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Backward(speed);
        delay(10);
      }
      for (int speed=0; speed <=255; speed++){
        Rotateleft(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Rotateleft(speed);
        delay(10);
      }
      for (int speed=0; speed <=255; speed++){
        Rotateright(speed);
        delay(10);
      }
      for (int speed=255; speed >=0; speed--){
        Rotateright(speed);
        delay(10);
      }
    }
    
    void Forward(int speed){
      analogWrite(IN1, speed);
      digitalWrite(IN2, LOW);
      Serial.print("Motor 1 Forward");
      Serial.println();
      analogWrite(IN3, speed);
      digitalWrite(IN4, LOW);
      Serial.println("Motor 2 Forward");
      Serial.println();
    }
    
    void Backward(int speed){
      digitalWrite(IN1, LOW);
      analogWrite(IN2, speed);
      Serial.print("Motor 1 Backward");
      Serial.println();
      digitalWrite(IN3, LOW);
      analogWrite(IN4, speed);
      Serial.println("Motor 2 Backward");
      Serial.println();
    }
    
    void Rotateleft(int speed){
      digitalWrite(IN1, LOW);
      analogWrite(IN2, speed);
      Serial.print("Motor 1 Backward");
      Serial.println();
      analogWrite(IN3, speed);
      digitalWrite(IN4, LOW);
      Serial.println("Motor 2 Forward");
      Serial.println();
    }
    
    void Rotateright(int speed){
      analogWrite(IN1, speed);
      digitalWrite(IN2, LOW);
      Serial.print("Motor 1 Forward");
      Serial.println();
      digitalWrite(IN3, LOW);
      analogWrite(IN4, speed);
      Serial.println("Motor 2 Backward");
      Serial.println();
    }
    
    void Stop(){
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      Serial.print("Motor 1 Stop");
      Serial.println();
    
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, LOW);
      Serial.println("Motor 2 Stop");
      Serial.println();
    }
    Wenn ich keinen Fehler drin habe, müssten sich die Räder einmal vorwärts drehen.
    Und zwar von Stillstand bis zur Maximaldrehzahl und wieder bis zum Stillstand.
    Dann einmal rückwärts.
    Einmal Gegenläufig für drehen auf der Stelle, linksrum und einmal rechtsrum.
    Geändert von i_make_it (21.02.2018 um 06:41 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    Hallo, habe das mal mit Interesse verfolgt.

    Ich habe das auch mal gemacht und es müsste auch noch wo Code "rumliegen" der funktioniert.

    Darum die Frage, macht es noch Sinn danach zu suchen, oder hat ihr es alles zum Laufen bekommen ??

    Ich bin damals nach dem Chip Datenblatt gegangen.

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von i_make_it Beitrag anzeigen
    So, anhand des Sketches vermute ich mal daß das auf einem Due oder Mega 2560 läuft.
    Auf einem Uno oder Nano funktioniert das nicht mit PWM und diesen PIN's.

    Wenn ich keinen Fehler drin habe, müssten sich die Räder einmal vorwärts drehen.
    Und zwar von Stillstand bis zur Maximaldrehzahl und wieder bis zum Stillstand.
    Dann einmal rückwärts.
    Einmal Gegenläufig für drehen auf der Stelle, linksrum und einmal rechtsrum.
    genauso ist es, mega 2560 und läuft wie von dir vorhergesagt. Jetzt kann ich es anhand eines funktionierendes codes ausgiebig testen... Danke noch einmal allen beteiligten...
    gruß inka

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Wenn ich heute abend zuhause bin fange ich mal einen etwas anderen Sketch an, der hat dann nur eine Funktion mit 4 Parametern.
    Da kannst Du dann alleine durch die Parameter alles gestalten.
    Also Stop, Vorwärts, Rückwärts, auf der Stelle Links und Rechts drehen, aber auch Kurvenfahrt oder drehen über ein stehendes Rad.
    Das wäre dann die flexibelste Variante.

    Dadurch das es einzelne Parameter sind, kann man dann auch später problemlos eine Geschwindigkeits oder Positionsregelung integrieren (Odometrie).
    In der momentanen Variante mit dem einem Parameter ist das unschön, da müsste man die Regelung in jede einzelne Fahrfunktionen reinlegen.
    Das würde später mal ein riesen Code Wust ergeben.
    Geändert von i_make_it (21.02.2018 um 11:40 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    So, hier die Fassung mit den vier Parametern.
    Code:
    /* 
    PWM Pins
    Nano: 3; 5; 6; 9; 10; 11
    Uno: 3; 5; 6; 9; 10; 11
    Due: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    Mega 2560: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    */
    
    int IN1 = 9;
    int IN2 = 8;
    int IN3 = 7;
    int IN4 = 6;
    int speedl1;
    int speedl2;
    int speedr1;
    int speedr2;
    int loopcount;
    
    void setup()
    {
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
    }
    
    void loop()
    {
    // Vorwärts
      for (int loopcount=0; loopcount <=255; loopcount++){
        speedl1 = loopcount;
        speedl2 = 0;
        speedr1 = loopcount;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
      for (int loopcount=255; loopcount >=0; loopcount--){
        speedl1 = loopcount;
        speedl2 = 0;
        speedr1 = loopcount;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
    // Rückwärts
      for (int loopcount=0; loopcount <=255; loopcount++){
        speedl1 = 0;
        speedl2 = loopcount;
        speedr1 = 0;
        speedr2 = loopcount;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
      for (int loopcount=255; loopcount >=0; loopcount--){
        speedl1 = 0;
        speedl2 = loopcount;
        speedr1 = 0;
        speedr2 = loopcount;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
    // Links Drehen über Mittelpunkt
      for (int loopcount=0; loopcount <=255; loopcount++){
        speedl1 = loopcount;
        speedl2 = 0;
        speedr1 = (255 - loopcount);
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
      for (int loopcount=255; loopcount >=0; loopcount--){
        speedl1 = loopcount;
        speedl2 = 0;
        speedr1 = (255 - loopcount);
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
    // Rechts Drehen über Mittelpunkt
      for (int loopcount=0; loopcount <=255; loopcount++){
        speedl1 = (255 - loopcount);
        speedl2 = 0;
        speedr1 = loopcount;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
      for (int loopcount=255; loopcount >=0; loopcount--){
        speedl1 = (255 - loopcount);
        speedl2 = 0;
        speedr1 = loopcount;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
    // Links Drehen über linkes Rad
      for (int loopcount=0; loopcount <=255; loopcount++){
        speedl1 = loopcount;
        speedl2 = 0;
        speedr1 = 0;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
      for (int loopcount=255; loopcount >=0; loopcount--){
        speedl1 = loopcount;
        speedl2 = 0;
        speedr1 = 0;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
    // Rechts Drehen über rechtes Rad
      for (int loopcount=0; loopcount <=255; loopcount++){
        speedl1 = 0;
        speedl2 = 0;
        speedr1 = loopcount;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
      for (int loopcount=255; loopcount >=0; loopcount--){
        speedl1 = 0;
        speedl2 = 0;
        speedr1 = loopcount;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
     // Vorwärts Kurve Links Radius = Roboterbreite
       for (int loopcount=0; loopcount <=127; loopcount++){
        speedl1 = (loopcount * 2);
        speedl2 = 0;
        speedr1 = loopcount;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
      for (int loopcount=127; loopcount >=0; loopcount--){
        speedl1 = (loopcount * 2);
        speedl2 = 0;
        speedr1 = loopcount;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
    // Rückwärts Kurve Rechts Radius = Roboterbreite
      for (int loopcount=0; loopcount <=127; loopcount++){
        speedl1 = 0;
        speedl2 = loopcount;
        speedr1 = 0;
        speedr2 = (loopcount * 2);
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
      for (int loopcount=127; loopcount >=0; loopcount--){
        speedl1 = 0;
        speedl2 = loopcount;
        speedr1 = 0;
        speedr2 = (loopcount * 2);
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(10);
      }
    }
    
    void PWMDrive(int speedl1,int speedl2,int speedr1,int speedr2){
      analogWrite(IN1, speedl1);
      analogWrite(IN2, speedl2);
      analogWrite(IN3, speedr1);
      analogWrite(IN4, speedr2);
    }

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    @i_make_it:

    alle beispiele in Deiner demo sind als for-schleife ausgelegt. Warum laufen die motoren hier z.b. in der loop aufgerufen, ohne for schleife nicht?

    Code:
    void vorwaerts()
    {
        speedl1 = 255;
        speedl2 = 0;
        speedr1 = 255;
        speedr2 = 0;
        PWMDrive(speedl1, speedl2, speedr1, speedr2);
        delay(500);
        Serial.println("vorwärts");
    }
    void rueckwaerts()
    {
      speedl1 = 0;
      speedl2 = 255;
      speedr1 = 0;
      speedr2 = 255;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(500);
      Serial.println("rückwärts");
    }
    zuerst dachte ich es liegt an zu kleinem delay, das ist es aber nicht

    das ist der aufruf in der loop:
    Code:
    void loop()
    {
    vorwaerts();
    //delay(500);
    
    
    //delay(500);
    rueckwaerts();
    //delay(500);
    }
    jetzt wirds aber noch geheimnisvoller: solange das USB kabel zum pc angeschlossen ist läufts, ziehe ich es ab nicht mehr. Die akkuspannung (6xAA) liegt bei 7,3V
    Geändert von inka (01.03.2018 um 17:24 Uhr)
    gruß inka

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Die For Schleifen habe ich nur zum Rampen von 0 auf 255 und zurück genutzt.
    Man kann natürlich auch vor dem Aufruf feste Werte eingeben.
    Wenn man keinen Entscheidungsbaum hat kann man ein festes Fahrprogramm mit delay() schreiben (wodurch man aber nichts anderes merh machen kann).
    Üblicherweise würde man (nicht bei Deinem Balancer) Bumper auswerten für STOP und dann auswerten welcher Bumper ausgelöst wurde und entsprechend eine gewisse Strecke oder Zeit nach hinten fahren und dann auf der Stelle drehen um die Ausrichtung weg vom Hinderniss zu verändern.
    Bei den Fernsensoren würde man z.B.:
    bei einem Hinderniss vorne Rechts mit Abstand < 10cm den Linken Motor auf 50 drosseln und den rechts auf 230 lassen. (231 bis 255 sind Regelreserve).
    Bei einem Hinderniss vorne Rechts mit Abstand < 20cm den Linken Motor auf 90 drosseln und den rechts auf 230 lassen.
    Bei einem Hinderniss vorne Rechts mit Abstand < 30cm den Linken Motor auf 130 drosseln und den rechts auf 230 lassen.
    Bei einem Hinderniss vorne Rechts mit Abstand < 40cm den Linken Motor auf 170 drosseln und den rechts auf 230 lassen.
    Bei einem Hinderniss vorne Rechts mit Abstand < 50cm den Linken Motor auf 200 drosseln und den rechts auf 230 lassen.
    Bei einem Hinderniss vorne Rechts mit Abstand >= 50cm den Linken Motor auf 230 lassen und den rechts auf 230 lassen.
    Das selbe noch für links und man hat ein relativ flüssiges Fahren, bei dem der Roboter Annäherungen unter 50cm an erkannte Hindernisse versucht zu vermeiden und bei Unterschreitung immer stärker gegenlenkt ohne zu langsam zu werden.

    Delay() sollte man im fertigen Program vermeiden.
    An dem Rechner hier habe ich keine Arduino IDE, der Code ist rein im Notepad geschrieben, ich kann also nicht sicher sagen ob er fehlerfrei ist.
    Er sollte die Buildin LED blinken lassen und 1 Sekunde vorwärts fahen mit blinkender LED.
    Dann 1 Sekunde rückwärts fahren mit delay(), wodurch die LED nicht blinken kann.
    Dann 1 Sekunde auf der Stelle rechts drehen mit blinkender LED und 1 Sekunde ein enge Kurve nach links fahren mit delay(), wodurch die LED wieder nicht blinken kann.


    Code:
    /*
    PWM Pins
    Nano: 3; 5; 6; 9; 10; 11
    Uno: 3; 5; 6; 9; 10; 11
    Due: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    Mega 2560: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    */
    
    int IN1 = 9;
    int IN2 = 8;
    int IN3 = 7;
    int IN4 = 6;
    int speedl1;
    int speedl2;
    int speedr1;
    int speedr2;
    
    unsigned long prev1micros = 0;
    const long waittime1 = 1000;
    int togglestate1 = LOW;
    
    unsigned long prev2micros = 0;
    const long waittime2 = 100;
    int togglestate2 = LOW;
    
    void setup()
    {
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
    
      pinMode(LED_BUILTIN, OUTPUT);
    }
    
    void loop()
    {
    //Blinken der Build in LED
      unsigned long cur2micros = millis();
      if (cur2micros - prev2micros >= waittime2) {
        prev2micros = cur2micros;
        if (togglestate2 == LOW){
          togglestate2 = HIGH;
          digitalWrite(LED_BUILTIN, HIGH);
        }else{ 
          togglestate2 = LOW;
          digitalWrite(LED_BUILTIN, LOW);    
        }
      }
    
    // Warten ohne delay 
      unsigned long cur1micros = millis();
      if (togglestate1 == LOW){
        if (cur1micros - prev1micros >= waittime1) {
          prev1micros = cur1micros;
    // rückwärts mit delay
          speedl1 = 0;
          speedl2 = 200;
          speedr1 = 0;
          speedr2 = 200;
          PWMDrive(speedl1, speedl2, speedr1, speedr2);
          delay(1000);
          togglestate1 = HIGH;
        }else{
    // vorwärts ohne Delay (LED Blinkt)
          speedl1 = 200;
          speedl2 = 0;
          speedr1 = 200;
          speedr2 = 0;
          PWMDrive(speedl1, speedl2, speedr1, speedr2);
        }
      }
    
      if (togglestate1 == LOW){
        if (cur1micros - prev1micros >= waittime1) {
          prev1micros = cur1micros;
    // linksrum mit delay
          speedl1 = 50;
          speedl2 = 0;
          speedr1 = 200;
          speedr2 = 0;
          PWMDrive(speedl1, speedl2, speedr1, speedr2);
          delay(1000);
          togglestate1 = LOW;
        }else{
    // Rechts drehen ohne Delay (LED blinkt)
          speedl1 = 200;
          speedl2 = 0;
          speedr1 = 0;
          speedr2 = 200;
          PWMDrive(speedl1, speedl2, speedr1, speedr2);
        }
      }
    }
    
    void PWMDrive(int speedl1,int speedl2,int speedr1,int speedr2){
      analogWrite(IN1, speedl1);
      analogWrite(IN2, speedl2);
      analogWrite(IN3, speedr1);
      analogWrite(IN4, speedr2);
    }
    Update: Fehler im Code beseitigt.
    Geändert von i_make_it (01.03.2018 um 21:04 Uhr)

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Zitat Zitat von inka Beitrag anzeigen
    jetzt wirds aber noch geheimnisvoller: solange das USB kabel zum pc angeschlossen ist läufts, ziehe ich es ab nicht mehr. Die akkuspannung (6xAA) liegt bei 7,3V
    Du hast den Akku über den VIN Pin oder den Klinkenstecker angeschlossen?

    Der Code den Du in Deinem letzten Post hast, Da ist keine Funktion PWMDrive zu sehen. Hast Du Die nur nicht dargestellt, oder ist die auch nicht im Sketch?
    Denn diese Funktion wird ja in den Funktionen vorwaerts und rueckwaerts aufgerufen.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von i_make_it Beitrag anzeigen
    Du hast den Akku über den VIN Pin oder den Klinkenstecker angeschlossen?
    ja, über Vin

    Zitat Zitat von i_make_it Beitrag anzeigen
    Der Code den Du in Deinem letzten Post hast, Da ist keine Funktion PWMDrive zu sehen. Hast Du Die nur nicht dargestellt, oder ist die auch nicht im Sketch?
    Denn diese Funktion wird ja in den Funktionen vorwaerts und rueckwaerts aufgerufen.
    ich habe jetzt hier noch einmal die geänderte "demo" version.
    Code:
    /*
      PWM Pins
      Nano: 3; 5; 6; 9; 10; 11
      Uno: 3; 5; 6; 9; 10; 11
      Due: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
      Mega 2560: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    */
    
    
    int IN1 = 8;//9
    int IN2 = 9;//8
    int IN3 = 10;//7
    int IN4 = 11;//6
    int speedl1;
    int speedl2;
    int speedr1;
    int speedr2;
    int loopcount;
    
    
    void setup()
    {
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
    
    
      Serial.begin(115200);
      Serial1.begin(115200);
    }
    
    
    void loop()
    {
    /*
    vorwaerts_rampe_hoch();
    delay(500);
    vorwaerts_rampe_runter();
    delay(500);
    
    
    rueckwaerts_rampe_hoch();
    delay(500);
    rueckwaerts_rampe_runter();
    delay(500);
    */
    
    
    vorwaerts();
    //delay(500);
    
    
    //delay(500);
    rueckwaerts();
    //delay(500);
    
    
    }
    
    
    void vorwaerts()//geht nicht
    {
      speedl1 = 255;
      speedl2 = 0;
      speedr1 = 255;
      speedr2 = 0;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(500);
      Serial.println("vorwärts");
      Serial1.println("vorwärts");
    }
    void rueckwaerts()//geht nicht
    {
      speedl1 = 0;
      speedl2 = 255;
      speedr1 = 0;
      speedr2 = 255;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(500);
      Serial.println("rückwärts");
      Serial1.println("rückwärts");
    }
    void PWMDrive(int speedl1, int speedl2, int speedr1, int speedr2)
    {
      analogWrite(IN1, speedl1);
      analogWrite(IN2, speedl2);
      analogWrite(IN3, speedr1);
      analogWrite(IN4, speedr2);
    }
    in den funktionen vorwaerts() und rueckwaerts() habe ich nur die schleife rausgenommen und die werte direkt eingesetzt. Noch einmal ausprobiert bei gleicher hardware: Deine demoversion geht, die von mir korrigierte (ohne FOR schleife) nur bei eingestecktem USB kabel. Man spürt nur am auf dem motor aufgelegtem finger, dass der motor alle halbe sekunde kurz tickt...
    gruß inka

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    das blinken der eingebauten LED zeigt eindeutig, dass die motoren, bzw. der strom den sie ziehen den arduino zum reset zwingen...

    danke erstmal, ich habe jetzt genügend "stoff" zum üben und testen...
    gruß inka

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. 2 Atmegas verwenden oder doch alles in einem
    Von moritz31 im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 12.03.2014, 17:02
  2. Alles Matrix, oder?
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 21.12.2012, 21:30
  3. Real Time Clock oder Uhrenquarz? Alles möglichst stromarm
    Von MelMan im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 08.06.2011, 17:01
  4. Was brauche ich alles
    Von Haveaniceday im Forum AVR Hardwarethemen
    Antworten: 17
    Letzter Beitrag: 02.08.2007, 12:07
  5. Ist in dem BAusatz alles drin, oder braucht man noch was ???
    Von michiE im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 3
    Letzter Beitrag: 07.03.2005, 16:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests