
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.robotika.sk/robowiki/index.php?action=history&amp;feed=atom&amp;title=NJM_Source_Code</id>
		<title>NJM Source Code - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.robotika.sk/robowiki/index.php?action=history&amp;feed=atom&amp;title=NJM_Source_Code"/>
		<link rel="alternate" type="text/html" href="https://wiki.robotika.sk/robowiki/index.php?title=NJM_Source_Code&amp;action=history"/>
		<updated>2026-07-04T03:10:10Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.robotika.sk/robowiki/index.php?title=NJM_Source_Code&amp;diff=4658&amp;oldid=prev</id>
		<title>Robot: New page: &lt;source lang=&quot;java&quot;&gt; import lejos.navigation.SimpleNavigator; import lejos.nxt.*;   public class GoalFinder1 {  	/* This program will let the robot follow the black line until 	it detects ...</title>
		<link rel="alternate" type="text/html" href="https://wiki.robotika.sk/robowiki/index.php?title=NJM_Source_Code&amp;diff=4658&amp;oldid=prev"/>
				<updated>2009-08-13T16:19:56Z</updated>
		
		<summary type="html">&lt;p&gt;New page: &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; import lejos.navigation.SimpleNavigator; import lejos.nxt.*;   public class GoalFinder1 {  	/* This program will let the robot follow the black line until 	it detects ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import lejos.navigation.SimpleNavigator;&lt;br /&gt;
import lejos.nxt.*;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class GoalFinder1 {&lt;br /&gt;
&lt;br /&gt;
	/* This program will let the robot follow the black line until&lt;br /&gt;
	it detects a crossing. At a crossing the robot always takes the&lt;br /&gt;
	rightmost turn. This procedure will allow the robot the find a&lt;br /&gt;
	goal at the end of the maze. */&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	// initializing the navigator&lt;br /&gt;
	static SimpleNavigator navigator = new SimpleNavigator(5.6f,11.5f,Motor.C,Motor.B);&lt;br /&gt;
	static int threshold = 50;&lt;br /&gt;
		&lt;br /&gt;
	// main program&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) throws InterruptedException {&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		// initializing variables&lt;br /&gt;
		int valueLightCornerRight, valueLightCornerLeft, valueLightFollow;&lt;br /&gt;
		int i = 1;&lt;br /&gt;
						&lt;br /&gt;
		// initializing sensors and navigator speed&lt;br /&gt;
		LightSensor lightCornerRight = new LightSensor(SensorPort.S2);&lt;br /&gt;
		LightSensor lightCornerLeft = new LightSensor(SensorPort.S4);&lt;br /&gt;
		LightSensor lightFollow = new LightSensor(SensorPort.S3);&lt;br /&gt;
		navigator.setSpeed(180);&lt;br /&gt;
		&lt;br /&gt;
		Thread.sleep(1000);&lt;br /&gt;
		&lt;br /&gt;
		while(true){&lt;br /&gt;
					&lt;br /&gt;
				// read the sensor values and print them on the screen&lt;br /&gt;
				valueLightCornerRight = lightCornerRight.readValue();&lt;br /&gt;
				valueLightCornerLeft = lightCornerLeft.readValue();&lt;br /&gt;
				valueLightFollow = lightFollow.readValue();&lt;br /&gt;
								&lt;br /&gt;
				LCD.drawInt(valueLightCornerRight, 0, 0);&lt;br /&gt;
				LCD.drawString(&amp;quot;corner right&amp;quot;, 4, 0);&lt;br /&gt;
				LCD.drawInt(valueLightCornerLeft, 0, 1);&lt;br /&gt;
				LCD.drawString(&amp;quot;corner left&amp;quot;, 4, 1);&lt;br /&gt;
				LCD.drawInt(valueLightFollow, 0, 2);&lt;br /&gt;
				LCD.drawString(&amp;quot;middle&amp;quot;, 4, 2);&lt;br /&gt;
							&lt;br /&gt;
				// follow the line as long as no corner or crossing is detected	&lt;br /&gt;
				if(i==1) {&lt;br /&gt;
					followLine(valueLightFollow);&lt;br /&gt;
					LCD.drawString(&amp;quot;following line&amp;quot;, 0, 5);&lt;br /&gt;
					if(cornerDetected(valueLightCornerRight,valueLightCornerLeft,valueLightFollow)) i++;&lt;br /&gt;
					}&lt;br /&gt;
													&lt;br /&gt;
				// drive forward a little bit when crossing is detected&lt;br /&gt;
				if(i==2){&lt;br /&gt;
					navigator.travel(9f);&lt;br /&gt;
					i++;&lt;br /&gt;
					LCD.clear();&lt;br /&gt;
					LCD.drawString(&amp;quot;drive forward&amp;quot;, 0, 5);&lt;br /&gt;
					Sound.beep();&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
				// turn right&lt;br /&gt;
				if(i==3){&lt;br /&gt;
					boolean line = false;&lt;br /&gt;
					navigator.rotate(-140f, true);&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
					while(navigator.isMoving()){&lt;br /&gt;
							valueLightCornerRight = lightCornerRight.readValue();&lt;br /&gt;
							valueLightCornerLeft = lightCornerLeft.readValue();&lt;br /&gt;
							valueLightFollow = lightFollow.readValue();&lt;br /&gt;
							LCD.drawInt(valueLightCornerRight, 0, 0);&lt;br /&gt;
							LCD.drawString(&amp;quot;corner right&amp;quot;, 4, 0);&lt;br /&gt;
							LCD.drawInt(valueLightCornerLeft, 0, 1);&lt;br /&gt;
							LCD.drawString(&amp;quot;corner left&amp;quot;, 4, 1);&lt;br /&gt;
							LCD.drawInt(valueLightFollow, 0, 2);&lt;br /&gt;
							LCD.drawString(&amp;quot;middle&amp;quot;, 4, 2);&lt;br /&gt;
							if(valueLightCornerLeft&amp;lt;threshold)	{&lt;br /&gt;
								i = 1;&lt;br /&gt;
								line = true;&lt;br /&gt;
								navigator.stop();&lt;br /&gt;
								Sound.beep();&lt;br /&gt;
								break;&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					if(!line) i++;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
				// forward&lt;br /&gt;
				if(i==4){&lt;br /&gt;
					boolean line = false;&lt;br /&gt;
					navigator.rotate(150f, true);&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
					while(navigator.isMoving()){&lt;br /&gt;
							valueLightCornerRight = lightCornerRight.readValue();&lt;br /&gt;
							valueLightCornerLeft = lightCornerLeft.readValue();&lt;br /&gt;
							valueLightFollow = lightFollow.readValue();&lt;br /&gt;
							LCD.drawInt(valueLightCornerRight, 0, 0);&lt;br /&gt;
							LCD.drawString(&amp;quot;corner right&amp;quot;, 4, 0);&lt;br /&gt;
							LCD.drawInt(valueLightCornerLeft, 0, 1);&lt;br /&gt;
							LCD.drawString(&amp;quot;corner left&amp;quot;, 4, 1);&lt;br /&gt;
							LCD.drawInt(valueLightFollow, 0, 2);&lt;br /&gt;
							LCD.drawString(&amp;quot;middle&amp;quot;, 4, 2);&lt;br /&gt;
							if( valueLightFollow&amp;lt;threshold)	{&lt;br /&gt;
								i = 1;&lt;br /&gt;
								line = true;&lt;br /&gt;
								navigator.stop();&lt;br /&gt;
								Sound.beep();&lt;br /&gt;
								break;&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					if(!line) i++;&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
				// turn left&lt;br /&gt;
				if(i==5){&lt;br /&gt;
					boolean line = false;&lt;br /&gt;
					navigator.rotate(110f, true);&lt;br /&gt;
					Thread.sleep(1000);&lt;br /&gt;
					while(navigator.isMoving()){&lt;br /&gt;
							valueLightCornerRight = lightCornerRight.readValue();&lt;br /&gt;
							valueLightCornerLeft = lightCornerLeft.readValue();&lt;br /&gt;
							valueLightFollow = lightFollow.readValue();&lt;br /&gt;
							LCD.drawInt(valueLightCornerRight, 0, 0);&lt;br /&gt;
							LCD.drawString(&amp;quot;corner right&amp;quot;, 4, 0);&lt;br /&gt;
							LCD.drawInt(valueLightCornerLeft, 0, 1);&lt;br /&gt;
							LCD.drawString(&amp;quot;corner left&amp;quot;, 4, 1);&lt;br /&gt;
							LCD.drawInt(valueLightFollow, 0, 2);&lt;br /&gt;
							LCD.drawString(&amp;quot;middle&amp;quot;, 4, 2);&lt;br /&gt;
							if(valueLightFollow&amp;lt;threshold)	{&lt;br /&gt;
								i = 1;&lt;br /&gt;
								line = true;&lt;br /&gt;
								navigator.stop();&lt;br /&gt;
								Sound.beep();&lt;br /&gt;
								break;&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	// following the black line&lt;br /&gt;
	&lt;br /&gt;
	public static void followLine(int light){&lt;br /&gt;
				&lt;br /&gt;
			if(light&amp;gt;threshold)&lt;br /&gt;
			{&lt;br /&gt;
				Motor.B.setSpeed(300);&lt;br /&gt;
				Motor.B.forward();&lt;br /&gt;
				Motor.C.setSpeed(150);&lt;br /&gt;
				Motor.C.backward();&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			else &lt;br /&gt;
			{&lt;br /&gt;
				Motor.C.setSpeed(300);&lt;br /&gt;
				Motor.C.forward();&lt;br /&gt;
				Motor.B.setSpeed(150);&lt;br /&gt;
				Motor.B.backward();&lt;br /&gt;
			}&lt;br /&gt;
		&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	// detecting corner or crossing&lt;br /&gt;
	&lt;br /&gt;
	public static boolean cornerDetected(int lightRight, int lightLeft, int lightCenter){&lt;br /&gt;
						&lt;br /&gt;
			if((lightLeft&amp;lt;40 || lightRight&amp;lt;40) &amp;amp;&amp;amp; lightCenter&amp;lt;threshold)	return true;&lt;br /&gt;
			else return false;&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Robot</name></author>	</entry>

	</feed>