第一次尝试流水灯失败了希望各位先生提出建议

尝试用数组做个流水灯效果当时灯不动

  1. 灯不进行移动
    2代码没有显示错误
    3用的C语言

    img

img

img

代码我没看,但是你是否把这些代码烧录到了单片机里面,还是说你只编程,没有烧录进去(就是只写了代码,没有把代码放到单片机里面)

【以下回答由 GPT 生成】

在你的代码中,问题出在你在每个循环迭代中,使用lights[currentIndex] = 0;关闭当前的灯的操作太快,导致灯没有亮起来的效果。你可以在关闭当前灯之后,添加一个延时的函数,让灯亮起一段时间后再关闭,以实现流水灯的效果。延时函数的实现与操作系统相关,我这里给出一个简单的跨平台的延时函数的例子(使用c++):

#include <chrono>
#include <thread>

// 延时函数
void delay(int milliseconds) {
    std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
}

你可以在关闭当前灯之后,添加延时函数来让灯亮起一段时间后再关闭。修改后的代码如下:

#include <stdio.h>
#include <chrono>
#include <thread>

// 延时函数
void delay(int milliseconds) {
    std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
}

int main() {
    int lights[] = {1, 0, 0, 0, 0}; // 启动第一个灯,其他灯都关闭
    int currentIndex = 0; // 当前亮灯的索引

    while (1) {
        // 点亮当前的灯
        lights[currentIndex] = 1;

        // 显示灯的状态
        for (int i = 0; i < sizeof(lights) / sizeof(lights[i]); i++) {
            printf("%d ", lights[i]);
        }
        printf("\n");

        // 关闭当前的灯
        lights[currentIndex] = 0;

        // 移动到下一个灯
        currentIndex = (currentIndex + 1) % (sizeof(lights) / sizeof(lights[0]));

        // 延时一段时间
        delay(500); // 延时500毫秒(0.5秒)
    }

    return 0;
}

这样,每次点亮一个灯后会延时一段时间,然后再关闭当前的灯,再移动到下一个灯,实现流水灯的效果。你可以根据需要修改延时时间来调整流水灯的速度。希望这能解决你的问题,祝你成功!



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^