灯光¶
概览¶
MoonBot Kit 中包含了两组灯光模块,分别位于 主控模块 和 眼睛模块 。 我们可以使用 Adafruit_NeoPixel 库去驱动这两组灯光模块。
我们可以通过调用 LED
来驱动板载的两颗 LED 灯,通过调用 moonbot_eyes
来驱动12颗 LED 眼睛。同时通过调用 LED 眼睛动作 让眼睛做出丰富的表情。
LED 基础驱动¶
#include <MoonBot.h>
void setup() {
// 使能主控LED
LED.begin();
moonbot_eyes.begin();
// clear LED color
LED.clear();
LED.show();
moonbot_eyes.clear();
moonbot_eyes.show();
}
void loop() {
if (digitalRead(MOONBOT_PIN_BUTTON_A) == LOW
&& digitalRead(MOONBOT_PIN_BUTTON_B) == LOW) {
// 如果A&B同时被按下
// LED和眼睛灯光显示青色
LED.fill(0x003030);
LED.show();
moonbot_eyes.fill(0x003030);
moonbot_eyes.show();
} else if (digitalRead(MOONBOT_PIN_BUTTON_A) == LOW) {
// 如果按键A被按下
// LED0,眼睛右眼显示绿色
LED.setPixelColor(0, 0x003000);
LED.setPixelColor(1, 0);
LED.show();
moonbot_eyes.clear();
moonbot_eyes.fill(0x003000, 0, 6);
moonbot_eyes.show();
} else if (digitalRead(MOONBOT_PIN_BUTTON_B) == LOW) {
// 如果按键B被按下
// LED1,眼睛左眼显示蓝色
LED.setPixelColor(0, 0);
LED.setPixelColor(1, 0x000030);
LED.show();
moonbot_eyes.clear();
moonbot_eyes.fill(0x000030, 6, 6);
moonbot_eyes.show();
} else {
// LED 眼睛灯光关闭
LED.clear();
LED.show();
moonbot_eyes.clear();
moonbot_eyes.show();
}
}
LED 眼睛灯光动作¶
MoonBot Kit 提供了丰富的眼睛动作库以供调用:
colorWipe(moonbot_eyes, 0x40, 200); // 眼睛灯珠逐个变成绿色
theaterChase(moonbot_eyes, 0xFF00, 50); // 眼睛转圈
MoonBotEyesCircle(moonbot_eyes, 50); // 眼睛渐变转圈
rainbow(moonbot_eyes, 5); // 眼睛彩虹色渐变
rainbowCycle(moonbot_eyes, 5); // 眼睛灯珠逐个以不同颜色开始彩虹色转圈渐变
API 参考 - Adafruit_NeoPixel¶
详情见 Adafruit 官网介绍:https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use
API 参考 - LED 眼睛动作¶
枚举类型¶
- enum moonbot_eyes_t
眼睛类型
值:
- kEyesLeft
左眼
- kEyesRight
右眼
- kEyesBoth
双眼
- enum moonbot_look_t
眼睛方向类型
值:
- kEyesLookUp
眼睛向上看
- kEyesLookDown
眼睛向下看
- kEyesLookLeft
眼睛向左看
- kEyesLookRight
眼睛向右看
- enum moonbot_eyes_scroll_t
眼睛滚动方向类型
值:
- kEyesScrollUp
眼睛向上滚动
- kEyesScrollDown
眼睛向下滚动
- kEyesScrollLeft
眼睛向左滚动
- kEyesScrollRight
眼睛向右滚动
函数¶
- void colorFade(Adafruit_NeoPixel& led, uint8_t r, uint8_t g, uint8_t b, uint8_t wait);
LED 颜色从当前颜色渐变到指定颜色。
- 参数
led
:LED 类型r
:红色通道值g
:绿色通道值b
:蓝色通道值wait
:变化时间
- void colorWipe(Adafruit_NeoPixel& led, uint32_t c, uint8_t wait);
LED 灯光颜色逐个变化。
- 参数
led
:LED 类型c
:LED 灯光 RGB 颜色wait
:灯光动作等待时间
- void rainbow(Adafruit_NeoPixel& led, uint8_t wait);
LED 灯光从彩虹色依次渐变。
- 参数
led
:LED 类型wait
:渐变时间
- void rainbowCycle(Adafruit_NeoPixel& led, uint8_t wait) ;
LED 每颗灯珠以不同颜色灯光从彩虹色依次渐变。
- 参数
led
:LED 类型wait
:渐变时间
- void theaterChase(Adafruit_NeoPixel& led, uint32_t c, uint8_t wait);
LED 以指定颜色转圈。
- 参数
led
:LED 类型c
:LED 灯光 RGB 颜色wait
:灯光动作等待时间
- void MoonBotEyesLook(Adafruit_NeoPixel& led, moonbot_look_t look_tpye, uint32_t color);
LED 眼睛向某个方向看。
- 参数
led
:LED 类型look_tpye
:眼睛方向类型color
:眼睛颜色
- void MoonBotEyesScroll(Adafruit_NeoPixel& led, moonbot_eyes_scroll_t scroll_tpye, uint32_t color, uint8_t wait = 50);
LED 眼睛向某个方向滚动。
- 参数
led
:LED 类型scroll_tpye
:眼睛滚动方向类型color
:眼睛颜色wait
:滚动时间,默认为50ms
- void MoonBotEyesCircle(Adafruit_NeoPixel& led, uint32_t color, moonbot_eyes_t eyes_type = kEyesBoth, uint8_t wait = 50);
LED 眼睛渐变转圈滚动。
- 参数
led
:LED 类型color
:眼睛颜色eyes_type
:眼睛类型wait
:滚动时间,默认为50ms