- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 15

Thema: ASURO Projekt Einen Motor pausieren

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Ich habe nicht viel mit dem Asuro gemacht, und es ist schon etwas her.
    Aber ich habe Deinen Code erst mal etwas besser lesbar formatiert.

    Über fähig und undfähig sollte man nicht entscheiden, wenn man grade erst anfängt etwas zu lernen.
    Wenn nach längerer Zeit, intensiven Befassen mit einem Thema keinerlei Verbesserung der Fähigkeiten messbar ist, dann kann man von Unfähigkeit sprechen.
    Momentan von, noch unwissend und noch unerfahren.

    Da es eine Referenz gibt, kann man dort nachlesen was die Befehle machen, das ist immer ganz hilfreich um sich über die Möglichkeiten die man hat zu informieren.
    http://www.asurowiki.de/pmwiki/pub/html/asuro_8h.html

    Die folgenden Asuro spezifischen Befehle nutzt Du:

    FrontLED (unsigned char status)
    Steuert die vorne, nach unten zeigende, Front-LED.

    LineData (unsigned int *data)
    Liest die Daten der beiden Linienverfolgungssensoren.
    Die Linien-Beleuchtungs-LED kann sowohl an- als auch ausgeschaltet sein.

    MotorDir (unsigned char left_dir, unsigned char right_dir)
    Steuert die Drehrichtung der Motoren.

    MotorSpeed (unsigned char left_speed, unsigned char right_speed)
    Steuert die Geschwindigkeit der Motoren.

    Msleep (int ms)
    Wartefunktion in ms.
    Code:
    01#include <avr/io.h>
    02#include "asuro.h"
    03
    04int main(void)
    05{
    06  Init();
    07  unsigned int data[2]; //Initialisiert zwei Int-werte hintereinander
    08  FrontLED(ON);
    09
    10  Msleep(1000);
    11  while (1)
    12  {
    13    LineData(data);
    14    if ((data[0]<700) && (data [1]<700))
    15    {
    16      MotorDir(FWD,FWD); //beide Motoren vorwärts
    17      MotorSpeed(85,0); //linker Motor speed 85
    18      Msleep(160);
    19      MotorSpeed(0,0); //beide Motoren halt
    20      Msleep(3000);
    21      MotorDir(RWD,RWD); //beide Motoren rückwärts
    22      MotorSpeed(85,0); // linker Motor speed 85
    23      Msleep(160);
    24      MotorSpeed(0,0); //beide Motoren halt
    25    }
    26    if ((data[0]>700) && (data[1]>700))
    27    {
    28      MotorDir(FWD,FWD); //beide Motoren vorwärts
    29      MotorSpeed(0,0); //beide Motoren halt
    30    }
    31    if ((data[0]>700) && (data[1]<700))
    32    {
    33      MotorDir(RWD,RWD); //beide Motoren rückwärts
    34      MotorSpeed(85,0); // linker Motor speed 85
    35      Msleep(160);
    36      MotorSpeed(0,0); //beide Motoren halt
    37      Msleep(3000);
    38      MotorDir(FWD,FWD); //beide Motoren vorwärts
    39      MotorSpeed(85,0); // linker Motor speed 85
    44      Msleep(160);
    41      MotorSpeed(0,0); //beide Motoren halt
    42    }
    43    MotorDir(FWD,FWD); !!!!!!!!!!!! //beide Motoren vorwärts
    44    MotorSpeed(0,100); // rechter Motor speed 100
    45    Msleep(480);
    46    MotorSpeed(0,0); //beide Motoren halt
    47  }
    48}
    Alleine durch das Einrücken bekommt man schon mal ein Gefühl für die Struktur des Codes.

    Was einem sofort ins Auge springt, sind in Zeile 14, 26 und 32 die IF Anweisungen die direkt aufeinander folgen.
    Man könnte jetzt in Zeile 26 und 31 aus IF ein ELESE IF machen.

    Dann hat jedes Asuro Codebeispiel das ich habe ein return (0); nach der while (1); Schleife.
    Also:

    Code:
    47  }
    48 return (0);
    49}
    Das hat jetz noch nichts mit der Funktion Deines Codes zu tun, hilft aber sauberen Code zu produzieren, der Dir nicht Später mal mit unerwarteten Fehlern um die Ohren fliegt.

    Soweit ich das sehe nimmst Du die FrontLed als Lichtquelle und die beiden Linienfolger Sensoren LineData um mit den IF Konstruken 3 Zustände zu unterscheiden.
    Dort findet dann eine reine Zeitsteuerung des linken Motors statt.
    Immer 0,16 Sekunden Fahren mit rund 33% der möglichen Motorgeschwindigkeit (85 von 255) und 3 Sekunden Stillstand.
    Am Ende lässt Du den rechten Motor für 0,48 Sekunden mit rund 39% der möglichen Motorgeschwindigkeit (100 von 255) laufen.

    Der rechte Motor wird nun außerhalb des IF Konstrukts angesteuert. Also unabhängig davon was für Werte LineData hat.
    Ergänz Doch mal Deinen Coder zuert um das return (0);
    und dann definier doch mal ein Motor Halt am Anfang der WHILE Schleife, damit die Motoren erst mal sicher gestoppt sind.

    Code:
    .
    .
    .
    11  while (1)
    12  {
    13    MotorDir(FWD,FWD);
    14    MotorSpeed(0,0); //beide Motoren halt
    15    LineData(data);
    .
    .
    .
    45    MotorDir(FWD,FWD); !!!!!!!!!!!! //beide Motoren vorwärts
    46    MotorSpeed(0,100); // rechter Motor speed 100
    47    Msleep(480);
    48    MotorSpeed(0,0); //beide Motoren halt
    49  }
    50 return (0);
    51}
    Geändert von i_make_it (08.05.2017 um 00:10 Uhr)

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 28.06.2007, 19:34
  2. Was für einen Motor fur einen Rasenmäher?
    Von LLiinnuuxx im Forum Motoren
    Antworten: 76
    Letzter Beitrag: 07.11.2006, 21:15
  3. Suche einen Motor für einen Roboterarm
    Von Battle MC im Forum Motoren
    Antworten: 20
    Letzter Beitrag: 22.03.2006, 07:50
  4. Was für einen Motor?
    Von Blubb im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 01.03.2005, 17:59
  5. Projekt: Motor per PC steuern
    Von paramedic im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 04.12.2004, 00:20

Stichworte

Berechtigungen

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

Labornetzteil AliExpress