c - 我如何将这个为单个 LED 制作的代码转换为我在 arduino 上的 LED 灯条?
问题描述
所以我的项目是用 rgb 条制作一个 LED 风扇,我发现了一些非常相似的东西,但我在一周内尝试使用 fastLED 库更改代码以喜欢转换它,但我请求帮助。[类似的代码,但与POV 领导的 arduino 项目中的 digitalWrite 类似:
// bit shift through the byte and output it to the pin
for (int j=0; j<charHeight; j++) {
digitalWrite(LEDpins[j], !!(b & (1 << j)));
(我不能用 LED 灯条做“digitalWrite”)] 2
所以我想知道是否有人在代码方面可以给我一些更正。
我有一个 arduino nano,它可以让 7 个 LED(我想在原型的侧面写一条消息)闪烁以通过视网膜持久性来写一条消息。 我想要做的是当我在序列中收到一条消息时(我制作了一个蓝牙应用程序给我发送一个单词),我希望它在他旋转时显示在我的原型上。因此,如果我想在原型的侧面显示一个字母,我必须像我手动制作的那样写它,但它太长了:
// la lettre A :
leds[24] = CRGB::Red;
leds[23] = CRGB::Red;
leds[22] = CRGB::Red;
leds[21] = CRGB::Red;
leds[20] = CRGB::Red;
leds[19] = CRGB::Red;
leds[18] = CRGB::Black;
FastLED.show();
delay(Pause);
leds[24] = CRGB::Black;
leds[23] = CRGB::Black;
leds[22] = CRGB::Black;
leds[21] = CRGB::Red;
leds[20] = CRGB::Black;
leds[19] = CRGB::Black;
leds[18] = CRGB::Red;
FastLED.show();
delay(Pause);
leds[24] = CRGB::Black;
leds[23] = CRGB::Black;
leds[22] = CRGB::Black;
leds[21] = CRGB::Red;
leds[20] = CRGB::Black;
leds[19] = CRGB::Black;
leds[18] = CRGB::Red;
FastLED.show();
delay(Pause);
leds[24] = CRGB::Black;
leds[23] = CRGB::Black;
leds[22] = CRGB::Black;
leds[21] = CRGB::Red;
leds[20] = CRGB::Black;
leds[19] = CRGB::Black;
leds[18] = CRGB::Red;
FastLED.show();
delay(Pause);
leds[24] = CRGB::Red;
leds[23] = CRGB::Red;
leds[22] = CRGB::Red;
leds[21] = CRGB::Red;
leds[20] = CRGB::Red;
leds[19] = CRGB::Black;
FastLED.show();
delay(Pause);
leds[24] = CRGB::Black;
leds[23] = CRGB::Black;
leds[22] = CRGB::Black;
leds[21] = CRGB::Black;
leds[20] = CRGB::Black;
leds[19] = CRGB::Black;
FastLED.show();
delay(Pause);
所以从技术上讲它很好用,但是当我发送例如“困难”时,我想用一个函数或类似的东西来做。(我可以看到它是如何工作的,但现在我无法做到)。
请帮我,
如果您想了解更多信息,可以告诉我。
伊万·巴罗佐
解决方案
因此,如果我想在原型的侧面显示一个字母,我必须像我手动制作的那样写它,但它太长了
可以理解的是,您不想手动写下每个单独的字母列序列。这是一个使用字符图像表的示例程序(类似于字符 ROM);它演示了 ANSI 终端上的输出,但您可以轻松地将其调整到您的 LED 灯条上。
/* cc -std=c99 */
// glyphs taken from https://github.com/uffejakobsen/sysvbanner/blob/master/banner.c
char glyphs[7*(0x7F-' '+1)/8][7*8] =
{ // 7 x 7 pixels for each of our displayable characters (8 side by side)
" ### ### ### # # ##### ### # ## ### ",
" ### ### ### # # # # ## # # # # ### ",
" ### # # ######## # ### # ## # ",
" # # # ##### # ### # ",
" ####### # # # #### # # ",
" ### # # # # # # # ## # ",
" ### # # ##### # ### #### # ",
" ## ## #",
" # # # # # # ",
" # # # # # # ",
" # # ### ### ##### ### ##### # ",
" # # # # # ### ### # ",
" # # # # # # ### # ",
" ## ## # ### # ",
" ### # ##### ##### # ####### ##### #######",
" # # ## # ## ## # # # ## # ",
"# # # # # # ## # # # # ",
"# # # # ##### ##### ####### ##### ###### # ",
"# # # # # # # ## # # ",
" # # # # # # # # ## # # ",
" ### ##### ####### ##### # ##### ##### # ",
" ##### ##### # ### # # ##### ",
"# ## # # # ### # # # #",
"# ## # # # ##### # #",
" ##### ###### ### # # ## ",
"# # # # ### # ##### # # ",
"# ## # # # # # # ",
" ##### ##### # # # # # ",
" ##### # ###### ##### ###### ############## ##### ",
"# # # # # ## ## ## # # #",
"# ### # # # # ## # ## # # ",
"# # # ## ####### # # ###### ##### # ####",
"# #### ######## ## # ## # # #",
"# ## ## ## ## ## # # #",
" ##### # ####### ##### ###### ######## ##### ",
"# # ### ## # # # ## ########",
"# # # ## # # ## #### ## #",
"# # # ## # # # # # ## # ## #",
"####### # #### # # # ## # ## #",
"# # # # ## # # # ## # ## #",
"# # # # ## # # # ## ### #",
"# # ### ##### # # ######## ## ########",
"###### ##### ###### ##### ######## ## ## #",
"# ## ## ## # # # ## ## # #",
"# ## ## ## # # ## ## # #",
"###### # ####### ##### # # ## ## # #",
"# # # ## # # # # # # # # # #",
"# # # # # # # # # # # # # # #",
"# #### ## # ##### # ##### # ## ## ",
"# ## ######## ##### # ##### # ",
" # # # # # # # # # # ",
" # # # # # # # # # # ",
" # # # # # # ",
" # # # # # # # ",
" # # # # # # # ",
"# # # ####### ##### # ##### #######",
" ### ",
" ### ## ##### #### ##### ###### ###### #### ",
" # # # # # # # # # # # # #",
" # # # ##### # # # ##### ##### # ",
" ###### # # # # # # # # ###",
" # # # # # # # # # # # #",
" # # ##### #### ##### ###### # #### ",
" ",
" # # # # # # # # # # # #### ",
" # # # # # # # ## ## ## # # #",
" ###### # # #### # # ## # # # # # #",
" # # # # # # # # # # # # # #",
" # # # # # # # # # # # ## # #",
" # # # #### # # ###### # # # # #### ",
" ",
" ##### #### ##### #### ##### # # # # # #",
" # # # # # # # # # # # # # #",
" # # # # # # #### # # # # # # #",
" ##### # # # ##### # # # # # # # ## #",
" # # # # # # # # # # # # ## ##",
" # ### # # # #### # #### ## # #",
" ### # ### ## # # # #",
" # # # # ###### # # # # # # # # # ",
" # # # # # # # # ## # # # #",
" ## # # ## ## # # # ",
" ## # # # # # # # # #",
" # # # # # # # # # # ",
" # # # ###### ### # ### # # # #"};
#define delay(p) sleep(1)
#include <stdio.h>
#include <unistd.h>
char led[25];
void show()
{
printf("\e[A\e[A\e[A\e[A\e[A\e[A\e[A");
for (int i = 18; i <= 24; ++i)
printf("%c\e[B\e[D", led[i] ? '#' : ' ');
printf("\e[C");
fflush(stdout);
}
int main(int argc, char *argv[])
{
if (argc < 2) return 1;
char c = *argv[1];
enum { Black, Red };
if (c < ' ' || 0x7F < c) return 1;
int i = c-' ';
puts("\n\n\n\n\n\n");
for (int col = 0; col < 7; ++col)
{
for (int row = 0; row < 7; ++row)
led[18+row] = glyphs[i/8*7+row][i%8*7+col] == ' ' ? Black : Red;
show();
delay(Pause);
}
puts("");
}
推荐阅读
- c++ - 当我的代码给出正确的输出时,为什么会出现分段错误?
- php - 缺少存储过程的第一个结果
- c# - 如何使用 listview-xamarin 设置 x 按钮以删除每一行数据库上的记录
- rust - 用于强类型对象的通用 serde_json 反序列化函数
- c# - 如何将数据从一个用户控件传递到另一个用户控件
- wso2 - 如何将数据流从 API Manager 发送到 Stream Integrator?
- javascript - 我如何使用“。”的参数 操作员?
- python - 如何在 python 中创建 bin 编号生成器?
- html5-audio - 音频标签适用于 Android,但不适用于 IOS
- python - 当我尝试添加帖子然后添加成功但它没有显示在仪表板中它只显示主页我为在仪表板中显示帖子所做的事情