PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zur Programmierung



polskapawel
13.10.2008, 21:10
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]

fhs
13.10.2008, 21:57
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

RP6conrad
13.10.2008, 22:26
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.

nil.at
14.10.2008, 01:23
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
}

UnIgor
14.10.2008, 23:10
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.