DLP 控制指令流程图

15 篇文章 0 订阅
4 篇文章 0 订阅

按照上面的流程来一步步搭建属于自己的程序流程图.  这里,我是在QT上搭建的类.

创建一个类.我们姑且为 DLPControl{};

class DLPControl : public QObject
{
	Q_OBJECT

Public:

	DLPControl();
	
	~DLPControl();
	

}

//接下来,创建上诉需要用到的各个寄存器指令接口以及接口需要用到的功能.

class DLPControl : public QObject
{
	Q_OBJECT

public:

	//控制DLP 状态指令.
	enum class StartOrStopEnum :int
	{
		Start,
		Pause,
		Stop
	};

	//控制DLP 显示模式指令.
	enum class DisplayModeEnum :int
	{
		Video,
		Pattern

	};

	//控制DLP 投影来源指令.
	enum class DisplaySourceEnum :int
	{
		RgbOrFpd,
		Flash

	};

	enum class TrrigerModeEnum :int
	{
		Mode0_Vsyn,
		Mode1_Internally,
		Mode2_TwoPattern,
		Mode3_Variable,
		Mode4_VsynForVariable
	};

	enum class MainBoxAccessEnum :unsigned int
	{
		Close,
		Image,
		Pattern,
		VariableExP //可变曝光.
	};

	enum  BitEnum :unsigned int
	{
		BIT1 = 1,
		BIT2 = 2,
		BIT3 = 3,
		BIT4 = 4,
		BIT5 = 5,
		BIT6 = 6,
		BIT7 = 7,
		BIT8 = 8,
	};

	enum  LEDEnum : unsigned int
	{

		NOLED = 0,
		RED = 1,
		GREEN = 2,
		YELLOW = 3, //green+red
		BLUE = 4,
		MAGENTA = 5,//blue+red
		CYAN = 6,	//blue+green
		WHITE = 7	//blue+green+red

	};

	//0:1  bit
	enum class PatternTriggerEnum : unsigned int
	{
		Internal = 0,
		ExternalPositive = 1,
		ExternalNegative = 2,
		NoInputTrigger = 3 //不设置触发,对这一张pattern,DLP内部依旧有充分的曝光时间.

	};

	enum InvertPatternEnum :unsigned int
	{
		NoInvertPattern = 0,
		InvertPattern = 1
	};

	enum InsertPatternEnum : unsigned int
	{
		NoInsertPostPattern = 0,
		InsertBlackPattern = 1
	};

	enum SwapBufferEnum : unsigned int
	{
		NoSwapBuffer = 0,
		SwapBuffer = 1
	};

	enum TriggerOutEnum : unsigned int
	{
		TirgOut1Rise = 0,
		TrigOut1Continue = 1
	};

	DLPControl();

	~DLPControl();

protected:

	//封装一系列DLP指令集合.并设置成API可供调用的函数.
	//设置DLP状态开关WR 0x65


	//设置视频模式,或者显示模式WR 0x69


	//设置投影来源WR 0x6F
	

	//设置触发模式WR 0x70
	

	//设置访问模式W 0x77


	//设置曝光时间WR 0x66


	//设置imageIndex entries W 0x78
	

	//write an byte 0x00  0x7D


	//read an byte from  R 0x7D 

	//HardWare status R 0x20
	
	//弹射硬件错误信息.
	

	//System status R 0x21


	//获取系统错误信息.
	

	//Main Status R 0x22


	//获取main 主状态命令提供了DMD park和DLPC350音序器、帧缓冲区和伽马校正的状态
	
	//计算0x5D寄存器  13byte 设计方式.

};

以上只是定义了我们投影需要用到的操作DLP寄存器指令的接口,

这里就使用一个简单的例子,来作为如何对应GUI指导书里面的来书写指令.

比如GUI里开启 以及 关闭DLP投影的功能.

在类中定义.

//控制DLP 状态指令.

enum class StartOrStopEnum :int

{

Start,

Pause,

Stop

};

声明

bool setDLPStartorStop(StartOrStopEnum _status = StartOrStopEnum::Start);

实现的方式.

bool DLPControl::setDLPStartorStop(StartOrStopEnum _status)
{
	//调用指令函数,
	bool commandStatus = false;
	switch (_status)
	{
	case DLPControl::StartOrStopEnum::Start:
	{
		byte writei2cCommand[2] = { 0xE5,0x02 };
		if (_cameraApiControl != nullptr)
		{
			commandStatus = _cameraApiControl->sendDLPCommand(writei2cCommand, 0x65);
		}
		break;
	}
	case DLPControl::StartOrStopEnum::Pause:
	{
		byte writei2cCommand[2] = { 0xE5,0x01 };
		if (_cameraApiControl != nullptr)
		{
			commandStatus = _cameraApiControl->sendDLPCommand(writei2cCommand, 0x65);
		}

		break;
	}
	case DLPControl::StartOrStopEnum::Stop:
	{
		byte writei2cCommand[2] = { 0xE5,0x00 };
		if (_cameraApiControl != nullptr)
		{
			commandStatus = _cameraApiControl->sendDLPCommand(writei2cCommand, 0x65);
		}
		break;
	}
	default:
		break;
	}

	return commandStatus;
}

这里
_cameraApiControl->sendDLPCommand(writei2cCommand, 0x65);

这行代码是将上诉指令通过I2c发送到DLP的方式, 具体大家的主从设备是如何通信的, 这里大家各有各的实现方式,

byte writei2cCommand[2] = { 0xE5,0x00 };

writei2cCommand[0] :寄存器地址.

writei2cCommand[1]: 写入的控制指令.

注意:  0xE5 是 写的指令, 0x65是读取的指令, 这个地址之间的转换就是 0xE5 = 0x65|0x80 得到的,

切记这里的寄存器地址不要写错了.

再来说说,控制指令如何写 ,这里是告诉大家,要控制其启动,停止,需要写入一个字节的指令, 那么这里就需要 0x00 0x01(0000 0001) 这样的16进制来设计了.希望大家明白这里的区别..

以此类推,其它指令相信大家可以很快的设计出来其它基础指令..

实际上,这里只是一小步, 麻烦的是在后面的整套指令设计理解上,

基于在这个基础上,

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值