Programm Ãœberholen in NXC

Mindstorms im Unterricht. Ideen, Vorstellungen

Moderator: Moderatoren

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

Beitragvon Nakiri » 3. Nov 2010 18:48

wieso keine geschweiften klammern?
4. :D ich meinte auf was da gewartet wird mit dem waitbefehl

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

Beitragvon känganxt » 3. Nov 2010 18:56

Keine geschweiften Klammer, weil es zum warten da ist und nicht um etwas solange zu tun wie das was in der Klammer steht Wahr/Falsch ist.
Bei 4. hatte ich gemeint ich weiß nich wofür das Wait da ist. :wink:
Zuletzt geändert von känganxt am 17. Nov 2010 09:36, 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 » 3. Nov 2010 19:55

okay...also nur bleibt nur noch die frage nach dem einen wait offen :D

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

Beitragvon NXT pro » 3. Nov 2010 21:02

Hier noch mal eine Aufzählung:

1. Eigentlich habe ich die vergessen :D :D bitte ergänzen.
2. wenn nur ein Befehl nach Bedingung(while) steht, muss keine klammer um den Befehl sein.
3. Ja.
4. Dass nicht sofort der nächste Befehl kommt. Ups :arrow: müsste eigentlich nach der Klammer stehen. Bitte ausbessern.
5. Ja.
6. Wie bei 2.

Bis wann musst du das Programm abgeben/testen?
Weiß jemand, ob RotationCount in Grad oder in Rotationen gemessen wird?
Wenn in Grad, bitte das *360 weglassen(bei RotateMotor(...,...,strecke*360)!!!
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 » 3. Nov 2010 23:44

bis montag muss ich abgeben...testen kann ich leider nicht, weil ich keinen mindstorm habe. ich bin dafür immer extra an die uni in unserer stadt, aber des ging auch nur durch vereinbarung mit unserem lehrer. jedenfalls haben wir bis zum abgabetermin kein termin mehr bekommen um in die uni zu gehen^^
wegen dem grad bin ich auch überfragt...

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

Beitragvon NXT pro » 4. Nov 2010 09:11

Habe noch einen kleinen Fehler bei RotateMotor gefunden

Code: Alles auswählen

#define ABSTAND 50 //der besseren Übersicht wegen werden Konstanten GROß geschrieben

int strecke;        //und Variablen klein

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

while(SensorUS(IN_1)>ABSTAND); // dann muss es while heißen und >ABSTAND
{
  OnFwdReg(OUT_AB, 50, OUT_REGMODE_SYNC); // in dem Fall muss kein wait dastehen,
}                                         //weil auf den Sensor gewartet wird

until(SensorUS(IN_1)<ABSTAND);            //wenn  US <ABSTAND
Off(OUT_AB);                               //STOP
Wait(100);                                //Zeit für STOP:0,1 Sekunde
RotateMotor(OUT_A,50,-100);
RotateMotor(OUT_B,50,100);

ResetRotationCount(OUT_A);

while (SensorUS(IN_2) == 0);
OnFwdReg(OUT_AB,50,OUT_REGMODE_SYNC);

until(SensorUS(IN_2) == 1);
{
  Off(OUT_AB);
  Wait(1000);
}
 
until (SensorUS(IN_2) == 1);
{
  strecke = MotorRotationCount(OUT_A);
  NumOut(0,LCD_LINE2,strecke);             // Zeigt die Rotationen auf dem Display in Zeile 2 an
  Wait(1000);
}
ResetRotationCount(OUT_A);


until (SensorUS(IN_2) == 1);         // fährt , bis hindernis erkannt wird
{                                    // ich habe mal gelesen, dass es mit modus bool nur 0 und 1 gibt
  RotateMotor(OUT_A,50,100);         //Dreht um dreißig grad
  RotateMotor(OUT_B,50,-100);
}
Wait(200);



while (SensorUS(IN_2) == 1);             //Um am Hindernis vorbeizufahren
{
  OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
}


until (SensorUS(IN_2) == 0);              //Drehen, wenn am hinderniss vorbei
{
  RotateMotor(OUT_A,50,100);
  RotateMotor(OUT_B,50,-100);
}

Wait(1000);

until (SensorUS(IN_2) == 0);
RotateMotorEx(OUT_AB,50,strecke*360,0,true,true); //MUSS so sein, wenn zwei Motoren angesprochen werden sollen

Wait(1000);

RotateMotor(OUT_A,50,100);
RotateMotor(OUT_B,50,-100);

ResetRotationCount(OUT_A);


OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
Wait (2000);
Off(OUT_AB);
ClearScreen();
}


Das mit dem Rotationen/Grad: es sind Rotationen, also *360
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 » 4. Nov 2010 10:48

Code: Alles auswählen

until (SensorUS(IN_2) == 0);
RotateMotorEx(OUT_AB,50,strecke*360,0,true,true); //MUSS so sein, wenn zwei Motoren angesprochen werden sollen

