尝试用数组做个流水灯效果当时灯不动
代码我没看,但是你是否把这些代码烧录到了单片机里面,还是说你只编程,没有烧录进去(就是只写了代码,没有把代码放到单片机里面)
【以下回答由 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;
}
这样,每次点亮一个灯后会延时一段时间,然后再关闭当前的灯,再移动到下一个灯,实现流水灯的效果。你可以根据需要修改延时时间来调整流水灯的速度。希望这能解决你的问题,祝你成功!
【相关推荐】