新手求助:用按鍵切換led燈條顯示模式出現問題-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2297|回复: 0

[未解决] 新手求助:用按鍵切換led燈條顯示模式出現問題

[复制链接]
发表于 2021-5-11 21:28 | 显示全部楼层 |阅读模式
我想用按钮来切换led灯条的显示模式,程序码写完测试时,按下按钮只有第一项有显示,另外的都无法显示,用Serial.println()查看数值,按键按第2次时,数值会变到-255去,再按按键变-254再按变-253........,请问有大神知道原因吗?可以幫我解答一下, 附上我的程序码
板子是Arduino nano v3 的

#include <FastLED.h>
#define LED_TYPE WS2812B
#define NUM_LEDS 12
#define COLOR_ORDER GRB
#define LED_PIN 2
#define button 3
#define brightness 5
CRGB myleds[NUM_LEDS];
bool buttonUp = true;
int Time = 0;


void setup()
{
  Serial.begin(9600);
  pinMode(button, INPUT_PULLUP);
  Serial.begin(9600);
  FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(myleds, NUM_LEDS);
  FastLED.setBrightness(brightness);
  FastLED.show();
  FastLED.clear();
}

void loop()
{
  bool newState = digitalRead(button);
  if (newState == LOW && buttonUp == true)
  {
    delay(50);
    //    Serial.print("按鈕按下後");
    //    Serial.println(newState);
    newState = digitalRead(button);
    if (newState == LOW)
    {
      Time++;
      Serial.println(Time);
      if (Time > 4)
      {
        Time = 0;
      }
    }
    showPattern(Time);
  }
  buttonUp = newState;

}

void showPattern(int n)
{
  if (n == 0)
  {
   for (int i = 0; i <= NUM_LEDS; i++)
  {
    myleds[i] = CRGB(0, 0, 0);
    FastLED.show();
    delay(200);
  }
  }
  else if (n == 1)
  {
    led_1();
  }
  else if (n == 2)
  {
    led_2();
  }
  else if (n == 3)
  {
    led_3();
  }
}

void led_1()
{
  for (int i = 0; i <= NUM_LEDS; i++)
  {
    myleds[i] = CRGB(255, i * 10, 0);
    FastLED.show();
    delay(200);
  }
  for (int i = NUM_LEDS; i >= 0; i--)
  {
    myleds[i] = CRGB(0, 255, i * 10);
    FastLED.show();
    delay(200);
  }
}

void led_2()
{
  for (int i = 0; i <= NUM_LEDS; i++)
  {
    fill_rainbow(myleds, i, 0, 23);
    FastLED.show();
    delay(10);
    FastLED.clear();
  }
}

void led_3()
{ // blue
  FastLED.setBrightness(10);
  for (int i = 0; i < NUM_LEDS / 2; i++)
  {
    myleds[i] = CRGB(0, 0, 255);
    myleds[12 - i] = CRGB(0, 0, 255);
    FastLED.show();
    delay(30);
  }
  //delay(1000);
  for (int i = 0; i < NUM_LEDS / 2; i++)
  {
    myleds[i] = CRGB(0, 0, 0);
    myleds[12 - i] = CRGB(0, 0, 0);
    FastLED.show();
    delay(30);
  }
}

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 06:43 , Processed in 0.095722 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表