Arduino程序设计基础(第2版)》代码勘误-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5231|回复: 4

Arduino程序设计基础(第2版)》代码勘误

[复制链接]
发表于 2015-11-12 23:07 | 显示全部楼层 |阅读模式
本帖最后由 wangbin526 于 2015-11-12 23:34 编辑

    `(*∩_∩*)′
    两天前刚从京东入了第二版,为了做出自家茶园的液体肥发酵管理和喷灌系统、还有组培室的自动温湿度控制,偶个前业余码农也只能开始硬啃触硬件方面的东东了,偶倒是没注意别人提交的漏字错字之类的问题,不过这才看了五十页不到,就有两处代码错误了,都是试验的时候发现不对的,这都第二版了,难道之前的读者都没试验过代码吗?当然也可能是偶初学者自己弄错了,所以专门来发个帖问问,
    PS:书本身写的不错,偶入门很轻松。


首先,P44的流水灯
[mw_shl_code=cpp,true]/*
OpenJumper LED Module
流水灯效果
www.openjumper.com
*/

void setup()
{
  //初始化I/O口
  for(int i=2;i<8;i++)
  pinMode(i,OUTPUT);
}

void loop()
{
  //从引脚2到引脚7,逐个点亮LED,等待1秒再熄灭LED
  for(int i=2;i<7;i++)
  {
    digitalWrite(i,HIGH);
    delay(1000);
    digitalWrite(i,LOW);   
  }
  //从引脚7到引脚2,逐个点亮LED,等待1秒再熄灭LED
  for(int i=7;i>2;i--)
  {
    digitalWrite(i,HIGH);
    delay(1000);
    digitalWrite(i,LOW);   
  }
}[/mw_shl_code]电路图和代码都表明,使用的是引脚2到引脚7,第10行也写着(for(int i=2;i<8;i++))没问题,可第17和第24行又变成了(for(int i=2;i<7;i++))和 for(int i=7;i>2;i--),这样引脚7和引脚2的LED根本不会亮,像第十行那样(i<8)或者干脆写(i<=7)都可以。


上面那个算是笔误,可P50的新的按键控制方式,给的代码压根是不稳定的,用延时delay(500)来控制,只要按下按键不放的时间稍微长一点就会出问题,按的快一点又会不响应。最后居然还在末尾专门强调延时的重要性,真心不能这样误导初学者如此控制按键呐,还不如不给这个案例代码,否则做项目用这个办法控制按键估计就得直接悲剧了,偶贴了份自己写的。
[mw_shl_code=cpp,true]  // 去抖延时
  int buttonDelay = 10;
  // 有上拉电阻,按钮未按下时为HIGH
  int preButtonState = HIGH;
  
void setup() {
  // put your setup code here, to run once:
  pinMode(2,INPUT);
  // 设置上拉电阻
  digitalWrite(2,HIGH);
  pinMode(13,OUTPUT);
  // 将LED默认设置为关
  digitalWrite(13,LOW);
}

// 读取按钮状态(去抖)
bool getButtonState(int pin)
{
  bool state;
  bool preState = digitalRead(pin);
  for(int count=1; count<=buttonDelay; count++)
  {
    delay(1);
    state = digitalRead(pin);
    // 前后两次状态不一致时,重置循环
    if (state != preState)
    {
      count = 1;
      preState = state;     
    }
  }
  return state;
}

void loop() {
  int buttonState = getButtonState(2);
  if(buttonState == LOW)
  {
    if(preButtonState == HIGH)
    {
      digitalWrite(13,!digitalRead(13));
    }
  }
  preButtonState = buttonState;
}[/mw_shl_code]去掉去抖函数也能用,但就是偶尔会在按键按下的瞬间,估计是触点快速反复接触分离导致反应错误,加了去抖以后实验了一阵子貌似没问题了。

偶目前只看到这里,书本身看着很轻松舒服,当然,Arduino方面偶还是小白,希望各位大神多多指导。

发表于 2015-11-14 08:43 | 显示全部楼层
您说的问题都在本书写作之初认真思考过。
首先第一个程序是没问题的,有人发帖也提过这个问题,这个写法只是为了更好看,按你的方式写也行,只是2、7会连续亮两次;
第二程序的存在就是为了讲解一次loop可能会很快,至于去抖的方法,后面的其他例程中应该包含的有~
 楼主| 发表于 2015-11-15 14:57 | 显示全部楼层
coloz 发表于 2015-11-14 08:43
您说的问题都在本书写作之初认真思考过。
首先第一个程序是没问题的,有人发帖也提过这个问题,这个写法只 ...

抱歉,仔细想想的确是这样。
第一个程序偶自己试的时候忘记打开7端口之后自己改回来了,所以认为7号不亮,第二个的话,的确,作为从新手开始的书,才50页也正常。
发表于 2016-6-1 21:18 来自手机 | 显示全部楼层
楼主好,我是个初学者,学到下啦拉电阻这块发现根本试验不通,测试有几天了,能留个qq么,想跟您请教一下。非常感谢!
发表于 2016-6-14 15:34 来自手机 | 显示全部楼层
coloz 发表于 2015-11-14 08:43
您说的问题都在本书写作之初认真思考过。
首先第一个程序是没问题的,有人发帖也提过这个问题,这个写法只 ...

对,我当时也注意到了,代码对的没错,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:47 , Processed in 0.111965 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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