极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12273|回复: 8

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

[复制链接]
发表于 2014-11-6 00:14:05 | 显示全部楼层 |阅读模式
本帖最后由 血阳 于 2015-4-22 00:19 编辑

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

我先给个简单代码,然后通过这个简单代码来问一些问题。
void setup()
{
  pinMode(5,OUTPUT);
  Serial.begin(9800);
}
int i;
void loop()
{
  i=Serial.read();
&#160;&#160;if(i<0) i=0;
&#160;&#160;Serial.println(i);
&#160;&#160;analogWrite(5,i);
&#160;&#160;delay(2000);

}


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


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



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


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


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

使用道具 举报

发表于 2014-11-6 08:03:05 | 显示全部楼层
1.Serial.begin(9800); 应该是 Serial.begin(9600);  主要是初始化串口参数,如果不初始化,当然工作不了‘

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

3.参考2

4.现在应该已经够快了,你能察觉出来变化很慢?
回复 支持 反对

使用道具 举报

发表于 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);       //修改为  
}
回复 支持 反对

使用道具 举报

发表于 2014-11-6 09:42:46 | 显示全部楼层
zoologist 发表于 2014-11-6 08:03
1.Serial.begin(9800); 应该是 Serial.begin(9600);  主要是初始化串口参数,如果不初始化,当然工作不了‘ ...

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

使用道具 举报

发表于 2014-11-7 14:55:27 | 显示全部楼层
i7456 发表于 2014-11-6 09:40
int i;

void setup()

i为什么要除以4??
回复 支持 反对

使用道具 举报

发表于 2014-11-7 17:30:54 | 显示全部楼层
无名小子 发表于 2014-11-7 14:55
i为什么要除以4??

笔误,不需要除以4
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-7 17:31:05 | 显示全部楼层
zoologist 发表于 2014-11-6 08:03
1.Serial.begin(9800); 应该是 Serial.begin(9600);  主要是初始化串口参数,如果不初始化,当然工作不了‘ ...

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

使用道具 举报

 楼主| 发表于 2014-11-7 17:32:21 | 显示全部楼层
-Echo 发表于 2014-11-6 09:42
应该是他延时了个两秒,而他没意识到,以为是反应慢

{:3_41:}o(╯□╰)o我看看是不是这个样子的~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-7 17:35:24 | 显示全部楼层
无名小子 发表于 2014-11-7 14:55
i为什么要除以4??

因为模拟端口接收数据最多到255,[占空比:0(完全关闭)]到255(完全打开)之间而i可以达到1024,所以得除以4,才能按照相应的规则来让灯亮暗,否则的话,当i超过255了以后,灯的亮度在后面的话会有其他变化的,你可以自己试试。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 17:30 , Processed in 0.044837 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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