Simons “London Bus”

Simons special byggede bus kan både køre autonomt – hvor den kan manøvrere udenom forhindringer –
men kan også fjernstyres med en sekundær mindstorm enhed.

Selvstyrende Bus med bumpers og drejende afstands sensor.

[lyte id=”iK-h0qEB6cQ” /]

Fjernbetjent bus.

[lyte id=”p15vPmirEJk” /]

Kode til London bus.
#pragma config(Sensor, S1,     bumpervenstre,  sensorTouch)
#pragma config(Sensor, S2,     bumperhojre,    sensorTouch)
#pragma config(Sensor, S3,     afstand,        sensorSONAR)
#pragma config(Motor,  motorA,          venstre,       tmotorNXT, PIDControl, reversed, encoder)
#pragma config(Motor,  motorB,          scanner,       tmotorNXT, PIDControl, encoder)
#pragma config(Motor,  motorC,          hojre,         tmotorNXT, PIDControl, reversed, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

int bumperhits;
int afstandsFactor; // index - forhold mellem vinkel og afstand
int mellemFaktor;

task resetbumper()
{
	while (true)
	{
		bumperhits = 0;
		wait1Msec(5000);
	}
}

task display()
{
	while(true)  // infinite loop:
	{
		nxtDisplayCenteredTextLine(3, "Factor: %d", afstandsFactor   );
		wait1Msec(100);  // Wait 100 milliseconds to help display correctly
	}
}

task factor()
{
	while (true)
	{
		mellemFaktor = (1000/(abs(nMotorEncoder[motorB])));
		mellemFaktor = (mellemFaktor+5);

		if (mellemFaktor > 130)
		{
			afstandsFactor = 130;
		}
		else
		{
			afstandsFactor = mellemFaktor;
		}
	}

}

task scan()
{
	int targetDegrees = 55;
	int targetDegrees2 = (-55);
	string direction = "right";

	while (true)
	{
		if(SensorValue[afstand] > afstandsFactor)
		{
			if (nMotorEncoder[motorB] > targetDegrees)
			{
				direction = "left";
			}
			if (nMotorEncoder[motorB] < targetDegrees2)
			{
				direction = "right";
			}
			if(direction == "left")
			{
				motor[motorB] = -20;
			}

			if(direction == "right")
			{
				motor[motorB] = 20;
			}
		}
		else
		{
			motor[motorB] = 0;
		}
	}
}

task main()
{
	nMotorEncoder[scanner] = 0;

	StartTask(display);
	StartTask(scan);
	StartTask(resetbumper);
	StartTask(factor);
	while(true)
	{
		if (message == 30)
		{
			motor[venstre] = 100;
			motor[hojre] = 100;
			wait1Msec (30);
			ClearMessage();
		}
		if (message == 03)
		{
			motor[venstre] = -100;
			motor[hojre] = -100;
			wait1Msec (30);
			ClearMessage();
		}
		if (message == 12)
		{
			motor[venstre] = 50;
			motor[hojre] = 0;
			wait1Msec (30);
			ClearMessage();
		}
		if (message == 21)
		{
			motor[venstre] = 0;
			motor[hojre] = 50;
			wait1Msec (30);
			ClearMessage();
		}
		else
		{

			if ((SensorValue[bumperhojre] == 0) && (SensorValue[bumpervenstre] == 0))
			{

				if (bumperhits > 3 )
				{
					motor[hojre] = -50;
					motor[venstre] = -50;
					wait1Msec(2000);
					motor[hojre] = 50;
					motor[venstre] = -50;
					wait1Msec(500);

				}

				if(SensorValue[afstand] < afstandsFactor)
				{
					if (nMotorEncoder[motorB] < 0)
					{
						motor[hojre] = ((SensorValue[afstand] -40) + (abs(nMotorEncoder[motorB])));
						motor[venstre] = 100;
					}
					else
					{
						motor[hojre] = 100;
						motor[venstre] = ((SensorValue[afstand] -40) + (abs(nMotorEncoder[motorB])));
					}
				}
				else
				{
					motor[hojre] = 100;
					motor[venstre] = 100;
				}
			}

			if (SensorValue[bumpervenstre] == 1)
			{
				PlaySoundFile("Woops.rso");
				motor[hojre] = -20;
				motor[venstre] = 20;
				wait1Msec(500);
				bumperhits ++;
			}

			if (SensorValue[bumperhojre] == 1)
			{
				PlaySoundFile("Woops.rso");
				motor[hojre] = 20;
				motor[venstre] = -20;
				wait1Msec(500);
				bumperhits ++;
			}
		}
	}
}
Kode til fjernbetjening.
int hojre = 12;
int venstre = 21;
int frem = 30;
int bak = 03;

string besked;

task display()
{
	while(true)  // infinite loop:
	{
		nxtDisplayCenteredBigTextLine(3, besked   );
		wait1Msec(100);  // Wait 100 milliseconds to help display correctly
	}
}

task main()
{
	StartTask(display);
	while(true)
	{
		nNxtExitClicks = 5;

		if(nNxtButtonPressed == 1)
		{
			sendMessage(hojre);
			besked = "Hojre";
		}
		if(nNxtButtonPressed == 2)
		{
			sendMessage(venstre);
			besked = "Venstre";
		}

		if(nNxtButtonPressed == 3)
		{
			sendMessage(frem);
			besked = "Frem";
		}
		if(nNxtButtonPressed == 0)
		{
			sendMessage(bak);
			besked = "Bak";
		}
	}
}

Skriv et svar