Programm Ãœberholen in NXC

Mindstorms im Unterricht. Ideen, Vorstellungen

Moderator: Moderatoren

Benutzeravatar
NXT pro
Super-Enorm-Viel-Schreiber
Super-Enorm-Viel-Schreiber
Beiträge: 930
Registriert: 27. Sep 2010 21:38

Beitragvon NXT pro » 20. Okt 2010 15:23

das müsste so passen nur das mit dem wait kannst du der besseren übersicht wegen zile absetzen
das mit der variable musst du auf jeden fall int name am anfang des programms (zwischen den defines und task main() ) schreiben

EDIT: schau auch mal das an
http://www.roberta-home.de/sites/defaul ... 20v1-7.pdf
http://www.debacher.de/wiki/NXC
Real coders don't comment their code - it was hard to write, it should be hard to understand!

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 21. Okt 2010 06:30

okay danke...im rest des programms sind dann aber immer noch genügend fehler-.- ich muss jetzt erstmal eine woche auf studienfahrt, dann melde ich mich wieder ;)
vll könnte jmd bis dahin mal jmd mit nem rotstift über das programm drüberschauen?! :)

grüße

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 29. Okt 2010 09:07

so ich bin wieder da.
und ich bin langsam wirklich verzweifelt...ich brauch nun echt hilfe, denn in einer woche muss ich das programm vorzeigen...kann denn niemand beim ganzen programm helfen?

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 30. Okt 2010 15:04

so jetzt hab ich auch nochmal hingeschrieben was welcher befehl genau bewirken soll...kann da jetzt nicht jmd helfen? ist echt sehr wichtig.
vielen dank

Code: Alles auswählen

#define Abstand 50
#define x


task main ()
{
SetSensorLowspeed(IN_1);
SetSensorLowspeed(IN_2);
SetSensorMode(IN_2, SENSOR_MODE_BOOL);

until(SensorUS(IN_1)<Abstand) //solange vorwärtsfahren bis kleiner abstand
{
OnFwdReg(OUT_AB, 50, OUT_REGMODE_SYNC);Wait(1000);
}

RotateMotor(OUT_A,50,-100);      //um 30 grad nach links drehen
RotateMotor(OUT_B,50,100);
oder (RotateMotorEx (OUT_AB,50,-30,0,True,False);  )

ResetRotationCount(OUT_A); //rotationen count zurücksetzen

until (SensorUS(IN_2)(true));      //solange gradeausfahren bis hindernis nicht erkannt wird
{
OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
}

//motorrotationen mitzählen bis hindernis nicht mehr  erkannt wird und als x speichern:
if (SensorUS(IN_2)(true));
{
Off (OUT_AB);
x = MotorRotationCount(OUT_A);
}

RotateMotor(OUT_A,50,100);  //30 grad nach rechts drehen
RotateMotor(OUT_B,50,-100);
oder (RotateMotorEx (OUT_AB,50,30,0,True,False);  )

until (SensorUS(IN_2)(false)); //solange grade ausfahren bis hindernis nicht mehr erkannt
{
OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
}

RotateMotor(OUT_A,50,100); //um 30 grad nach rechts drehen
RotateMotor(OUT_B,50,-100);
oder (RotateMotorEx (OUT_AB,50,-30,0,True,False);  )

ResetRotationCount(OUT_A); // rotationen count zurücksetzen


until (MotorRotationCount (OUT_A) = x); //solange fahren bis x rotationen ausgeführt
{
OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
}

RotateMotor(OUT_A,50,-100); //dann um 30 grad nach links drehen
RotateMotor(OUT_B,50,100);
oder (RotateMotorEx (OUT_AB,50,30,0,True,False);  )

OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC); // greade ausfahren

}

Benutzeravatar
känganxt
Schreibt viel
Schreibt viel
Beiträge: 116
Registriert: 11. Aug 2010 13:41
Wohnort: Bayern
Kontaktdaten:

Beitragvon känganxt » 30. Okt 2010 16:10

