小白求助,急求大神解疑-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 599|回复: 2

[未解决] 小白求助,急求大神解疑

[复制链接]
发表于 2021-12-17 15:56 | 显示全部楼层 |阅读模式
本帖最后由 一苇 于 2021-12-17 19:48 编辑

”使用按键开关控制主电路的通断,当主电路接通时,
有一个呼吸灯开始工作,同时RGB灯开始工作
RGB灯的颜色受电位计控制,显示三种颜色
(红、黄、绿)
电位计的数值可以从串口读出来“  
刚刚接触Arduino,看过一点点相关的视频却怎么也不懂该怎么写这个的代码才能实现一个开关同时控制

发表于 2021-12-21 23:54 | 显示全部楼层
本帖最后由 topdog 于 2021-12-22 00:34 编辑

本例采用Nano,按键使用中断,第2、3管脚为中断口,分别对应中断0、中断1。本例接到第2管脚,当引脚电平由低电平变为高电平时触发中断服务程序,特别注意按钮开关的接法。实现呼吸灯就要用到PWM功能,Nano板子上有六个引脚支持PWM输出,分别是引脚3,5,6,9,10,11。本例发光二极管正极接到第3管脚。多彩灯选用一颗WS2812,采用Adafruit NeoPixel库,原件的VDD:D=device 表示器件的意思, 即器件内部的工作电压(接电源),VSS:S=series 表示公共连接的意思,通常指电路公共接地端电压(接地),din接第4管脚。旋转电位器接A0。
接线图如下:

button_RGB.JPG




程序如下:

[pre]//https://github.com/adafruit/Adafruit_NeoPixel

#include <Adafruit_NeoPixel.h>

const int ButtonPin = 2;
const int LedPin = 3;
const int PIXEL_PIN = 4;
const int PIXEL_COUNT = 1;
volatile int potentiometer = 0;
volatile boolean state = false;

Adafruit_NeoPixel PIXEL(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(9600);
  pinMode(ButtonPin, INPUT_PULLUP);
  pinMode(LedPin, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(ButtonPin), Button, RISING);
  PIXEL.begin();
  PIXEL.show();  
}

void loop() {
  potentiometer = analogRead(A0);
  Serial.println(potentiometer);
  delay(100);

  if (state == true) {
    Blink();
    ShowRGB();
  }

  
}

void Button() {
  state = !state;
}

void colorWipe(uint32_t color, int wait) {
  PIXEL.setPixelColor(PIXEL_COUNT, color);
  PIXEL.show();
  delay(wait);
}


void Blink() {
  for (int i = 0; i <= 255; i += 10) {
    analogWrite(LedPin, i);
    delay(100);
  }
  for (int i = 255; i >= 0; i -= 10) {
    analogWrite(LedPin, i);
    delay(100);
  }
}

void ShowRGB() {
  PIXEL.setBrightness(255);                   //Brightness   
  if (potentiometer <= 350) {
    colorWipe(PIXEL.Color(255, 0, 0), 50);    // Red
  } else if (potentiometer > 350 || potentiometer <= 700) {
    colorWipe(PIXEL.Color(51, 204, 0), 50);    // Yellow
  } else if (potentiometer > 700 ||potentiometer <= 1024) {
    colorWipe(PIXEL.Color(0, 255, 0), 50);    // Green
  }
}[/pre]
发表于 2021-12-17 21:04 | 显示全部楼层

回帖奖励 +2 金币

左侧QQ交谈可有偿教学
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-28 18:48 , Processed in 0.076324 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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