血阳 发表于 2014-11-6 00:14:05

关于arduino的控制问题。大神哥哥求帮助~~

本帖最后由 血阳 于 2015-4-22 00:19 编辑

我想实现的是,当手动输入一个数字,然后灯会根据这个数字来调整自己的亮度。当不输入的时候,灯一直保持前一时刻的亮度。

我先给个简单代码,然后通过这个简单代码来问一些问题。

void setup()
{
  pinMode(5,OUTPUT);
  Serial.begin(9800);
}
int i;
void loop()
{
  i=Serial.read();
  if(i<0) i=0;
  Serial.println(i);
  analogWrite(5,i);
  delay(2000);

}



问题1:关于语句:Serial.begin(9800);
    这个我知道是设置波特率的,但是我想问问,波特率有什么作用,为什么当我把这一句删掉之后,实验就不能够工作了?


问题2:关于语句:i=Serial.read();
   当i没有赋初值的时候,这个语句可以让i等于多少?



问题3:要如何实现功能,当我停止赋值的时候,灯就保持前一个状态的亮度,而不是回到i=Serial.read()所得的值的亮度?


问题4:这个程序从“输入数据→灯做出反应”的时间很慢,有没有快一点的解决方案?


求大神解答啊T T.不胜感激~~{:soso_e109:} {:soso_e154:}

zoologist 发表于 2014-11-6 08:03:05

1.Serial.begin(9800); 应该是 Serial.begin(9600);主要是初始化串口参数,如果不初始化,当然工作不了‘

2.i=Serial.read();   你好像缺了一句判断当前串口是否有数据的语句 参考 http://wiki.geek-workshop.com/doku.php?id=arduino:arduino_language_reference:serial_available

3.参考2

4.现在应该已经够快了,你能察觉出来变化很慢?

i7456 发表于 2014-11-6 09:40:10

本帖最后由 i7456 于 2014-11-7 17:29 编辑

int i;

void setup()
{
pinMode(5,OUTPUT);
Serial.begin(9600);
}

void loop()
{
if(Serial.available())
        {
                i=Serial.read();
                Serial.println(i);
        }
//analogWrite(5,i/4);//错误
analogWrite(5, i);       //修改为
}

-Echo 发表于 2014-11-6 09:42:46

zoologist 发表于 2014-11-6 08:03 static/image/common/back.gif
1.Serial.begin(9800); 应该是 Serial.begin(9600);主要是初始化串口参数,如果不初始化,当然工作不了‘ ...

应该是他延时了个两秒,而他没意识到,以为是反应慢

无名小子 发表于 2014-11-7 14:55:27

i7456 发表于 2014-11-6 09:40 static/image/common/back.gif
int i;

void setup()


i为什么要除以4??

i7456 发表于 2014-11-7 17:30:54

无名小子 发表于 2014-11-7 14:55 static/image/common/back.gif
i为什么要除以4??

笔误,不需要除以4

血阳 发表于 2014-11-7 17:31:05

zoologist 发表于 2014-11-6 08:03 static/image/common/back.gif
1.Serial.begin(9800); 应该是 Serial.begin(9600);主要是初始化串口参数,如果不初始化,当然工作不了‘ ...

谢谢您的耐心回答:lol,关于第四点,我在做的时候,改变i的值的时候,灯反应好像有点慢,我再看看,看看是不是我调错哪里了。

血阳 发表于 2014-11-7 17:32:21

-Echo 发表于 2014-11-6 09:42 static/image/common/back.gif
应该是他延时了个两秒,而他没意识到,以为是反应慢

{:3_41:}o(╯□╰)o我看看是不是这个样子的~

血阳 发表于 2014-11-7 17:35:24

无名小子 发表于 2014-11-7 14:55 static/image/common/back.gif
i为什么要除以4??

因为模拟端口接收数据最多到255,[占空比:0(完全关闭)]到255(完全打开)之间而i可以达到1024,所以得除以4,才能按照相应的规则来让灯亮暗,否则的话,当i超过255了以后,灯的亮度在后面的话会有其他变化的,你可以自己试试。
页: [1]
查看完整版本: 关于arduino的控制问题。大神哥哥求帮助~~