| |
Brightness sensor using SPI bus - Add brightness sensor on the robot
1. Start "SPL script editor for MSRDS" and add SPL simulation script
- Add script on the MSRDS SPL editor as follows.
| |
MFEmulator emul1
/TargetEmulator:SPLMFConsoleEmulator
/Procedure_I2CWrite:proc_i2c_write
StartSimulationEngine "SimState/basicsim.xml"
AddNewEntity ent1 /Position:1.5 0.3 0
AddBoxShape /Dimensions:0.6 0.8 2.0 /Mass:100
/DiffuseColor:0 0 0.2509804 1
AddNewEntity ent2 /Position:0 0.4 -1.5
AddBoxShape /Dimensions:2.0 0.8 0.6 /Mass:100
/DiffuseColor:1 1 0 1
AddNewEntity ent3 /Position:-1.5 0.4 0
AddBoxShape /Dimensions:0.6 0.8 2.0 /Mass:100
/DiffuseColor:0 1 0 1
AddDifferentialDriveEntity base1
FlushScript
| |
|
2. Add Brightness sensor as follows.
- Add script on the editor as follows.
| |
MFEmulator emul1
/TargetEmulator:SPLMFConsoleEmulator
/Procedure_I2CWrite:proc_i2c_write
StartSimulationEngine "SimState/basicsim.xml"
AddNewEntity ent1 /Position:1.5 0.3 0
AddBoxShape /Dimensions:0.6 0.8 2.0 /Mass:100
/DiffuseColor:0 0 0.2509804 1
AddNewEntity ent2 /Position:0 0.4 -1.5
AddBoxShape /Dimensions:2.0 0.8 0.6 /Mass:100
/DiffuseColor:1 1 0 1
AddNewEntity ent3 /Position:-1.5 0.4 0
AddBoxShape /Dimensions:0.6 0.8 2.0 /Mass:100
/DiffuseColor:0 1 0 1
AddDifferentialDriveEntity base1
AddBrightnessSensorEntity br1
/Position:0 0.4 -0.3
/ParentEntity:base1
/Procedure_SensorNotify:proc_bright
FlushScript
| |
|
3. Add procedure definition named "proc_bright" for Brightness sensor event.
- Add script on the editor as follows.
| |
MFEmulator emul1
/TargetEmulator:SPLMFConsoleEmulator
/Procedure_I2CWrite:proc_i2c_write
StartSimulationEngine "SimState/basicsim.xml"
AddNewEntity ent1 /Position:1.5 0.3 0
AddBoxShape /Dimensions:0.6 0.8 2.0 /Mass:100
/DiffuseColor:0 0 0.2509804 1
AddNewEntity ent2 /Position:0 0.4 -1.5
AddBoxShape /Dimensions:2.0 0.8 0.6 /Mass:100
/DiffuseColor:1 1 0 1
AddNewEntity ent3 /Position:-1.5 0.4 0
AddBoxShape /Dimensions:0.6 0.8 2.0 /Mass:100
/DiffuseColor:0 1 0 1
AddDifferentialDriveEntity base1
AddBrightnessSensorEntity br1
/Position:0 0.4 -0.3
/ParentEntity:base1
/Procedure_SensorNotify:proc_bright
FlushScript
procedure proc_bright
br = value.RawMeasurement // 0.0 ~ 1.0
br = br * 1000 //convert to 0 ~ 1000 unit
print "Brightness: " + br
//convert type as ushort
br = Util.ToUShort(br)
emul1.SetSpiReadBufferUShort("spi1", br)
end
| |
|
4. Add procedure definition named "proc_i2c_write" for MF emulator event.
- Add script on the editor as follows.
|
| |
MFEmulator emul1
/TargetEmulator:SPLMFConsoleEmulator
/Procedure_I2CWrite:proc_i2c_write
StartSimulationEngine "SimState/basicsim.xml"
AddNewEntity ent1 /Position:1.5 0.3 0
AddBoxShape /Dimensions:0.6 0.8 2.0 /Mass:100
/DiffuseColor:0 0 0.2509804 1
AddNewEntity ent2 /Position:0 0.4 -1.5
AddBoxShape /Dimensions:2.0 0.8 0.6 /Mass:100
/DiffuseColor:1 1 0 1
AddNewEntity ent3 /Position:-1.5 0.4 0
AddBoxShape /Dimensions:0.6 0.8 2.0 /Mass:100
/DiffuseColor:0 1 0 1
AddDifferentialDriveEntity base1
AddBrightnessSensorEntity br1
/Position:0 0.4 -0.3
/ParentEntity:base1
/Procedure_SensorNotify:proc_bright
FlushScript
procedure proc_bright
br = value.RawMeasurement // 0.0 ~ 1.0
br = br * 1000 //convert to 0 ~ 1000 unit
print "Brightness: " + br
//convert type as ushort
br = Util.ToUShort(br)
emul1.SetSpiReadBufferUShort("spi1", br)
end
procedure proc_i2c_write
if (value.Id == "i2c1")
{
command_type = value.ReceivedBytes[0]
if (command_type == 1)
{
distance = value.ReceivedBytes[1]
power = value.ReceivedBytes[2]
power = power - 100
distance = Util.ToDouble(distance / 10.0)
power = Util.ToDouble(power / 100.0)
print "Distance -> " + distance.ToString() + " m / Power -> " + power.ToString()
base1.GoTo(distance, power)
}
else if (command_type == 2)
{
degrees = value.ReceivedBytes[1]
power = value.ReceivedBytes[2]
degrees = degrees - 100
power = power - 100
degrees = Util.ToDouble(degrees)
power = Util.ToDouble(power / 100.0)
print "Degrees -> " + degrees.ToString() + " / Power -> " + power.ToString()
base1.Turn(degrees, power)
}
else if (command_type == 4)
{
left_power = value.ReceivedBytes[1]
right_power = value.ReceivedBytes[2]
left_power = left_power - 100
right_power = right_power - 100
left_power = Util.ToDouble(left_power / 100.0)
right_power = Util.ToDouble(right_power / 100.0)
print "Left -> " + left_power.ToString() + " / Right -> " + right_power.ToString()
base1.Go(left_power, right_power)
}
}
end
| |
|
- Save script.
- Press "F5" key or click "Run" icon.
- Added Brightness sensor will be shown as follows.
|