极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13694|回复: 5

arduino 大侠们,请帮我看一下我的程序。按钮没按下,程序可以一直循环吗?

[复制链接]
发表于 2016-8-22 17:41:45 | 显示全部楼层 |阅读模式
现在播完就停了!可以做到循环吗?

#include <Adafruit_NeoPixel.h>
#define PIN 6  
#define BUTTON_PIN   2
Adafruit_NeoPixel strip = Adafruit_NeoPixel(62, PIN, NEO_GRB + NEO_KHZ800);
bool oldState = HIGH;     //布爾oldState =高;
int showType = 0;  

void setup()
{         
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'  初始化所有像素“關”
}

              void loop() {                   //空隙環(){
                // Get current button state.     獲取當前按鈕狀態
                bool newState = digitalRead(BUTTON_PIN);         //布爾newState = digitalRead(BUTTON_PIN);
               
                // Check if state changed from high to low (button press).     檢查狀態由高變低(按下按鈕)。
                if (newState == LOW && oldState == HIGH) {                     //如果(newState ==低&& oldState == HIGH){
                  // Short delay to debounce button.                           //短延時去抖按鈕。
                  delay(20);                                                   //延遲(20);
                  // Check if button is still low after debounce.              //檢查按鈕仍然偏低抖了。
                  newState = digitalRead(BUTTON_PIN);
                  if (newState == LOW) {                                       //如果(newState == LOW){
                    showType++;                                             
                    if (showType > 2)                                          // 如果(showType> 9)
                      showType=0;
                    startShow(showType);
                  }
                }
              
                // Set the last button state to the old state.                   //設置最後一個按鈕的狀態到老態。
                oldState = newState;

              }
     void startShow(int i) {                                                 // 無效startShow(int i)以{
  switch(i){                                                            //開關(ⅰ){
    case 0:rainbow(20);                                                 //案例7:彩虹(20);
            break;                                                   //打破;
    case 1: rainbowCycle(20);                                           //殼體8:rainbowCycle(20);
            break;
   

  }
}

/////////////////////////////////////////////////////////////////


void rainbow(uint8_t wait) {                                           //彩虹無效(uint8_t有等待){
  uint16_t i, j;

  for(j=0; j<256; j++) {                                               // 對於(J = 0;&#308;<256; J ++){
    for(i=0; i<strip.numPixels(); i++) {                               // 對於(i = 0;我<strip.numPixels();我++){
      strip.setPixelColor(i, Wheel((i+j) & 255));                      //   strip.setPixelColor(ⅰ,輪式((I + J)255));
    }
    strip.show();
    delay(wait);                                                       //延遲(等待);
  }
}

/////////////////////////////////////////////////////////////////
void rainbowCycle(uint8_t wait) {                                                    //無效rainbowCycle(uint8_t有等待){
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel                         //對於(J = 0;&#308;<256 * 5; J ++){// 5個週期輪上的所有顏色
    for(i=0; i< strip.numPixels(); i++) {                                             //對於(i = 0;我<strip.numPixels();我++){
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));       //strip.setPixelColor(我,車輪(((I * 256 / strip.numPixels())+ J)255));
    }
    strip.show();
    delay(wait);                                                                     //延遲(等待);
  }
}

/////////////////////////////////////////////////////////////////

uint32_t Wheel(byte WheelPos) {                                                   //uint32_t的車輪(字節WheelPos){
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {                                                             //  如果(WheelPos <85){
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);                       // 返回strip.Color(255 - WheelPos * 3,0 WheelPos * 3);
  } else if(WheelPos < 170) {                                                     //}否則,如果(WheelPos <170){
    WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);                       // 返回strip.Color(0,WheelPos * 3,255 - WheelPos * 3);
  } else {                                                                        // }其他{
   WheelPos -= 170;
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);                       //返回strip.Color(WheelPos * 3,255 - WheelPos * 3,0);
  }
}

        
回复

使用道具 举报

发表于 2016-8-23 15:21:17 | 显示全部楼层
2脚没接下拉电阻吧
回复 支持 反对

使用道具 举报

发表于 2016-8-23 20:02:00 | 显示全部楼层
void loop() {                   //空隙環(){
  // Get current button state.     獲取當前按鈕狀態
  bool newState = digitalRead(BUTTON_PIN);         //布爾newState = digitalRead(BUTTON_PIN);

  // Check if state changed from high to low (button press).     檢查狀態由高變低(按下按鈕)。
  if (newState == LOW && oldState == HIGH) {                     //如果(newState ==低&& oldState == HIGH){
    // Short delay to debounce button.                           //短延時去抖按鈕。
    delay(20);                                                   //延遲(20);
    // Check if button is still low after debounce.              //檢查按鈕仍然偏低抖了。
    newState = digitalRead(BUTTON_PIN);
    if (newState == LOW) {                                       //如果(newState == LOW){
      showType++;
      if (showType > 2)                                          // 如果(showType> 9)
        showType = 0;
    }
  }

  // Set the last button state to the old state.                   //設置最後一個按鈕的狀態到老態。
  oldState = newState;
  startShow(showType); //<<<放在這

}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-24 14:34:40 | 显示全部楼层
fairsky 发表于 2016-8-23 15:21
2脚没接下拉电阻吧

有接下拉电阻的!按按键可以到一下个模式。

这里这段代码可不可以一直循环播放,如果按下按键才播放下一段代码?
void rainbow(uint8_t wait) {                                           //彩虹無效(uint8_t有等待){
  uint16_t i, j;

  for(j=0; j<256; j++) {                                               // 對於(J = 0;&#308;<256; J ++){
    for(i=0; i<strip.numPixels(); i++) {                               // 對於(i = 0;我<strip.numPixels();我++){
      strip.setPixelColor(i, Wheel((i+j) & 255));                      //   strip.setPixelColor(ⅰ,輪式((I + J)255));
    }
    strip.show();
    delay(wait);                                                       //延遲(等待);
  }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-24 14:38:15 | 显示全部楼层
lkc8210 发表于 2016-8-23 20:02
void loop() {                   //空隙環(){
  // Get current button state.     獲取當前按鈕狀態
...

嗯嗯!我试一下!谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-29 11:20:57 | 显示全部楼层
crbgz 发表于 2016-8-24 14:38
嗯嗯!我试一下!谢谢

可以了~~~
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 04:51 , Processed in 0.078588 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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