SSブログ

XP11 ZIBOにRevsim TQを接続する その2 [X-Plane]

OCUSBMAPPER経由でXP11のZIBO737とRevolutionSimproductsのTQをつなげます。

以下がOCUSBMAPPERのスクリプト。

if文だけの超シンプル構成(笑)

ATがdisarmだったら、RevsimTQのポテンショメーターの値をXP11に渡す。
ATがarmだったら、sim上のTQの位置とRevsimTQの位置を比べて、それに応じた値をモーターへ入力せよ。
というだけの簡単なスクリプト。

これでスロットルの動作はOK。



--*************************************************************************************--
--** 					               CONSTANTS
--*************************************************************************************--

DCMOTORS_DEVICE = 0

--*************************************************************************************--
--** 				               FIND X-PLANE COMMANDS
--*************************************************************************************--

simDR_tq_pos		= find_dataref("sim/cockpit2/engine/actuators/throttle_ratio")
simDR_at_pos		= find_dataref("laminar/B738/autopilot/autothrottle_arm_pos")


--*************************************************************************************--
--** 				              FIND CUSTOM DATAREFS
--*************************************************************************************--

dcmDR_input_analog	= find_dataref("pikitanga/ocusbmapper/dcm" .. DCMOTORS_DEVICE .. "/input/analog")
dcmDR_output_motor	= find_dataref("pikitanga/ocusbmapper/dcm" .. DCMOTORS_DEVICE .. "/output/motor")

--*************************************************************************************--
--** 				                 SYSTEM FUNCTIONS 
--*************************************************************************************--

function process_tq()

	if (simDR_at_pos == 0) then
		simDR_tq_pos[0] = dcmDR_input_analog[5] / 242
		simDR_tq_pos[1] = dcmDR_input_analog[1] / 242
	end


	if (simDR_at_pos == 1) then

	-- tq position
	revsim_left_tq_pos = dcmDR_input_analog[5] / 242
	left_tq_pos1 = simDR_tq_pos[0] + 0.05
	left_tq_pos2 = simDR_tq_pos[0] - 0.05

	revsim_right_tq_pos = dcmDR_input_analog[1] / 242
	right_tq_pos1 = simDR_tq_pos[1] + 0.05
	right_tq_pos2 = simDR_tq_pos[1] - 0.05

	-- left tq up
		if (left_tq_pos1 > revsim_left_tq_pos) then        
			dcmDR_output_motor[1] = 45
			if (left_tq_pos2 < revsim_left_tq_pos) then
				dcmDR_output_motor[1] = 0
			end   
		end

	-- left tq down
		if (left_tq_pos2 < revsim_left_tq_pos) then        
			dcmDR_output_motor[1] = 170
			if (left_tq_pos1 > revsim_left_tq_pos) then
				dcmDR_output_motor[1] = 0
			end   
		end

	-- right tq up
		if (right_tq_pos1 > revsim_right_tq_pos) then        
			dcmDR_output_motor[2] = 45
			if (right_tq_pos2 < revsim_right_tq_pos) then
				dcmDR_output_motor[2] = 0
			end   
		end

	-- right tq down
		if (right_tq_pos2 < revsim_right_tq_pos) then        
			dcmDR_output_motor[2] = 170
			if (right_tq_pos1 > revsim_right_tq_pos) then
				dcmDR_output_motor[2] = 0
			end   
		end

	end

end


--*************************************************************************************--
--** 				               XLUA EVENT CALLBACKS  
--*************************************************************************************--

function before_physics()

	process_tq()

end




以下、動作状況。



次回はフラップかな。






nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。