好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

触摸变色台灯.doc

5页
  • 卖家[上传人]:公****
  • 文档编号:555637329
  • 上传时间:2024-02-23
  • 文档格式:DOC
  • 文档大小:42KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 触摸变色台灯七彩台灯制作的元器件如下(元器件图在文件夹中):1、Light Disc with 7 SMD RGB LED(七彩LED灯) 七彩LED灯 (1).jpg (58.6 KB)2、DFRduino Nano(主控芯片为ATMEGA328P)板子 DFRduino Nano.jpg (57.5 KB)3、Capacitive Touch Sensor(触摸开关) 触摸开关.jpg (73.16 KB)4、USB下载线一条 USB下载线.jpg (72.29 KB)5、面包板一块及插针、导线若干 面包板.jpg (82.31 KB)6、小纸杯一个(本来是用来罩住七彩LED灯产生绚丽效果,但是未找到合适的)七彩台灯的开发环境为Arduino,版本为arduino-0022(同上回LED魔方版本一样) 代码大致过程是:首先确定能产生PWM信号的AVR单片机数字I/O引脚(D3、D5、D6、D9、D10、D11)用于控制RGB_LED七彩灯的电平给入,选择D9控制七彩灯的G引脚,D10控制七彩灯的R引脚,D5控制七彩灯的B引脚而单片机D2引脚控制触摸开关电平的读取。

      选择定时器T/C0为外部中断,每当触摸开关电平改变,触发一次中断T/C2为内部溢出中断(此内部中断为普通工作模式),设定为每2ms溢出一次当程序下载完成,七彩灯不工作,长按触摸开关5s,彩灯处于普通模式下,再触摸开关3s,进入调光模式,调光模式下彩灯一直处于多种色彩循环亮状态最后长按5s触摸开关,彩灯关闭如DV拍摄视频所示)注:由于标志位太多,逻辑比较复杂,不大好控制,因此,暂时写这么一点小小的功能,更多功能后续补加 复制内容到剪贴板 代码:#define touch 2 //设置触摸的数字IO脚 2#define LED_R 10 //全彩灯 红色#define LED_G 9 //全彩灯 绿色#define LED_B 5 //全彩灯 蓝色void setup(){ pinMode(touch,INPUT);//设置数字IO引脚2 为输入 pinMode(9,OUTPUT);//设置数字IO引脚 为输出 pinMode(10,OUTPUT);//设置数字IO引脚 为输出 pinMode(11,OUTPUT);//设置数字IO引脚 为输出 analogWrite(LED_R,0);//设置第10引脚为高电平,点亮led灯 analogWrite(LED_G,0);//设置第9引脚为高电平,点亮led灯 analogWrite(LED_B,0);//设置第5引脚为高电平,点亮led灯 timer2_init(); //初始化定时器2 attachInterrupt(0, blink, CHANGE); //设置为0号中断,中断函数blink,触发方式为change}void timer2_init(void)//定时器2初始化 //{ TCCR2A = 0X00; TCCR2B = 0X07; //时钟源1024分频 TCNT2 = 224; //2ms溢出一次 TIMSK2 = 0X01; //允许中断}volatile int flag = 0; // 中断状态volatile int flag_1 = 0; // 工作状态标识volatile int flag_2 = 0; // 工作状态标识volatile int flag_s = 0; // 中断标识volatile int T = 0; //声明volatile int量void loop(){ if(flag_s == 1) //开机状态下----可以预设为读取EPROM中的值 { analogWrite(LED_R,200); analogWrite(LED_G,100); analogWrite(LED_B,100); } if(flag_s == 2) //关机状态下 { analogWrite(LED_R,0); analogWrite(LED_G,0); analogWrite(LED_B,0); } if(flag_s == 3) //调光模式下 { analogWrite(LED_R,155); analogWrite(LED_G,0); analogWrite(LED_B,0); delay(200); analogWrite(LED_R,0); analogWrite(LED_G,155); analogWrite(LED_B,0); delay(200); analogWrite(LED_R,0); analogWrite(LED_G,0); analogWrite(LED_B,155); delay(200); analogWrite(LED_R,255); analogWrite(LED_G,100); analogWrite(LED_B,0); delay(200); analogWrite(LED_R,255); analogWrite(LED_G,0); analogWrite(LED_B,100); delay(200); analogWrite(LED_R,100); analogWrite(LED_G,255); analogWrite(LED_B,0); delay(200); analogWrite(LED_R,0); analogWrite(LED_G,255); analogWrite(LED_B,100); delay(200); analogWrite(LED_R,255); analogWrite(LED_G,100); analogWrite(LED_B,0); delay(200); analogWrite(LED_R,255); analogWrite(LED_G,0); analogWrite(LED_B,100); delay(200); analogWrite(LED_R,255); analogWrite(LED_G,100); analogWrite(LED_B,100); delay(200); analogWrite(LED_R,100); analogWrite(LED_G,255); analogWrite(LED_B,100); delay(200); analogWrite(LED_R,100); analogWrite(LED_G,100); analogWrite(LED_B,255); delay(200); analogWrite(LED_R,255); analogWrite(LED_G,255); analogWrite(LED_B,255); delay(200); }}void blink()//外部中断执行函数{ if(digitalRead(touch) == 1) { switch(flag_1) { case (0): //持续触碰按键5s,自动开机 { flag = 1; break; } case (1): { if(flag_2 == 0) //持续触碰按键5s,自动关机 { flag = 3; } if(flag_2 == 1) //调光模式 { flag = 2; } break; } } } if(digitalRead(touch) == 0) { flag = 0; }}ISR(TIMER2_OVF_vect)//定时器2,2ms中断溢出一次.内部溢出中断执行函数{ TCNT2 = 224;//给定时器计时初值 if(flag == 1) //开启台灯 { T ++; if(T>=2500) { flag_s = 1; // 到5秒标志开启台灯 T = 0; flag_1 = 1; } } if(flag == 2) //关闭台灯 { T ++; if(T>=2500) { flag_s = 2; // 到5秒标志关闭台灯 T = 0; flag_1 = 0; flag_2 = 0; } } if(flag == 3) //调光模式 { T ++; if(1500<= T && T <2500) { flag_s = 3; // 到3秒标志调光模式 T = 0; flag_2 = 1; } }}。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.