极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20127|回复: 16

请大神们指出这个程序不对的地方,谢谢

[复制链接]
发表于 2014-7-19 19:51:30 | 显示全部楼层 |阅读模式
byte ledpin[]={4,5,6,7,8,9,10};
int ledDelay(65);
int direction=1;
int currentLED=0;
unsigned long changetime;
void setup(){
   for (int x=0;x<7;x++){
    pinMode(ledpin[x],OUTPUT); }
    changetime=millis();
}

void loop(){
  if((millis()-changetime)>ledDelay){
  changeLED();
  changetime=millis();
  }
}

void changeLED(){
for(int x=0;x<7;x++){
digitalWrite(ledpin[x],LOW);
}
digitalWrite(ledpin[currentLED],HIGH);
currentLED+=direction;
if(currentLED==6){direction==-1;}
  if(currentLED==0){direction==1;}
}

看不到跑马灯的现象,是我的硬件问题,还是程序问题?
回复

使用道具 举报

发表于 2014-7-19 20:20:38 | 显示全部楼层
int ledDelay(65);   这个是什么意思?
  if((millis()-changetime)>ledDelay) 这个又是什么意思?
回复 支持 反对

使用道具 举报

发表于 2014-7-19 21:36:40 | 显示全部楼层
程序应该能实现跑马灯的效果吧?不过我也看不到int ledDelay(65) 是什么意思呢。。。。。
或者这样写,如何?
for(x=0;x<7;x++){
if(x==0){digitalWrite(ledpin[x],HIGH);continue;}
digitalWrite(ledpin[x-1],LOW);
digitalWrite(ledpin[x],HIGH);
delay(500);
}
for(x=6;x>=0;x--){
if(x==0){digitalWrite(ledpin[x],LOW);continue;}
digitalWrite(ledpin[x],LOW);
digitalWrite(ledpin[x-1],HIGH);
delay(500);
}

这样如何?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-20 15:45:27 | 显示全部楼层
i7456 发表于 2014-7-19 20:20
int ledDelay(65);   这个是什么意思?
  if((millis()-changetime)>ledDelay) 这个又是什么意思?

我只是想定义跑马灯每盏灯的变化之间的延时,如果不行的话麻烦你帮我改一下,先谢谢了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-20 15:51:52 | 显示全部楼层
kenan13 发表于 2014-7-19 21:36
程序应该能实现跑马灯的效果吧?不过我也看不到int ledDelay(65) 是什么意思呢。。。。。
或者这样写,如何 ...

真的可以啊,谢谢了。不过for(x=0;x<7;x++){
x的前面要加int
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-20 15:58:02 | 显示全部楼层
i7456 发表于 2014-7-19 20:20
int ledDelay(65);   这个是什么意思?
  if((millis()-changetime)>ledDelay) 这个又是什么意思?

我刚刚说错了,ledDelay()应该是每次轮回变化之间的延时,我试了一下,应该是可以用的
回复 支持 反对

使用道具 举报

发表于 2014-7-20 16:07:20 | 显示全部楼层
Stray_Cat 发表于 2014-7-20 15:58
我刚刚说错了,ledDelay()应该是每次轮回变化之间的延时,我试了一下,应该是可以用的

int ledDelay(65);
没见过这种用法,你是在哪里学到的?
回复 支持 反对

使用道具 举报

发表于 2014-7-20 16:32:20 | 显示全部楼层
digitalWrite 第一个参数是引脚吧。

byte ledpin[]={4,5,6,7,8,9,10}; 引脚用byte定义对吗? byte只有一个字节,int是2个字节,这里应该改成int
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-20 18:11:01 | 显示全部楼层
i7456 发表于 2014-7-20 16:07
int ledDelay(65);
没见过这种用法,你是在哪里学到的?

《arduino从基础到实践》
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-20 18:44:35 | 显示全部楼层
转角 发表于 2014-7-20 16:32
digitalWrite 第一个参数是引脚吧。

byte ledpin[]={4,5,6,7,8,9,10}; 引脚用byte定义对吗? byte只有一 ...

可是改成int好像也没有跑马灯的现象啊。。先谢谢了
回复 支持 反对

使用道具 举报

发表于 2014-7-20 21:13:58 | 显示全部楼层
Stray_Cat 发表于 2014-7-20 18:11
《arduino从基础到实践》

可以截图看一下吗?
回复 支持 反对

使用道具 举报

发表于 2014-7-20 23:16:09 | 显示全部楼层
Stray_Cat 发表于 2014-7-20 15:51
真的可以啊,谢谢了。不过for(x=0;x

可以就行啦,我随手写的,忘了加上去了。。。。。。。。囧
回复 支持 反对

使用道具 举报

发表于 2014-7-21 09:39:57 | 显示全部楼层
int ledDelay(65);   =>  int ledDelay=650;   
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-21 12:13:52 | 显示全部楼层
i7456 发表于 2014-7-20 21:13
可以截图看一下吗?

...图是截了,但是不知道怎样发上来。你信我吧,书上真的就这么写的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-21 19:59:25 | 显示全部楼层
我把int ledDelay()的值改大了一点,但是只能在刚输入时看到一次跑马灯现象,然后led灯又亮得杂乱无章了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-18 06:45 , Processed in 0.063024 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表