我如何将这个为单个 LED 制作的代码转换为我在 arduino 上的 LED 灯条?

问题描述

LED that I am using with fastLED librairy

所以我的项目是制作一个带有 rgb 条的 LED 风扇,我发现了一些非常相似的东西,但我在一周内尝试使用 fastLED 库更改代码以进行转换,但我请求帮助。[the类似的代码,但与 POV led arduino project 中的 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(我想在我的 prototype 的一侧写一条消息)闪烁以通过视网膜持久性写一条消息。 我想要做的是当我收到串行消息时(我制作了一个蓝牙应用程序,可以向我发送一个单词)我希望它在他旋转时显示在我的原型上。因此,如果我想在原型的一侧显示一封信,我必须将其写成 that 我已经手动制作了它,但它太长了:

 // 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("");
}