TA的每日心情 | 奋斗 2020-9-25 11:02 |
---|
签到天数: 138 天 连续签到: 1 天 [LV.7]常住居民III
|
辉光管时钟
项目背景:
Gixie时钟是一种现代设备,它再现了辉光管显示器的复古美。我们是一群对辉光管充满热情的人,它的辉光真的很迷人。GIXIEClock但作为一个古董,辉光管已经停产,而且库存非常昂贵,所以我们决定打破这个模式,创造一个辉光管!为了降低成本,延长使用寿命,我们决定采用WS 2812全彩色LED,内置控制芯片,给布线带来极大的方便。直接动手,画电路布线.
电路板由于灯太大太密,所以电路板上有很多问题。这是最终版本。
让我们看看实际效果。
我们得加个玻璃盒子。
好的,来个测试管。
LED辉光管,我们还需要定制的钣金外壳。
金属片壳这种涂料很糟糕。要做到最好。板材是氧化的,是由高级胡桃木制成.
GIXEXClock!立刻提高了品味。可以说它很漂亮!我认为不仅仅是我,肯定有更多的人喜欢辉光管,但它的价格和寿命令人头疼,所以我们必须告诉每一个粉丝爱好者:我们以最低的价格制作了它,并将它发布给了Indiegogo。我希望我最喜欢的朋友会来支持它。这是链接。现在以69美元的价格购买。https:/www.indiegogo.com/project/gixie-时钟-最漂亮-辉光管时钟/x/19759163#/这里有更多的生产工艺。https://hackaday.io/project/162313
原理图:
代码:
- #include <avr/io.h>
- #include <EEPROM.h>
- #include "clock.h"
- #include "key.h"
- #include "light.h"
- #define OFF 0
- #define TIME 1
- #define SET 2
- #define EFFECT1 3
- #define EFFECT2 4
- #define EFFECT3 5
- #define EFFECT4 6
- extern unsigned char timer_10ms_flag;
- unsigned char key;
- unsigned char _t[6]={1,1,3,7,3,0};
- unsigned char color_number;
- unsigned char mode = TIME; //工作模式
- #define SETED 0xAA /*出厂第一次设置标志*/
- void setup() {
- unsigned char color_number_reset = EEPROM.read(0x01); // 如果0x01内值为SETED则已经完成初始化
- if(color_number_reset != SETED) // 否则出厂设置
- {
- EEPROM.write(0x00,230); // 辉光管颜色值
- EEPROM.write(0x01,SETED); // 标记已经完成初始化
- }
- color_number = EEPROM.read(0x00);
- delay(100);
- key_init();
- light_init();
- clock_init();
- make_color(&rgb[0],color_number);
- for(unsigned char i=1;i<6;i++){
- rgb[i] = rgb[0];
- }
- poeron_effect();//开机动画
- }
- void loop() {
- static unsigned long timesOfLoop = 0;
- static unsigned char effect2Num = 0;
- if(millis()-timesOfLoop>100)
- {
- switch(mode)
- {
- case TIME:
- clock_read(_t);
- light_wirte(_t,rgb);
- break;
- case OFF:
- break;
- case SET:
- break;
- case EFFECT1://渐变彩虹
- clock_read(_t);
- wheel(rgb);wheel(rgb);wheel(rgb);
- light_wirte(_t,rgb);
- break;
- case EFFECT2://慢刷
- wheel(rgb);
- for(unsigned char i=1;i<6;i++)rgb[i] = rgb[0];
- effect2Num++;effect2Num %= 20;
- for(unsigned char i=0;i<6;i++)_t[i]=effect2Num>>1;
- light_wirte(_t,rgb);
- break;
- case EFFECT3://快刷
- effect2Num++;effect2Num %= 10;
- for(unsigned char i=0;i<6;i++)_t[i]=effect2Num;
- light_wirte(_t,rgb);
- delay(49);
- effect2Num++;effect2Num %= 10;
- for(unsigned char i=0;i<6;i++)_t[i]=effect2Num;
- light_wirte(_t,rgb);
- break;
- case EFFECT4://相对刷
- effect4();
- break;
- }
- timesOfLoop = millis();
- }
- if(timer_10ms_flag&key_flag == 1)
- {
- timer_10ms_flag &= clear_key_flag;
- //读第一个按键
- key = key_read(0);
- switch(key)
- {
- case key_click:
- color_dec();
- break;
- case key_double:
- color_dec();color_dec();
- break;
- case key_long:
- color_dec();
- break;
- default:
- break;
- }
- //读第二个按键
- key = key_read(1);
- switch(key)
- {
- case key_click:
- color_inc();
- break;
- case key_double:
- color_inc();color_inc();
- break;
- case key_long:
- color_inc();
- break;
- default:
- break;
- }
- //读第三个按键
- key = key_read(2);
- switch(key)
- {
- case key_click:
- power();
- break;
- case key_double:
- modde_effect();
- break;
- case key_long:
- time_set();
- break;
- default:
- break;
- }
- }
- }
- void color_dec()
- {
- make_color(&rgb[0],--color_number);
- for(unsigned char i=1;i<6;i++){
- rgb[i] = rgb[0];
- }
- //light_wirte(_t,rgb);
- EEPROM.write(0x00,color_number); // 更新辉光管颜色值
- }
- void color_inc()
- {
- make_color(&rgb[0],++color_number);
- for(unsigned char i=1;i<6;i++){
- rgb[i] = rgb[0];
- }
- //light_wirte(_t,rgb);
- EEPROM.write(0x00,color_number); // 更新辉光管颜色值
- }
- void power()
- {
- static unsigned char n = 0;
- if((n & 0x01) == 0)
- {
- mode = OFF;
- for(unsigned char i=0;i<6;i++)
- rgb[i] = {0,0,0};
- light_wirte(_t,rgb);
- }
- else
- {
- mode =TIME;
- make_color(&rgb[0],color_number);
- for(unsigned char i=1;i<6;i++){
- rgb[i] = rgb[0];
- }
- clock_read(_t);
- light_wirte(_t,rgb);
- }
- n++;
- }
- void modde_effect()
- {
- static unsigned char n = 0;
- n++;
- switch(n % 5)
- {
- case 0:
- make_color(&rgb[0],color_number);
- for(unsigned char i=1;i<6;i++){
- rgb[i] = rgb[0];
- }
- mode = TIME;
- break;
- case 1:
- mode = EFFECT1;
- break;
- case 2:
- mode = EFFECT2;
- break;
- case 3:
- make_color(&rgb[0],color_number);
- for(unsigned char i=1;i<6;i++){
- rgb[i] = rgb[0];
- }
- mode = EFFECT3;
- break;
- case 4:
- mode = EFFECT4;
- break;
- }
- }
- void time_set()
- {
- EEPROM.write(0x00,230); // 辉光管颜色值
- color_number = 230;
- make_color(&rgb[0],color_number);
- for(unsigned char i=1;i<6;i++){
- rgb[i] = rgb[0];
- }
- //power();
- }
复制代码
附件:工程代码
|
评分
-
查看全部评分
|