Brightness sensor using SPI bus - Add brightness sensor on the robot


1. Start "SPL script editor for MSRDS" and add SPL simulation script
  1. 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.
  1. 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.
  1. 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.
  1. 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  
    
      


  2. Save script.

  3. Press "F5" key or click "Run" icon.

  4. Added Brightness sensor will be shown as follows.