Mein kleiner Roboter

Status
Nicht offen für weitere Antworten.

Emilion

Mitglied
Hallo ich habe ein Problem mit meinem Programm bin noch relativ neu in Yava daher frag ich um hilfe bischen Fachkenntnise konnt ich mit schon aneigenen aber noch net so viel das ich mein Problemm lösen kann ich fang einfach mal an:

Ich soll einen kleinen mini.Computer ein parr Befehle ausführen lassen.
Dazu habe ich 2 Motoren und 1Sensor(Lichtsensor)

Ich soll ein Fahrzeug auf einer Linie fahren lassen ohne das es je anhählt und der linie folgt. Sobald es einen unterschied wahrnimmt soll es anders reagieren und dann wieder auf die Bahn zurückkommen.

Das habe ich bereit reingebracht:

Quellcode:
Java:
currentPost.edit(
import lejos.nxt.*;
import lejos.navigation.*;
import lejos.navigation.Pilot;
import lejos.nxt.SensorPort;

/**
 * Roboter folgt einer Spur
 */

public class Spurenfolger
 {
  public static void main (String[] aArg) throws Exception
   {
    Pilot basti = new TachoPilot(5.6f, 13.5f, Motor.A, Motor.C);

     
     LightSensor Sensor = new LightSensor(SensorPort.S1);
	 int startwert = Sensor.readValue();
	 int delta = 20;
	 int differenz = 0;
	 int wert = 9;
	 
	 
	 
	 while (differenz > -delta && differenz < delta) 	
	 		{
	  
	 				int aktuell = Sensor.readValue();
	 				differenz = aktuell - startwert;
	 				Sensor.readValue();
	 				LCD.drawString("aktuell: " + Sensor.readValue(),0,1);
	 				LCD.drawString("Differenz: " + differenz,0,1);
					
	 				
	 				Button.ESCAPE.waitForPressAndRelease();
     				
	 
	
	 				if (differenz < delta) 	
					 
					 									{	if (differenz < wert)
									{ 	basti.forward();
	 									basti.rotate(5);
	 	   												
	 								}					} 
					else 				
	 {
					basti.forward();
	 
	 
	 }
	 
	 		}

   }
}
);
So hier ist das was ich bereits geschrieben er soll halt immer wieder einlesen macht aber momentan nix das macht es mir um so schwerer.
Ich habe es auch schon Prüfen lassen, es wird mir kein Fehler angezeigt vielleicht könnt ihr mir ja helfen.
Der Roboter soll nur weiterfahren nicht stoppen oder so er soll halt ganz flüssig seiner linie folgen und wenn er sie verliehrt sie wieder suchen und weiter fahren.

Dánke schon mal an alle folgenden beiträge ^^
 
Zuletzt bearbeitet:

0x7F800000

Top Contributor
Ist das nicht zufälligerweise so ein lego-teil? Hab mal vor paar jahren mit so einem RCX-Kasten irgendwas gewonnen, musste einen Roboter basteln, der sich in einem Labyrinth bestehend aus einem verzweigten schwarzen streifen zurechtfindet, da musste man unter anderem irgendwie mit einem einzelnen Sensor gradaus fahren können... War schon saulustig^^ :)

Aber wie sollen wir dir da mit deinem Code helfen? Meinst du einer von uns hätte so einen baukasten? Oder dass sich da einer hinsetzt, und deinen Roboter nachbaut? Oder wie soll das gehen? :bahnhof:
 

Emilion

Mitglied
Ne das verlang ich gar nicht ich weiß nur nicht wie ich weiter machen soll, daher frag ich.
Ja es ist son Teil ^^ habe halt das Problem das was mit meinem Code net stimmt und daher nichts passiert und ich nicht weiter kommt da er den Wert zwar ließt, den aus dem Lichtsensor, aber damit nichts anzufanngen weiß oder zumindest nicht das tut was er soll.

Danke auf jeden fall für weitere Beiträge
 

faetzminator

Gesperrter Benutzer
Ich denke, dass wir hier dir höchstens mit Ideen zur Umsetzung eines solchen Programmes helfen können, aber die Idee dazu hast du bereits, nehm ich an. Ansonsten:
Code:
solange was auch immer
    wenn boden hell
        nach links fahren
    sonst
        nach rechts fahren
 

Emilion

Mitglied
^^ ja hab ich darf ich das ganze in "if" schleifen machen ? also wenn Wert = 10 dann handel so ansonsten handel anders hab mir da so eine 5-er schleife einfallen lassen darf ich das ?
 

Emilion

Mitglied
^^ ne hab ich net hab verschiedene bahnen und weiß aber nicht genau wie ich das in den Quellcode bringen soll ?

