通过颜色传感器的感知颜色控制板子移动以便接住小球(如:黑色向左移动,白色向右移动)可通过对于颜色摆放位置实现体感游戏。
注意事项:此游戏应在光线明亮的环境下进行。
使用说明:下板后应先将颜色传感器倒置于一张白纸上以便进行白平衡。如下图所示
白平衡后,vga开始显示画面,按下FPGA板上的N17按钮即可开始游戏。开始游戏后,通过颜色传感器对颜色的感知来控制板子的移动(白色向左,黑色向右)。若没有接住小球,则游戏失败,失败后则返回初始状态,按N17按钮重新开始。
游戏过程中,按N17按钮可以暂停游戏。
白平衡子系统:
颜色传感器在使用之前必须要先经过白平衡才能使用。所谓白平衡,就是要告诉传感器什么是白色。从理论上讲,白色是由等量的红色、绿色和蓝色混合而成的;但实际上,白色中的三原色并不完全相等,并且对于 TCS3200 的光传感器来说,它对这三种基本色的敏感性是不相同的,导致 TCS3200 的 RGB 输出并不相等,因此在测试前必须进行白平衡调整,使得 TCS3200 对所检测的“白色”中的三原色是相等的。
我在实现此系统的时候采用的是定数计时的方法,即依次选通三种颜色的滤波器,然后对 TCS230的输出脉冲依次进行计数。当计数到255 时停止计数,分别计算每个通道所用的时间。这些时间对应于实际测试时TCS230 每种滤波器所采用的时间基准,在这段时间内所测得的脉冲数就是所对应的R 、G 和B 的值。
测得RGB对应的基准时间后,便将此基准时间传递给颜色识别模块并且给它一个ready信号,表示可以开始识别颜色了,并且不再进行白平衡。
颜色识别别子系统:
在收到白平衡模块的信号后,颜色识别模块开始工作。RGB的滤波器分别开启对应的基准时间长,然后记录此段时间中测得的脉冲的个数,由此便得到了该颜色的RGB值。
游戏逻辑子系统:
此模块负责小球的移动和板子位置的变化以及砖块的消除。通过输入的颜色信号判断板子向左还是向右,或者是不动。若是要移动便将板子对应的位置参数加或者减。对于小球来说,其移动不受颜色控制,每个时钟上升沿通过其水平和竖直速度改变其位置即可,同时如果碰到墙壁或板子会让速度方向反向。同时如果检测到小球碰到砖块则砖块会消失。最后该系统会将小球和板子的位置信号以及砖块的存在条件传给VGA显示系统。
VGA****显示子系统:
显示器扫描方式分为逐行扫描和隔行扫描:逐行扫描是扫描从屏幕左上角 一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一 行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步 信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步, 并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。隔行扫描是指电 子束扫描时每隔一行扫一线,完成一屏后在返回来扫描剩下的线。
行场消隐信号:是针对老式显像管的成像扫描电路而言的。电子枪所发出 的电子束从屏幕的左上角开始向右扫描,一行扫完需将电子束从右边移回到 左边以便扫描第二行。在移动期间就必须有一个信号加到电路上,使得电子 束不能发出。不然这个回扫线会破坏屏幕图像的。这个阻止回扫线产生的信 号就叫作消隐信号,场信号的消隐也是一个道理。
此模块负责根据游戏逻辑传给它的位置等信息在VGA上显示游戏中需要的各个物体。
白平衡模块
module white_balance(
input clk,
input frequncy,
output reg[63:0]R_time,
output reg[63:0]G_time,
output reg[63:0]B_time,
output ready,
output reg [1:0] filter_select
);
接口信号从上到下依次为
时钟,传感器传回的频率,红色,绿色,蓝色滤波器基准时间,白平衡完成信号,滤波器选通信号。
颜色识别模块
module identify_color(
input ready,
input clk,
input frequncy,
input [63:0] r_time,
input [63:0] g_time,
input [63:0] b_time,
output reg [9:0] red,
output reg [9:0] green,
output reg [9:0] blue,
output reg [1:0] filter_select
);
接口信号从上到下依次为
白平衡结束信号,时钟,传感器传回的频率,红色,绿色,蓝色滤波器基准时间,RGB值,滤波器选通信号。
VGA****及游戏逻辑模块
module VGA_display(
input clk,
input pause,
input to_left,
input to_right,
input [3:0] bar_move_speed,
output reg hs,
output reg vs,
output reg [2:0] Red,
output reg [2:0] Green,
output reg [1:0] Blue,
output reg lose
);
接口信号从上到下依次为
时钟,暂停信号,板子左移信号,板子右移信号,游戏速度,VGA行同步信号,
VGA场同步信号,VGA颜色信号,游戏失败信号。
功能框图: 生成水平计数器和竖直计数器,每个时钟脉冲水平计数器加一,当计数到VGA宽度限制后,归零且竖直计数器加一,高度达到限制后竖直计数器也归零 通过水平和竖直计数器产生HS与VS信号。 在对应小球,板子,方块位置输出对应颜色,达到画图的目的给小球,板子位置设置初始值,并给小球赋初始速度。 小球根据速度,每个周期位置变化,若碰到墙壁或板子,则水平或竖直速度反向,若小球位置低于板子,则游戏结束,重新开始,若小球碰到方块速度反向并消除方块 将位置等数据传给上面的模块