当前位置 - 股票行情交易網 - 企業服務 - 求教arduino ttp223長按調節ws2812燈光亮度?

求教arduino ttp223長按調節ws2812燈光亮度?

好的,以下是壹個基於TTP223和WS2812的觸摸效果燈的示例代碼,實現了長按調節亮度、雙擊開關燈的效果:

```

#include <Adafruit_NeoPixel.h>

#define PIN_PIXEL 5 // WS2812控制引腳

#define NUM_PIXELS 30 // 燈珠數量

#define PIN_TOUCH 2 // TTP223觸摸模塊控制引腳

// WS2812對象

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_PIXELS, PIN_PIXEL, NEO_GRB + NEO_KHZ800);

// 亮度調節變量

int brightness = 255;

int step = 10;

// 開關燈標誌

bool isOn = true;

// 觸摸模塊狀態變量

bool isPressed = false;

unsigned long pressTime = 0;

unsigned long releaseTime = 0;

void setup() {

pixels.begin();

pinMode(PIN_TOUCH, INPUT_PULLUP);

}

void loop() {

// 判斷觸摸模塊狀態

bool touchState = digitalRead(PIN_TOUCH);

if (touchState != isPressed) {

isPressed = touchState;

if (isPressed) {

pressTime = millis();

} else {

releaseTime = millis();

if (releaseTime - pressTime < 1000) { // 按下時間不足1秒算單擊

if (isOn) {

pixels.clear(); // 滅燈

pixels.show();

isOn = false;

} else {

pixels.fill(pixels.Color(brightness, brightness, brightness)); // 亮燈

pixels.show();

isOn = true;

}

}

}

}

// 長按調節亮度

if (isPressed && (millis() - pressTime > 1000)) {

if (releaseTime == 0 || (millis() - releaseTime > 500)) { // 避免多次觸發

brightness += step;

if (brightness > 255) {

brightness = 255;

step = -step;

} else if (brightness < 0) {

brightness = 0;

step = -step;

}

pixels.setBrightness(brightness);

pixels.show();

releaseTime = millis();

}

}

}

```

代碼說明:

1. 定義了WS2812控制引腳、燈珠數量、TTP223觸摸模塊控制引腳等常量。

2. 在setup()函數中初始化WS2812對象和觸摸模塊引腳。

3. 在loop()函數中不斷檢測觸摸模塊狀態。如果觸摸模塊狀態發生改變,根據按下時間判斷是單擊還是長按。如果是單擊,則切換燈的開關狀態。如果是長按,則根據按壓時間調節燈的亮度。

4. 燈的亮度調節使用了壹個變量brightness和壹個變量step,brightness表示當前亮度,step表示亮度調節步長,每次長按時根據step加減brightness,當brightness超出範圍時翻轉step的方向。

5. 雙擊開關燈的效果實現比較簡單,直接通過判斷isOn變量的值來控制燈的開關即可。

需要註意的是,這只是壹個簡單的示例代碼,可能還有很多需要改進的地方,比如對按鍵按下的抖動進行濾波、對亮度調節的步長進行優化等。

麻煩給我反饋是否解決了妳的問題,謝謝妳,我很希望能夠給妳提供服務