könntest du mir den befehl in worten erklären? wofür das true und die 0?



Das mit dem Rotationen/Grad: es sind Rotationen, also *360

perfetto :P

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

Beitragvon NXT pro » 4. Nov 2010 11:01

RotateMotorEx(Ports, Leistung, Drehwinkel, Lenkung, Synchronisierung, Bremsen)

Lenkung, um Motoren mit unterschiedlicher Leistung/Drehrichtung laufen zu lassen.
Synchronisierung macht glaub ich, dass beide wirklich mit gleicher Geschwindigkeit fahren/besser für die Genauigkeit.
Bremsen ist wohl klar.
Der Befehl RotateMotorEx ist generell, um mehrere Motoren anzusprechen, mit diesen Sonderfunktionen.
Hoffe das hat dir geholfen :D :) :lol:
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 » 4. Nov 2010 14:23

wie immer perfekt :P

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

Beitragvon Nakiri » 5. Nov 2010 12:04

hab doch noch was...
müsste des ned hinter die motorrotationszählung kommen?

weil es soll ja zählen bis erkannt wird und sobald erkannt wird kurz stoppen oder? und das wait was nach dem motorrotationenzeug kommt kann man sich dann auch sparen...

Code: Alles auswählen

until(SensorUS(IN_2) == 1);
{
  Off(OUT_AB);
  Wait(1000);
}

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

Beitragvon Nakiri » 5. Nov 2010 13:31

:twisted:

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

Beitragvon NXT pro » 5. Nov 2010 19:43

Nochmal verbessert:

Code: Alles auswählen

#define ABSTAND 50
int strecke;

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

while(SensorUS(IN_1)>ABSTAND);
{
  OnFwdReg(OUT_AB, 50, OUT_REGMODE_SYNC);
}                                         

until(SensorUS(IN_1)<ABSTAND);           
{
Off(OUT_AB);                               
Wait(100);                               
RotateMotor(OUT_A,50,-100);
RotateMotor(OUT_B,50,100);
}

ResetRotationCount(OUT_A);

while (SensorUS(IN_2) == 0);
OnFwdReg(OUT_AB,50,OUT_REGMODE_SYNC);

until(SensorUS(IN_2) == 1);
{
  Off(OUT_AB);
  Wait(1000);
  strecke = MotorRotationCount(OUT_A);
  NumOut(0,LCD_LINE2,strecke);             
  Wait(1000);
  ResetRotationCount(OUT_A);
  RotateMotor(OUT_A,50,100);       
  RotateMotor(OUT_B,50,-100);
  OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
}
Wait(200);


until (SensorUS(IN_2) == 0);             
{
  RotateMotor(OUT_A,50,100);
  RotateMotor(OUT_B,50,-100);
  Wait(1000);
  RotateMotorEx(OUT_AB,50,strecke*360,0,true,true);
  Wait(1000);
  RotateMotor(OUT_A,50,100);
RotateMotor(OUT_B,50,-100);
}

ResetRotationCount(OUT_A);


OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
Wait (2000);
Off(OUT_AB);
ClearScreen();
}
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 » 5. Nov 2010 22:14

oh alles einfach zusammen gefasst?
so gehts und passts?

vielen dank ;)

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

ich hoffs

Beitragvon NXT pro » 6. Nov 2010 07:54

Nakiri hat geschrieben:oh alles einfach zusammen gefasst?
so gehts und passts?

vielen dank


ich hoffs :D :lol: :programmer: :applaus:
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 » 6. Nov 2010 12:26

könntest dus kurz nochmal in worten sagen was passiert? ich bin mir jetzt nicht mehr so sicher :D
vorallem das off out ab wundert mich hier? weil es heisst ja solange bis der ultraschallsensor des hindernis erkennt, soll gemessen werden usw., da soll er doch ned solange abschalten bis er erkennt...oder werden die befehle einfach abgearbeitet? sag einfach nochmal die großen until befehle in worten bitte :D

Code: Alles auswählen

until(SensorUS(IN_2) == 1);
{
  Off(OUT_AB);
  Wait(1000);
  strecke = MotorRotationCount(OUT_A);
  NumOut(0,LCD_LINE2,strecke);             
  Wait(1000);
  ResetRotationCount(OUT_A);
  RotateMotor(OUT_A,50,100);       
  RotateMotor(OUT_B,50,-100);
  OnFwdReg(OUT_AB, 80, OUT_REGMODE_SYNC);
}


oder könnte des strecke...out a nicht auch bei dem while befehl davor stehen?
und fährt er hier dann die ganze zeit grade aus? weil danach kommt ja ein wait 200...
Zuletzt geändert von Nakiri am 6. Nov 2010 17:01, insgesamt 2-mal geändert.


Zurück zu „Unterricht & AG“

Wer ist online?

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

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss