首页 > 解决方案 > 我如何将这个为单个 LED 制作的代码转换为我在 arduino 上的 LED 灯条?

问题描述

我与 fastLED 库一起使用的 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);

所以从技术上讲它很好用,但是当我发送例如“困难”时,我想用一个函数或类似的东西来做。(我可以看到它是如何工作的,但现在我无法做到)。

请帮我,

如果您想了解更多信息,可以告诉我。

伊万·巴罗佐

标签: carduinoledarduino-c++

解决方案


因此,如果我想在原型的侧面显示一个字母,我必须像我手动制作的那样写它,但它太长了

可以理解的是,您不想手动写下每个单独的字母列序列。这是一个使用字符图像表的示例程序(类似于字符 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("");
}

推荐阅读