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

Thema: Fragen zur Programmierung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    30.09.2008
    Beiträge
    8

    Fragen zur Programmierung

    Schönen Abend euch allen,

    hab angefangen in C zu programmieren.

    Will was ganz Simples realisieren um denn Einstieg zu finden. Es geht darum eine Zahl zwischen 0-10 einzugeben und der RP6 soll im Terminal dann Ausgeben ob diese zahl größer oder kleiner als 5 ist. Hier der Code
    ************************************************** ***********
    #include "RP6RobotBaseLib.h"

    int main(void)

    {
    initRobotBase();

    writeString("Geben Sie einen Wert von 0-10 ein\n");

    uint16_t x;

    if(x<5)
    {
    writeString("Die eingegebene Zahl ist kleiner als 5");
    }

    else if(x>5)
    {
    writeString("Die eingegebene zahl ist groesser als 5\n");
    }
    else
    {
    writeString("Die Zahl liegt außerhalb des bereichs\n");
    }

    return 0;
    }

    ************************************************** *********
    Wenn der Roboter gestartet wird erscheint auch schon die Frage im terminal Program nur egal was eingegeben wird, kommt keine Antwort!!!

    Frage: Wei soll ich mein Programm verändern??[/b]

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    Hi,

    im Programm wird die Variable "x" nur deklariert, erhält aber keinen Wert zugewiesen: es fehlt eine Eingabefunktion, die es sicher in der RP6-Bibliothek, die ich nicht kenne, gibt, etwa "fscanf(..)" (benötigt vermutlich auch fdevopen(..)) -- kann dort aber auch ganz anders heißen! Du findest das vermutlich in der RP6-Dokumentation und/oder in den Software-Beispielen erläutert.

    Wahrscheinlich meldet sich hier noch jemand, der sich mit dem RP6 auskennt, und Dir einen klareren Tipp geben kann.

    Noch eins: (Dann und nur dann) wenn x "5" ist, gilt "liegt außerhalb des Bereichs" -- warum?

    Gruß

    Fred
    Only entropy comes easy. - Anton Checkhov

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    384
    In manual auf page 80 stehen die Functionen für den RS232 aus zulesen (readChar). Am besten siehts du mal das "example_02" UART an. Da ist ein Beispiel programmiert.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    37
    Beiträge
    94
    Ausserdem empfiehlt es sich die Variable zu deklarieren und dann alles andere in eine while-Schleife zu packen, da das Programm sonst nur 1x durchlaufen wird und nachher seltsame Effekte auftreten können. (Das mit den seltsamen Effekten hab ich nur vom Hörnsagen, dass dein Programm in dieser Variante aber nur einmal durchlaufen wird ist Tatsache)

    Dein Programm sollte besser so strukturiert sein:
    Deklaration und Initialisierung aller Variablen (auch durch den Aufruf von initRobotBase()
    While (1)
    {
    Ausgabe
    Eingabe
    Vergleich
    Ausgabe
    }
    while (!asleep()) sheep++;
    RP6 und Asuro Befehlsübersicht

  5. #5
    UnIgor
    Gast

    Re: Fragen zur Programmierung

    Zitat Zitat von polskapawel
    Frage: Wei soll ich mein Programm verändern??[/b]
    Hi Polskapawel,

    möchtest Du mittels if-Anweisung einen klar definierten Bereich abstecken, solltest Du dir vorher genau überlegen, wie die Grenzen für diesen zulässigen Bereich aussehen.
    In der aktuellen Version deiner if-Anweisung werden keine unteren und oberen Grenzwerte festgelegt. Die Folge ist, dass nicht nur ein Bereich "abgesteckt" wird, sondern gleich zwei von einander getrennte Bereiche und zwar von [0..4] durch "if(x<5)" und von [6..65535] durch "else if(x>5)"! Also quasi alles, was der Datentyp uint_16 hergibt, mit Ausnahme der Zahl 5.
    Besser wäre es, wenn Du die Grenzen wirklich strikt festlegst.
    In etwa so:

    //wenn x größergleich 0 UND x kleinergleich 4 (statt x<=4 auch möglich: x<5)
    if(x>=0 && x<=4)
    {
    Anweisungen;
    }
    //wenn x größergleich 5 UND x kleinergleich 10
    else if(x>=5 && x<=10)
    {
    Anweisungen;
    }
    //alles was nicht zwischen 0 und 10 (einschließlich Grenzen) liegt
    else
    {
    writeString_P("Die Zahl liegt außerhalb des gueltigen Bereichs!\n");
    }

    Was das Einlesen eines Zeichens betrifft schließe ich mich RP6conrad an. Mit readchar() dürfte es klappen

    Hoffe ich konnte Dir etwas helfen.

    Have fun.
    Geändert von UnIgor (01.05.2013 um 23:34 Uhr)

Berechtigungen

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

12V Akku bauen