Lejos: Programm funktioniert nicht wie gewünscht...

NXC, C/C++, Lejos, pbLua, RobotC...

Moderator: Moderatoren

WamboMambo
Weniger als 15 Beiträge
Weniger als 15 Beiträge
Beiträge: 15
Registriert: 14. Mär 2015 18:47

Lejos: Programm funktioniert nicht wie gewünscht...

Beitragvon WamboMambo » 8. Apr 2015 15:26

Mooin,
folgender Code frustriert mich gerade ziemlich:

Code: Alles auswählen

public void wheelOne()
  {
    while(!touch.isPressed())
    {
      LCD.drawString("PRESS BUTTON",2,3);
      LCD.drawString("TO START WHEEL",2,4);
      LCD.drawString("One",4,5);
    }
    LCD.clear();
    wheelOneErgebnis();
  }
 
  public void wheelOneErgebnis()
  {
    while(!touch.isPressed())
    {
      Motor.A.forward();
    }
    Motor.A.stop();
    int wheel1= Motor.A.getPosition();
   
  }

So, Methode wheelOne wird aufgerufen, wie gewünscht erscheint der Text und wie gewünscht sobald der Button gedrückt wird gehts in die Methode Ergebnis (getestet mit einfacher LCD Ausgabe,funktioiert). Bei dieser Methode meint der NXT jedoch das da nix passiert, allerdings nur wenn ich (!touch.isPressed()) benutze. Nehme ich das Ausrufezeichen Weg dreht sich mein Rad wie erwartet solange wie ich den Knopf gedrückt halte...Aber wieso andersrum nicht?
LG
Wambo

Technicmaster0
Schreibt super viel
Schreibt super viel
Beiträge: 379
Registriert: 22. Dez 2010 12:36
Wohnort: In Berlin rechts abbiegen
Kontaktdaten:

Re: Lejos: Programm funktioniert nicht wie gewünscht...

Beitragvon Technicmaster0 » 8. Apr 2015 15:51

Erst einmal wartet der NXT ja, bis der Touchsensor gedrückt wird. Wenn er jetzt gedrückt ist, geht er in die wheelOneErgebnis Methode. Dort fragt er ab, ob der Touchsensor gedrückt ist. Da er aber immer noch gedrückt ist, tritt in der zweiten Methode der Fall "!Touch.isPressed" gar nicht ein, wodurch er die While gar nicht erst betritt.

Insgesamt ist der Schreibstiel aber nicht besonders gut. Besser wäre.

Code: Alles auswählen

bool wasPressed = false;
while (true)
{
 if (!touch.isPressed())
 {
   if (wasPressed == true) break;
   LCD.drawString("PRESS BUTTON",2,3);
   LCD.drawString("TO START WHEEL",2,4);
   LCD.drawString("One",4,5);
 }
 else
 {
   LCD.clear();
   wasPressed = true;
   Motor.A.forward();
 }
}
Motor.A.stop();
int wheel1= Motor.A.getPosition();

WamboMambo
Weniger als 15 Beiträge
Weniger als 15 Beiträge
Beiträge: 15
Registriert: 14. Mär 2015 18:47

Re: Lejos: Programm funktioniert nicht wie gewünscht...

Beitragvon WamboMambo » 8. Apr 2015 15:59

Ah okay... Bin noch nicht so erfahren ist halt so mein Stil :D
Aber gibts nicht irgendeinen Befehl das ich das Trennen kann ohne das jetzt (für mich) so komplizierter zu schreiben?^^

Technicmaster0
Schreibt super viel
Schreibt super viel
Beiträge: 379
Registriert: 22. Dez 2010 12:36
Wohnort: In Berlin rechts abbiegen
Kontaktdaten:

Re: Lejos: Programm funktioniert nicht wie gewünscht...

Beitragvon Technicmaster0 » 10. Apr 2015 13:09

Was willst du jetzt genau? Übrigens ist das auch nicht wirklich kompliziert, sondern eher basic.
Es funktioniert doch alles so, wie du willst, wenn du das Ausrufezeichen wegnimmst. "!touch.isPressed()" bedeutet ja, dass der Berührungssensor nicht gedrückt sein darf, damit die Abfrage wahr ist. Das Ausrufezeichen verwandelt sozusagen den Befehl "touch.isPressed()" in das Gegenteil um, ist also true wenn der ursprüngliche Befehl false ist und umgekehrt.


Zurück zu „textbasierte Programmiersoftware“

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 28 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss