資料介紹
描述
嘿大家!
這是一個關(guān)于如何創(chuàng)建我的混色器版本的教程。
操縱桿是該項目中的主要控制形式。它控制條帶的 RGB 值,這決定了條帶上 LED 的顏色強(qiáng)度。OLED 顯示這些值。
您可以選擇包含自己的按鈕并對其進(jìn)行編碼以顯示某些模式(您可以在 NeoPixel 庫示例文件夾中找到一些簡潔的模式)。
I2C
I2c 代表內(nèi)部集成電路。它是一種總線接口連接協(xié)議,存在于需要短距離串行通信的設(shè)備中。
I2C 設(shè)備被賦予一個以十六進(jìn)制(或十六進(jìn)制)編寫的地址。我將使用的 OLED 使用 I2C 協(xié)議,地址為 0x3C。
注意:地址中的“0x”僅將其標(biāo)識為十六進(jìn)制值。
在 Arduino 板中,I2C 引腳有所不同:
設(shè)置
在將我的組件連接到 UNO 之前,我移除了操縱桿上的接頭并焊接了新的接頭,因為我對它在面包板上的方向感到不舒服。
前:
后:
然后我開始將組件連接到我的 UNO 以測試它們。我使用的連接是:
操縱桿
地 - 地
VCC - +5V
VRx - A2
VRy - A1
西南 - D5
`
OLED (我用的是 UNO)
地 - 地
VCC - +5V
SCL/SCK - A5 (SCL)
SDA - A4 (SDA)
測試代碼
//JOYSTICK TEST
#define joyX A2
#define joyY A1
const int SW_pin = 5; // digital pin connected to switch output
void setup() {
Serial.begin(9600);
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(9600);
}
void loop() {
int X;
int Y;
int Xval;
int Yval;
X = analogRead(joyX);
Y = analogRead(joyY);
Xval = map(X, 0, 1023, 0, 255);
Yval = map(Y, 0, 1023, 0, 255);
Serial.print(Xval);
Serial.print("|");
delay(50);
Serial.print(Yval);
Serial.print("|")
delay(50);
Serial.print("Switch: ");
Serial.print(digitalRead(SW_pin));
Serial.println("");
delay(200);
}
注意:對于此代碼,您可以更改映射值或?qū)⑵渫耆珓h除,因為它只是一個測試代碼。
把它們放在一起
在測試完所有組件后,我使用面包板將所有組件立即連接到 UNO。
注意:當(dāng)我使用 Nano 時,LED 燈條非常不穩(wěn)定。我鼓勵您使用 MEGA 或 UNO 等電路板,以使電路保持穩(wěn)定。
連接是相同的,除了這里,我已經(jīng)包括了 LED 燈條。
操縱桿
地 - 地
VCC - +5V
VRx - A2
VRy - A1
西南 - D5
`
OLED (我用的是 UNO)
地 - 地
VCC - +5V
SCL/SCK - A5 (SCL)
SDA - A4 (SDA)
`
新像素地帶
地 - 地
VCC - +5V
數(shù)據(jù) - D6
?
編碼
以下代碼是為 1 米長的 30 LED/米 Adafruit Neopixel 條和0.91英寸OLED創(chuàng)建的。
注意:LED的最大值為255 ,最小值為0 ;_ _ _ 高于或低于這些限制可能不會對顏色強(qiáng)度產(chǎn)生影響。_
#include
#define LED_PIN 6
#define LED_COUNT 30
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
#define joyX A2
#define joyY A1
#include "U8glib.h"
U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); //Initialize OLED display
int r = 0;
int g = 0;
int b = 0;//These three variables determine RGB values
int num = 1; //This variable helps switch between colors.
const int swpin = 5; //Defining switch button pin
int SW = 0;
void draw()
{
//READINGS-------------------------------------------------------------------
int X;
int Y;
int Xval;
int Yval;
X = analogRead(joyX); //Reading off of VRx
Y = analogRead(joyY); //Reading off of VRy
Xval = map(X, 0, 1023, 10, 0);
Yval = map(Y, 0, 1023, 255, 0); //mapping values
//COLOR SWITCHING-----------------------------------------------------------
if(Xval < 9){ //This bit of code helps us switch between R, G and B.
num = num + 1;
}
if(Xval > 1){
num = num - 1;
}
//LIMITS-------------------------------------------------------------------
if(num > 3){ //This bit creates a cycle between colors
num = 1;
}
if(num < 1){
num = 3;
}
//Red-value-----------------------------------------------------------------
char buf[8]; //Define buffer
if(r < 0){
r = 255;
}
//Cycles red value
if(r > 255){
r = 0;
}
//Write text. (x, y, text)
u8g.drawStr(1, 16, "R-");
u8g.drawStr(20, 16, itoa(r, buf, 10)); //itoa(int1, buffer, int2) converts int1(base int2) to ASCII format. Buffer stores this data.
//Green-value---------------------------------------------------------------
if(g < 0){
g = 255;
}
//Cycles green value
if(g > 255){
g = 0;
}
u8g.drawStr(64, 16, "G-");
u8g.drawStr(84, 16, itoa(g, buf, 10));
//Blue-value----------------------------------------------------------------
if(b < 0){
b = 255;
}
//Cycles blue value
if (b > 255){
b = 0;
}
u8g.drawStr(1, 32, "B-");
u8g.drawStr(20, 32, itoa(b, buf, 10));
//LINE (x1, y1, x2, y2)(This is optional)-----------------------------------
u8g.drawLine(1, 17, 128, 17);
//draw a line (x1, y1, x2, y2)
//SET COLOR-----------------------------------------------------------------
u8g.drawStr(64, 32, "Color-");
switch(num) {
/*This function converts the num values to R, G and B strings according to the current color being edited.
This code makes sure that when editing value intensity, the 'Color' field actually switches to the correct color(R, G or B).*/
case 1 :
u8g.drawStr(115, 32, "R");
if(Yval > 230){
r = r+1;
}
if(Yval < 20){
r = r-1;
}
break;
case 2 :
u8g.drawStr(115, 32, "G");
if(Yval > 230){
g = g+1;
}
if(Yval < 20){
g = g-1;
}
break;
case 3 :
u8g.drawStr(115, 32, "B");
if(Yval > 230){
b = b+1;
}
if(Yval < 20){
b = b-1;
}
break;
}
}
void setup() {
u8g.setFont(u8g_font_unifont); //Set text font
pinMode(swpin, INPUT_PULLUP); //Define the pin mode for the switch button
strip.begin(); //Initiate LED strip
strip.show(); //Update Strip
strip.setBrightness(50); //Set the brightness of each NeoPixel
}
void loop() {
u8g.firstPage();
do {draw();
} while (u8g.nextPage()); //Draw loop (OLED)
delay(10); //Delay before each loop begins
if(SW < 1){ //Ensures that the strip stays on at all times; you can use the int SW and link it to input swpin to assign a different function to it.
colorWipe(strip.Color(r, g, b), 5);//The variables r g and b are linked to the values you will see on the OLED. The number '5' defines the number of seconds it takes to fill up the entire strip (Neopixels turn on one at a time in this function).
}
}
void colorWipe(uint32_t color, int wait) { //Defining a new function to display the color.
for(int i=0; i// For each pixel in strip:
strip.setPixelColor(i, color); // Set pixel's color
strip.show(); // Update strip to match
delay(wait); // Pause for a moment
}
}
結(jié)果
如果你的連接和代碼都正確,你的混色器就完成了!在垂直方向移動操縱桿可增加/減少每種原色的強(qiáng)度,水平移動可在原色之間切換。您可以將所有東西附加到 PCB 或添加分配給按鈕的酷圖案,使其成為一個更加自定義的項目!
以下是一些結(jié)果圖片:
?
?
?
?
?
?
- LED顯示屏施工組織方案
- LED顯示屏設(shè)計方案
- LED電子顯示屏的相關(guān)報告
- 帶OLED顯示屏的可編程袖珍電源
- 帶NTC和OLED顯示屏的溫度監(jiān)視器
- 帶OLED顯示屏的LoRa節(jié)點和3個帶ESP32的繼電器
- 帶OLED顯示屏和旋轉(zhuǎn)編碼器的AVR編程器
- IIC通信小OLED顯示屏模塊資料匯總 83次下載
- 08接口雙色LED顯示屏的驅(qū)動方式和控制原理詳細(xì)說明
- 小間距LED顯示屏應(yīng)該如何解決詳細(xì)方法說明 37次下載
- LED顯示屏的核心技術(shù)之一顏色處理技術(shù)的介紹 5次下載
- 0.96_OLED顯示屏_PCB_prints 0次下載
- 0.96_OLED顯示屏_原理圖 343次下載
- 前進(jìn)者LED顯示屏規(guī)格 28次下載
- 三色LED顯示屏的設(shè)計與實現(xiàn)
- LED顯示屏是什么材質(zhì) led顯示屏參數(shù)設(shè)置 2717次閱讀
- Led顯示屏控制系統(tǒng)怎么使用 led顯示屏控制器怎么設(shè)置 5685次閱讀
- LED顯示屏灰度有多少等級 2914次閱讀
- 淺談LED顯示屏控制系統(tǒng) 2162次閱讀
- LED顯示屏技術(shù)方案 2337次閱讀
- OLED顯示屏的驅(qū)動設(shè)計與實現(xiàn) 6122次閱讀
- LED燈帶能用來制作顯示屏嗎? 3276次閱讀
- 如何了解LED顯示屏封裝技術(shù) 6616次閱讀
- 如何提高LED顯示屏的散熱量 1251次閱讀
- 基于多端口串行Flash存儲器的LED顯示屏控制設(shè)計 1053次閱讀
- PdigilentRGB OLED顯示屏簡介 1667次閱讀
- LED顯示屏控制卡有哪些分類_如何選擇LED顯示屏控制卡? 1.8w次閱讀
- LED顯示屏如何區(qū)分好壞?區(qū)分LED顯示屏好壞的九大方法 2.1w次閱讀
- 2018年LED顯示屏市場前景分析與LED顯示屏發(fā)展歷程 2w次閱讀
- led顯示屏控制軟件有哪些_九個led顯示屏控制軟件介紹 20.2w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多