Ich hab das mal jetzt noch eingebaut
Java:
currentPost.edit(     LightSensor Sensor = new LightSensor(SensorPort.S1);
	 		int startwert = Sensor.readValue();
	 		int delta = 5;
	 		int differenz = 0;
	 		int dunkelGrau = 10;
	 		int schwarz = 10;
	 		int grau = 25;
	 		int hellGrau = 45;
	 		int heller = 70;
	 		int hell = 100;
	 		int aktuell = 50;
	 		
	 		LCD.drawString("Value: " + Sensor.readValue(),0,1);
	 		LCD.drawString("Aktuell: " + aktuell,0,1);
	 		
	 		
	 		
	 				while ( hell > aktuell && aktuell > schwarz) 
	 			{
	 			 	int bAktuell =  Sensor.readValue();
				  	
	 			 	
	 			 	
	 		 		    
					if (bAktuell > hell)	
						{
					 			
								basti.stop();
								basti.rotate(90);
						
							if (bAktuell > heller)	
								{
									basti.stop();
									basti.rotate(100);
								
										if (hellGrau < bAktuell)
										{
											basti.stop();
											basti.rotate(1);
											
											if (grau < bAktuell)
										{
												basti.stop();
												basti.rotate(-180);
											
												if (bAktuell >  dunkelGrau)
											{
													basti.stop();
													basti.rotate(-90);
												
													if (schwarz > bAktuell)
												{
														basti.stop();
														basti.rotate(-50);
												}
											}
										}
											
									}
								}
						}
						else
						{
								basti.forward();	
						
						}
				}
			
   }
});
Damit hab ich einige regeln einfach aufgebaut wobei es von hell nach dunkel geht aber irgend wie gehts net da ich glaube einen fehler in der Schleife gemacht zu haben.
 

faetzminator

Gesperrter Benutzer
Kannst du deine Strecke mit den Flächen und Linien als Bild zeichnen und hier hinzufügen? Momentan weiss ich überhaupt nicht mehr, was du willst. Ich dachte, du willst einfach einer Linie folgen... (und das funktioniert mit meinem Pseudocode, damals mit Fischer und Lego getestet :) )
 

Emilion

Mitglied
Ja hm schwer zu erklären : Sind 5 lienien mit unterschiedlichen Farbtönen von Weiß bis Schwarz. Dabei nur weiß und schwarz in unterschiedlicher Ausgabe.
Hab mich jetzt bischen weiter Probiert damit ich da weiter komme hab das gemacht:

Java:
currentPost.edit(import lejos.nxt.*;
import lejos.navigation.*;
import lejos.navigation.Pilot;
import lejos.nxt.SensorPort;
/*
*@utor Alexander Frahm
*/

public class Spur1111
 {
  public static void main (String[] aArg) throws Exception
   {
    Pilot basti = new TachoPilot(5.6f, 13.5f, Motor.A, Motor.C);
		
     
     LightSensor Sensor = new LightSensor(SensorPort.S1);
     int startwert = Sensor.readValue();
     LCD.drawString("Startwert: " + startwert,0,1);

     int wert1 = 43;
     int wert2 = 54;
     int wert3 = 60;
     int wert4 = 36;
     
     
      while (true)
      	{		
      	 		int aktuell = Sensor.readValue();
				
				LCD.drawString("Aktuell: " + aktuell,1,2);
				
				
				if (aktuell > wert1 && aktuell < wert2)
				{
				 		basti.forward();
				 		
				}
				if (aktuell <= wert1)
				{
					basti.rotate(-5);
					
					
				}
				if (aktuell == wert2 || wert2 < aktuell)
				{
					basti.rotate(5);
				}
				if (aktuell > wert3)
				{
					basti.rotate(45);
					
				}
				if (aktuell < wert4)
				{
					basti.rotate(-45);
				}
				
		}
			
					
}				
		}
		
				
		
		
		
		

);

Wobei die Werte von (1-4) die angaben für das Licht ist :).
Nun will ich da noch einen Weiteren Sensor reinbringen wie schreib ich das den so wie bei dem ersten oder muss ich da noch was beachten ? ???:L
Der Sensor soll dann halt auch eingestellt werden wie bekomme ich die beiden getränd von ihrer Empfindlichkeit und einstellung muss ich da {} drum setzen oder was anderes ? ???:L???:L

Danke an alle weiteren Beiträge
 
Zuletzt bearbeitet:

0x7F800000

Top Contributor
Dann würde ich dir dringendst empfehlen, dir erstmal das Grundlagenwissen an einfachen, nachvollziehbaren, rein softwaremäßigen Beispielen anzueignen. Diese Lego-Dinger sind praktisch undebuggbar, da muss man schon sehr genau wissen, was man tut, bevor man da rangeht. Also, zumindest mal mit klammern sollte man da schon keine Probleme haben...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben