Steins;Lab

  • 项目
  • 折腾
  • 笔记
  • 图册
  • 杂谈
  • 文章索引 - 博主自荐博文
  • 关于/留言
Steins;Lab
某团的自留研究所
  1. 首页
  2. 学习笔记
  3. 正文

【学习笔记】读《Arduino编程技巧-75个智能硬件程序设计技巧》手记

2016年9月10日 6695点热度 0人点赞 3条评论

读《Arduino编程技巧-75个智能硬件程序设计技巧》手记,写出例程演示,备用

51eqk2ydkgl-_sx409_bo1204203200_

这本书很接地气,作者的解释方法很通俗,给出自己搞项目的一些例程,给出许多建议。

 

Table of Contents

  • 常用指令
  • 内部上拉电阻
  • 中断服务
    • 建议
    • volatile变量
    • 定时器中断
    • 例程
  • 休眠
    • Narcoleptic库
  • 外部中断唤醒综合例程

 

 

常用指令

i = pulseln(8,HIGH); //返回以微妙为单位出现在引脚8的下一个高电平的时间

tone(8,440,1000); //让引脚8以440Hz频率振荡1000ms

noTone(); //关闭任何正在进行的tone进程



delay(1000); 

delayMicroseconds(100000); //延迟为100000us。最小延迟3us,最大延迟16ms

内部上拉电阻

启用内部的上拉电阻,约40kΩ。

pinMode(2,INPUT_PULLUP);

 

中断服务

建议

终端服务作者给出以下建议:

  • ISR中断程序一定简短,运行快
  • ISR和程序其他部分之间传递数据要使用volatile变量
  • 不在ISR中使用delay();但是delayMricroseconds()
  • 串行通信读取写入不可靠
  • millis返回值不会改变

 

为什么令终端服务短而快?因为在一个ISR运行时出现另外的中断,ISR本身不会被打断,相反,中断信号会被忽略,直到ISR完成

为什么不使用delay?因为delay使用了定时器和中断。而delayMircoseconds不会使用中断

 

volatile变量

若要在isr中改变全局变量,如bool型的一个flag,需要用volatile变量

volatile boolean flashFast = false;

定时器中断

库 TimerOne

#include <TimerOne.h>

......

void setup()
{
    Timer1.initialize(1000);
    TImer.attachInterrupt(toggleOutput);

    Timer1.pwm(9,512);// P9
}

例程

例程见下方省电例程


休眠

Narcoleptic库

代替delay();

#include <Narcoleptic.h>

Narcoleptic.delay(1000);

 

 

外部中断唤醒综合例程

//sketch_05_06

#include<avr/sleep.h>

const int ledPin = 13;
cost int inputPin = 2;
volatile boolean flag;

void setup()
{
    pinMode(ledPin,OUTPUT);
    pinMode(inputPin,INPUT_PULLUP);
    GoToSleep();
}


void loop()
{
    if(flag)
    {
         doSomething();
         flag = false;
         goToSleep();
    }
}

void setFlag()
{
    flag = true ;
}

void goToSleep()
{
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    sleep_enable();
    attachInterrupt(0,setFlag,LOW);
    sleep_mode();
    //在此停顿!(误)
    sleep_disable();
    detachInterrupt(0);
}



void doSomething()
{
     
    .....
    //doSomething
}

中断很简短,改变flag值,即完成中断

返回后在loop中判断flag值,完成任务dosomething

重新休眠

相关

标签: Arduino 例程
最后更新:2017年1月11日

SPtuan

SPtuan 是一名普通的工程师,最大的愿望是度过平静的时光。 当前从事网络/CDN/对象存储研发。

点赞
< 上一篇
下一篇 >
0 0 votes
文章评分
Subscribe
Login
提醒
guest

guest

3 评论
最新
最旧 得票最多
Inline Feedbacks
View all comments
穹妹的欧尼酱
穹妹的欧尼酱
8 年 之前

玩单片机和树莓派的都是大神

0
回复
SPtuan
SPtuan
作者
Reply to  穹妹的欧尼酱
8 年 之前

@穹妹的欧尼酱 不不不不,这玩意是因为前一段时间帮人做东西去学的(..)_ 

0
回复
你冰雪可爱的宇哥
你冰雪可爱的宇哥
8 年 之前

狠yoooooooooooo

0
回复

SPtuan

SPtuan 是一名普通的工程师,最大的愿望是度过平静的时光。
当前从事网络/CDN/对象存储研发。

  • 常用指令
  • 内部上拉电阻
  • 中断服务
    • 建议
    • volatile变量
    • 定时器中断
    • 例程
  • 休眠
    • Narcoleptic库
  • 外部中断唤醒综合例程
分类
  • Uncategorized
  • 图册
  • 学习笔记
  • 库
  • 折腾
  • 杂谈
  • 瞎**扯
  • 碎碎念
  • 项目跟踪
最近评论
SPtuan 发布于 2 个月前(03月22日) 书签: 关于 disk-io 的经验, 异步/同步 io 系统设计的经验 https://you...
SPtuan 发布于 2 个月前(03月21日) 如果公司不是对外提供这些服务的,这种岗位都是 infra 部门,平均年龄确实会大一些。尤其构建和维护...
HUA 发布于 2 个月前(03月19日) 想请问博主对于国内CDN行业,以及CDN调度、DNS托管类服务相关岗位的看法,以及是否还推荐校招新人...
SPtuan 发布于 3 个月前(02月03日) 2025 注: 长辈对于只身去深圳的担忧,更多地来自于 80s/90s 治安情况。近几年了解了严打...
SPtuan 发布于 4 个月前(01月16日) 哈哈,100就100吧,新年快乐!
热门主题 & 页面
  • 全球互联网拓扑探索 (1) : 互联网是如何工作的
  • PYNQ上手体验:以目标检测应用为例
  • 使用 WSL2 + X11 转发 - 在 Windows10 中打造 GNU/Linux 学习生产环境
  • 动手做!基于nRF24L01P的Arduino无线通信
  • [实验]VPS搭建ss服务中转实现纯ipv6访问网络-校园网免流量
归档
  • 2025 年 5 月
  • 2025 年 3 月
  • 2024 年 12 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 5 月
  • 2024 年 3 月
  • 2024 年 2 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 2023 年 9 月
  • 2023 年 8 月
  • 2023 年 4 月
  • 2023 年 1 月
  • 2022 年 12 月
  • 2022 年 10 月
  • 2022 年 9 月
  • 2022 年 7 月
  • 2022 年 6 月
  • 2022 年 2 月
  • 2021 年 12 月
  • 2021 年 11 月
  • 2021 年 2 月
  • 2021 年 1 月
  • 2020 年 9 月
  • 2020 年 4 月
  • 2020 年 3 月
  • 2020 年 1 月
  • 2019 年 8 月
  • 2019 年 7 月
  • 2019 年 5 月
  • 2019 年 4 月
  • 2019 年 3 月
  • 2019 年 2 月
  • 2018 年 12 月
  • 2018 年 10 月
  • 2018 年 9 月
  • 2018 年 8 月
  • 2018 年 5 月
  • 2018 年 2 月
  • 2018 年 1 月
  • 2017 年 11 月
  • 2017 年 9 月
  • 2017 年 7 月
  • 2017 年 6 月
  • 2017 年 5 月
  • 2017 年 4 月
  • 2017 年 3 月
  • 2017 年 2 月
  • 2017 年 1 月
  • 2016 年 12 月
  • 2016 年 11 月
  • 2016 年 10 月
  • 2016 年 9 月
  • 2016 年 8 月
  • 2016 年 7 月
  • 2016 年 6 月
  • 2016 年 5 月
  • 2016 年 4 月
  • 2016 年 3 月
  • 2016 年 2 月
  • 2016 年 1 月
  • 2015 年 12 月
  • 2015 年 11 月
  • 2015 年 9 月

友情链接:

Blessing Studio hahaschool 绘枫和畅 魔法少女Fandy monsterx Clarke的博客 Luminous’ Home Shintaku's Blog
蓝黑的博客 haruhi.club Yida的博客 Bo2SS 涛叔 TangBao 同和君Hocassian

Steins;Lab 团子神社 zdfmc.net

steinslab.io built with ❤. Thanks for all 2015-2025.

Theme Kratos Made By Seaton Jiang

wpDiscuz