Verständlichkeitsproblem bei Java Code?!

fdor_java

Mitglied
Hallo liebe Community,
ich bin noch ein relativer Anfänger was das Programmieren mit Java angeht,
und hab mich jetzt mal an den NXT Roboter von Lego gemacht und wollte mit Java etwas programmieren. Habe dafür etwas im Internet nach inspiration gesucht und bin auf einen Code gestoßen mit dem es mir möglich ist meinen Roboter zu steuern, in dem er ein Gerät scannt, welches die Bildschirmfarbe wechselt und so die Richtung vorgibt. Wollte einen ähnlichen eigenen Code schreiben, was auch durchauß funktioniert hat, jedoch habe ich ein zwei stellen in dem gefundenen Code nicht verstanden und würde vielleicht einen kleinen Tipp gebrauchen können.
Der Code ist folgender, habe die Problemstellen so ****** markiert :
Java:
import lejos.nxt.Button;
import lejos.nxt.LCD;
import lejos.nxt.LightSensor;
import lejos.nxt.Motor;
import lejos.nxt.SensorPort;

public class iPhoneRoboter {
   // Lichtsensor zum fahren
   static final LightSensor center_light = new LightSensor(SensorPort.S1,true);
   
   public static void main(String args[]) throws Exception {
       Thread.sleep(1000);
       // Messung durchführen, weiß wird erwartet
       LCD.clear();
       LCD.drawString("messe weiß", 0, 0);
       LCD.refresh();
       Button.ENTER.waitForPressAndRelease();
       Thread.sleep(1000);
       int measure = center_light.readNormalizedValue();
       center_light.calibrateHigh();
       // Messung durchführen, schwarz wird erwartet
       LCD.clear();
       LCD.drawString("messe schwarz", 0, 0);
       LCD.drawInt(measure, 0, 1);
       LCD.refresh();
       Button.ENTER.waitForPressAndRelease();
       Thread.sleep(1000);
       int next_measure = center_light.readNormalizedValue();
       center_light.calibrateLow();
       LCD.clear();
       LCD.drawString("init komplett", 0, 0);
       LCD.drawInt(next_measure, 0, 1);
       LCD.drawInt(measure, 0,2);
       LCD.refresh();
       // 0 bis 100 ist gesetzt, Regulärer Modus gesetzt
       Thread.sleep(5000);
       // 5 Werte,
       ***** int oldstate = -1; *******
       ***** int currstate = 0; *******
       ****int val = 0; ******
       *****int rawval = 0; ******
       // main loop

       while (true) {
           // normalize to 5 bins, 0 thru 4
           rawval = center_light.readNormalizedValue();
           val = center_light.readValue();
           ****currstate = (val * 5) / 100; ******
           if (currstate != oldstate) {
               **** oldstate = currstate; ******
               int left = 0;
               int right = 0;                   
               // depending on the current state,
               // drive in the specified direction
               if (currstate <= 0) {
                   left = 0;
                   right = 0;
               } else if (currstate == 1) {
                   left = -1;
                   right = 1;
               } else if (currstate == 2) {
                   left = 1;
                   right = -1;
               } else if (currstate == 3) {
                   left = 1;
                   right = 1;
               } else if (currstate >= 4) {
                   left = -1;
                   right = -1;
               }
               LCD.clear();
               LCD.drawInt(rawval, 0, 0);
               LCD.drawInt(val, 0, 1);
               LCD.drawInt(currstate, 0, 2);
               LCD.drawInt(left, 0, 3);
               LCD.drawInt(right, 0, 4);
               LCD.refresh();
               
               // left motor is A
               if (left == 0) {
                   Motor.A.stop();
               } else if (left == 1) {
                   Motor.A.setSpeed(400);
                   Motor.A.forward();
               } else if (left == -1) {
                   Motor.A.setSpeed(400);
                   Motor.A.backward();
               }
               
               // right motor is B
               if (right == 0) {
                   Motor.C.stop();
               } else if (right == 1) {
                   Motor.C.setSpeed(400);
                   Motor.C.forward();
               } else if (right == -1) {
                   Motor.C.setSpeed(400);
                   Motor.C.backward();
               }
           }
       }
   }
}

ich hoffe ihr könnt mir ein bisschen auf die Sprünge helfen. 🙂

MfG
fdor_java
 
Zuletzt bearbeitet von einem Moderator:
Code:
// 5 Werte,
int oldstate = -1;
int currstate = 0;
int val = 0;
int rawval = 0;
Hier werden lokale Variablen deklariert und initialisiert. --> Grundlagen

Code:
currstate = (val * 5) / 100;
Hier wird der gelesene Wert entsprechend umgewandelt (anhand welcher Formal kann ich dir nicht sagen)

Code:
oldstate = currstate;
Den neuen Status speichern. Die if-Bedingung sorgt dafür das bei gleichbleibenden Input nichts gemacht werden muss sondern der Roboter konstant weiterfährt.
Erst wenn ein anderer Input kommt soll das Programm wieder darauf reagieren. (dazu muss man aber eben wissen welches der letzte Status war
 
Danke für die ausführliche Antwort hat mir wirklich weitergeholfen.
Hab jetzt rausgefunden warum, currstate = (val*5) /100. ist um aus den Werten für schwarz oder weiß lesbare values für die verschiedenen Graustufen zu schaffen.
 

Zurück
Oben