Du kannst in eine Konstante(Die man mit #define definiert)nichts verschiedenes reinschreiben, du musst sie als Variable intialisieren, nähmlich mit:" int x;" zwischen "#define Abstand 50" und "task main()" .
Zuletzt geändert von känganxt am 17. Nov 2010 09:33, insgesamt 1-mal geändert.
Bild

Mindstormsforum is cool!
NXT-Programms ist interessant!
NXC ist cool!

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 30. Okt 2010 16:18

oh danke, hab ich übersehen...wie schauts mit dem rest aus?

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 30. Okt 2010 19:52

Code: Alles auswählen

until (SensorUS(IN_2)(true));
wie schauts denn damit aus...des is doch ned richtig oder?? wie muss das heißen´?

Benutzeravatar
NXT pro
Super-Enorm-Viel-Schreiber
Super-Enorm-Viel-Schreiber
Beiträge: 930
Registriert: 27. Sep 2010 21:38

Beitragvon NXT pro » 30. Okt 2010 20:44

Ich weis nicht, aber

Code: Alles auswählen

 until (IN_2>255)
sollte funktionieren
Zuletzt geändert von NXT pro am 31. Okt 2010 09:47, insgesamt 1-mal geändert.
Real coders don't comment their code - it was hard to write, it should be hard to understand!

Benutzeravatar
känganxt
Schreibt viel
Schreibt viel
Beiträge: 116
Registriert: 11. Aug 2010 13:41
Wohnort: Bayern
Kontaktdaten:

Beitragvon känganxt » 31. Okt 2010 09:39

Ich würde sagen das müsste

Code: Alles auswählen

until (SensorUS(IN_2) == true)
heißen.
Zuletzt geändert von känganxt am 17. Nov 2010 09:34, insgesamt 1-mal geändert.
Bild

Mindstormsforum is cool!
NXT-Programms ist interessant!
NXC ist cool!

Benutzeravatar
NXT pro
Super-Enorm-Viel-Schreiber
Super-Enorm-Viel-Schreiber
Beiträge: 930
Registriert: 27. Sep 2010 21:38

Beitragvon NXT pro » 31. Okt 2010 10:04

Nakiri hat geschrieben:RotateMotor(OUT_A,50,-100); //um 30 grad nach links drehen
RotateMotor(OUT_B,50,100);
oder (RotateMotorEx (OUT_AB,50,-30,0,True,False); )


du musst Vor oder // machen sonst zählt es zu fehlern im programm

FRAGE:
Kommen in NXC beim kompilieren Fehlermeldungen? Wenn ja, welche?
Was genau sind noch deine Probleme?
Real coders don't comment their code - it was hard to write, it should be hard to understand!

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 31. Okt 2010 10:05

NXT pro hat geschrieben:Ich weis nicht, aber

Code: Alles auswählen

 until (IN_2>255)
sollte funktionieren


Was soll dann das größer als 255 bedeuten?


Ich würde sagen das müsste

Code: Alles auswählen

until (SensorUS(IN_2) == true)
heißen.


So hab ich auch gedacht...

Code: Alles auswählen

until (MotorRotationCount (OUT_A) = x)

Wie schauts damit aus...das ist auch ziemlich freestyle...da möchte ich das der roboter die rotationen fährt die er vorher als varialbe eingespeichert hat...

Benutzeravatar
NXT pro
Super-Enorm-Viel-Schreiber
Super-Enorm-Viel-Schreiber
Beiträge: 930
Registriert: 27. Sep 2010 21:38

Beitragvon NXT pro » 31. Okt 2010 10:29

Was soll dann das größer als 255 bedeuten?

255 ist die Reichweite des Ultraschallsensors

until (MotorRotationCount (OUT_A) = x)

probier mal

Code: Alles auswählen

 until (RotateMotor (OUT_A,Geschwindigkeit,x*360);


gleich danach bei

Code: Alles auswählen

OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
Ein wait setzen

Code: Alles auswählen

until (SensorUS(IN_2)(true));      //solange gradeausfahren bis hindernis nicht erkannt wird

vor wird muss ein //, da in neuer zeile

Auch vorherigen beitrag von mir beachten
Real coders don't comment their code - it was hard to write, it should be hard to understand!

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 31. Okt 2010 14:01

255 ist die Reichweite des Ultraschallsensors


aber ich hab ja mit modus bool...da gehts ja nur um erkennen oder nicht..

probier mal

Code: Alles auswählen

 until (RotateMotor (OUT_A,Geschwindigkeit,x*360);

und was bedeutet das dann :P wegen dem x hab ich gehört das kann man nicht als variable nehmen sondern man sollte einen namen nehmen...ich nenn es einfach mal strecke

gleich danach bei

Code: Alles auswählen

OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
Ein wait setzen

ok. wofür ist das? soll ich das bei jedem onfwreg machen,also noch ein wait dahinter? und wie lange?

Code: Alles auswählen

until (SensorUS(IN_2)(true));      //solange gradeausfahren bis hindernis nicht erkannt wird

vor wird muss ein //, da in neuer zeile

diese beschreibungen will ich gar nicht dazu machen ;) das hab ich nur gemacht damit ihr wisst was welcher befehl bedeuten soll ;)

danke ;)

Benutzeravatar
NXT pro
Super-Enorm-Viel-Schreiber
Super-Enorm-Viel-Schreiber
Beiträge: 930
Registriert: 27. Sep 2010 21:38

Beitragvon NXT pro » 31. Okt 2010 15:02

Nakiri hat geschrieben:
255 ist die Reichweite des Ultraschallsensors

Aber ich hab ja mit modus Bool...da geht's ja nur um erkennen oder nicht

Hab ich überlesen, dann wohl so wie känganxt es sagt.

2.Dann nehm halt Strecke*360

3.Das ist, das der Motor Zeit hat zum drehen. Sonst kommt in diesem Fall gleich das rotatemotor (da brauchst du kein wait, sind ja Leistung und rotationen fest angegeben) wenn du z.b. Eine Sekunde lang fahren willst, musst du wait(1000) schreiben. Du musst auch ganz am ende (onfwdreg) ein wait und dann ein Off(OUT_AB) ( zum bremsen) bzw. Coast(OUT_AB) ( zum auslaufen lassen).

Das mit dem wait musst du bei jedem onfwd bzw. Onfwdreg machen
Real coders don't comment their code - it was hard to write, it should be hard to understand!

Nakiri
Hilft fleißig mit!!!
Hilft fleißig mit!!!
Beiträge: 55
Registriert: 9. Okt 2010 12:39

Beitragvon Nakiri » 31. Okt 2010 15:49

2.Dann nehm halt Strecke*360

und was bewirkt oder bedeutet dieser befehl denn?

3.Das mit dem wait musst du bei jedem onfwd bzw. Onfwdreg machen

muss der wait befehl noch mit in die until schleifen rein? oder ausserhalb?

ich poste nochmal schnell das programm...es muss nicht funktionieren aber es sollte wenigstens richtig geschrieben und nachvollziehbar sein :)..hab ich heute erfahren: sehr gut! :D


Zurück zu „Unterricht & AG“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss