斜不胜正灯
来自Labplus盛思维基百科
概述
本作品可通过触发倾斜传感器改变彩色RGB灯带颜色。使用时先根据制作说明将作品组装完整,然后接上 电源(9V电池或USB供电),打开主控板开关,触发倾斜传感器即可。本作品用倾斜传感器作为输入装置, 彩色RGB灯带作为输出装置,可自行编程改变颜色、变换方式、灯带数量等。DIY动手组装,锻炼动手能 力,了解智能创意电子套件的使用,激发创新思维,增加学习乐趣。
使用教程
将灯倾斜触发后,程序控制17颗灯珠渐变颜色。灯回正后,灯带停止渐变颜色。
组装说明
电子模块清单
模块名称 | 数量 |
---|---|
W1控制板 | x1 |
倾斜开关 | x1 |
RGB灯带(17颗) | x1 |
电子模块连接说明
模块 | 引脚 | 说明 |
---|---|---|
倾斜开关 | W1-9/10接口 | |
RGB灯带(17颗) | W1-7/8接口 |
Arduino程序/图形化程序
斜不胜正灯程序包 |
#include "Adafruit_NeoPixel.h" #define SWITCHPIN 9 int numpixelsPin = 7; #define nusec 5 #define NUMPIXELS 20 int num; uint8_t r,g,b; uint16_t h; int led = 20; int fz=0; int flag=0; int flag1=0; int i = 0; uint16_t cnt = 0; Adafruit_NeoPixel pixels1 = Adafruit_NeoPixel(NUMPIXELS, numpixelsPin, NEO_GRB + NEO_KHZ800); void HSV2RGB(uint16_t h, float s, float v, uint8_t * r, uint8_t * g, uint8_t *b); void setup() { pinMode(numpixelsPin,OUTPUT); pinMode(SWITCHPIN,INPUT); digitalWrite(numpixelsPin,LOW); pinMode(nusec,OUTPUT); digitalWrite(nusec,HIGH); // put your setup code here, to run once: pixels1.begin(); // This initializes the NeoPixel library. for(num = 0; num < led; num++) { pixels1.setPixelColor(num, pixels1.Color(0,0,0)); // Moderately bright green color. } pixels1.show(); // This sends the updated pixel color to the hardware for(num = 0; num < led; num++) { pixels1.setPixelColor(num, pixels1.Color(128,0,0)); // Moderately bright green color. pixels1.show(); // This sends the updated pixel color to the hardware delay(65); } for(num = (led-1); num >= 0; num--) { pixels1.setPixelColor(num, pixels1.Color(0,128,0)); // Moderately bright green color. pixels1.show(); // This sends the updated pixel color to the hardware delay(65); } for(num = 0; num < led; num++) { pixels1.setPixelColor(num, pixels1.Color(0,0,128)); // Moderately bright green color. pixels1.show(); // This sends the updated pixel color to the hardware delay(65); } // Serial.begin(115200); } void loop() { if(digitalRead(SWITCHPIN)) { h += 2; if(h>360) { h=0; } HSV2RGB(h, 1.0, 1.0, &r, &g, &b); for(num = 0; num < led; num++) { pixels1.setPixelColor(num, pixels1.Color(r,g,b)); // Moderately bright green color. } pixels1.show(); // This sends the updated pixel color to the hardware digitalWrite(nusec,LOW); //ying yue delay(50); } else { for(num = 0; num < led; num++) { pixels1.setPixelColor(num, pixels1.Color(r,g,b)); // Moderately bright green color. } pixels1.show(); // This sends the updated pixel color to the hardware digitalWrite(nusec,HIGH); //ying yue delay(50); } } void HSV2RGB(uint16_t h, float s, float v, uint8_t * r, uint8_t * g, uint8_t *b) { uint8_t hi; float f, p, q, t; hi = (uint8_t)(h / 60); f = (float)h/60 - hi; p = v * (1 - s); q = v * (1 - f * s); t = v * (1 - (1 - f) * s); switch(hi) { //0: {r,g,b} = {v,t,p} case 0: *r = v * 255; *g = t * 255; *b = p * 255; break; //1: {r,g,b} = {q,v,p} case 1: *r = q * 255; *g = v * 255; *b = p * 255; break; //2: {r,g,b} = {p,v,t} case 2: *r = p * 255; *g = v * 255; *b = t * 255; break; //3: {r,g,b} = {p,q,v} case 3: *r = p * 255; *g = q * 255; *b = v *255; break; //4: {r,g,b} = {t,p,v} case 4: *r = t * 255; *g = p * 255; *b = v * 255; break; //5: {r,g,b} = {v,p,q} case 5: *r = v * 255; *g = p * 255; *b = q * 255; break; default: break; } }
FAQ
版本历史记录
Version | Date | 新增/删除/修复 |
---|---|---|