TA的每日心情 | 郁闷 2024-10-28 10:11 |
---|
签到天数: 1703 天 连续签到: 1 天 [LV.Master]伴坛终老
|
本帖最后由 nemon 于 2013-5-10 13:33 编辑
一直很奇怪,为什么在电影里UFO总是降临在USA,小怪兽总是格外关爱某岛国,而某古国来的却大多是鬼子……
1997年,吕克·贝松拍了一部片子《第五元素》(The Fifth Element),Hollywood故事风格:23世纪火热星球将撞击地球,只有凑齐代表风、火、水、土四块元素神石,然后连同第五元素才可以避免这个劫难。地球人靠外星蒙督沙瓦人的帮助,利用第五元素残骸的DNA重新构造了第五元素:一个漂亮的红发女郎——莉露。莉露从实验室跑了出来,无意中撞到了科本·达拉斯(布鲁斯·威利斯 饰演)驾驶的出租车上。后面就老套了——在达拉斯的帮助下,莉露克服了编剧设置的重重困难,击溃了所有挡路的配角、在好莱坞高质量的音效与视觉效果之中把观众按在座位上直至电影结束……
按照上学的时候读后感的要求,看到什么就一定要能体会出一些东西,于是楼主伸出泛着油炸食物香味的右手,搔搔一头乱发,写出了下面这堆废话——
看到本片的剧照,左边的人给我的启示是“岁月是把杀猪刀”——忆往昔,濯濯童山上还是草木茂盛,30年过去草原变戈壁了。
剧照右边,这个就是“第五元素”?为毛别的元素都是石头,这个妞的外形和材质却与其他四个差别这么大?等等,好像真有点什么启示了……
大家知道,XMEGA A3BU Xplained kit上按钮不多,加上左下角的电容按键,一共才4个按钮。如果要用来做游戏机中控制四个方向的键,就都要用上了,那么怎么退出游戏状态呢,在《第五元素》那位红发女士的启发下,楼主勇敢的使用“祭祀”技能,在使用了排叉、咯吱、花生米等传统祭品表达了对五脏庙的敬意之后,楼主想到了一个狡猾的注意,就是——用光感当按钮。
使用XMEGA A3BU Xplained kit自带的demo,可以看到第2项就是Lightsensor,利用这个工具实验得知,遮住光感后adc的采样值会降到100以下。然后打开demo源文件,示例对应的代码是lightsensor.h和lightsensor.c,核心的函数是这样的:- void lightsensor_application(void)
- {
- struct keyboard_event input_key;
- char string_buf[10];
- uint32_t lightsensor_val = 0;
- uint8_t scaled;
- uint8_t iterations = 0;
- // Clear screen
- gfx_mono_draw_filled_rect(0, 0, 128, 32, GFX_PIXEL_CLR);
- // Put icons at the bottom of the screen indicating light intensity
- gfx_mono_put_bitmap(&bitmap_moon, 1, 24); // ~1 lux
- gfx_mono_put_bitmap(&bitmap_cloud, 30, 24); // ~200 lux
- gfx_mono_put_bitmap(&bitmap_indoor, 60, 24); // ~400 lux
- gfx_mono_put_bitmap(&bitmap_sun, 118, 24); // ~850 lux
- // Draw static strings outside the loop
- gfx_mono_draw_string("Lightsensor", 0, 0, &sysfont);
- gfx_mono_draw_string("Raw value:", 0, 8, &sysfont);
- while (true) {
- // Start an ADC conversion of the lightsensor
- lightsensor_measure();
- while (!lightsensor_data_is_ready()) {
- // Wait until the conversion is complete
- }
- lightsensor_val += lightsensor_get_raw_value();
- // Let's average some samples to be outputted
- if (iterations++ >= LIGHTSENSOR_NUM_SAMPLES) {
- iterations = 0;
- lightsensor_val /= LIGHTSENSOR_NUM_SAMPLES;
- snprintf(string_buf, sizeof(string_buf), "%4ld", lightsensor_val);
- gfx_mono_draw_string(string_buf, 70, 8, &sysfont);
- // Scale down to LCD width for drawing bar
- scaled = lightsensor_val >> 4;
- // Graphic bar representing the light level
- gfx_mono_draw_filled_rect(0, 17,scaled, 7, GFX_PIXEL_SET);
- gfx_mono_draw_filled_rect(scaled, 17,128 - scaled, 7,
- GFX_PIXEL_CLR);
- lightsensor_val = 0;
- }
- // exit if the "back" button has been pressed and released
- keyboard_get_key_state(&input_key);
- if ((input_key.keycode == KEYBOARD_BACK) &&
- (input_key.type == KEYBOARD_RELEASE)) {
- break;
- }
- }
- }
复制代码 稍加修改,把用于显示和控制退出的部分去掉,由于多次采样的while循环改成for循环,减少采样次数,把平均值滤波的结果返回,就成了这样子:- unsigned long get_lightsensor_value(void)
- {
- unsigned long lightsensor_val = 0;
- uint8_t iterations = 0;
-
- lightsensor_val=0;
- for (iterations=0;iterations<LIGHTSENSOR_NUM_SAMPLES;iterations++)
- {
- // Start an ADC conversion of the lightsensor
- lightsensor_measure();
- while (!lightsensor_data_is_ready()) {
- // Wait until the conversion is complete
- }
- lightsensor_val += lightsensor_get_raw_value();
- }
- lightsensor_val /= LIGHTSENSOR_NUM_SAMPLES;
- return lightsensor_val;
- }
复制代码 这样,我们自己的函数中,使用- get_lightsensor_value()<100
复制代码 作为条件,当手指头按在光感上时这个表达式为真,当脚趾头按在光感上时这个表达式也为真,这样就完成了把光感当按钮的功能了。但是不足之处也很明显,就是当有一个胖子遮天蔽日的站在你身边的时候,这个表达式也为真……
|
|