Arduino编程风格(译)

原文:Arduino style guide
地址:https://www.arduino.cc/en/Reference/StyleGuide
译者注:本文将告诉你如何写一个Arduino示例,文中介绍了Arduino规范化编程的一些准则,这些准则在其他语言编程中同样适用,因此具有一定的参考价值!

这是一个用于编写规范的Arduino示例的指南,适合初学者和同样也适合高级用户使用。当然您大可不必按照这种方式编程,但是如果您想要您的代码可以让不同水平的都可以清晰的读懂,那么它可以帮到您。这不是一套强硬的准则,仅仅只是一些参考。有些参考甚至可能彼此冲突。利用您的判断力在何时这些指导原则最通顺上,如果您不确定,咨询那些将要通过您写的例子学习的人,这会让您有更好的理解。另外您有可能对Arduino API风格指南感兴趣。

写一个教程

(大部分内容是从多年来各家的编辑那里引用来的)

  • 请用主动语态写

  • 语言写得清楚直白,就像遵循你的指令的人和你在一个房间一样。

  • 在给一些指令时,最好用第二人称,以便读者明白她将是执行者。

  • 请使用短小,简洁的陈述句或命令而不是复合句。这可以让读者更容易一次消化一个指令。

  • 请给出明确的指示就像:
    “下一步,你将要读取传感器”
    “创建一个名为thisPin的变量”
    避免没有意义的短语。不要告诉读者“您要设置引脚”这样的指示,只需要告诉她“设置引脚”

  • 请使用图片和原理图,而不是仅仅只有原理图。 许多电子爱好者不读原理图。

  • 检查你的假设。读者是否理解您在教程中使用的所有概念? 如果没有,解释或链接到另一个教程。

  • 从概念上解释事物,这样读者对他将要做的就有一个大的了解。 然后安排如何一步一步的执行指令。

  • 每当您初次使用一个技术术语时,请先定义它。请人帮忙您检查您是否定义了所有的新术语,您有可能会漏掉其中一两个。

  • 请与您使用过的术语保持一致。如果您通过新名称引用元件或概念,请将其与其他名称的关系明确显示。除非您明确告诉读者两个术语是等价的,否则不要使用两个可以互相交换的术语。

  • 在没有拼写出它们的全称前不要使用缩写词或缩写

  • 让您的例子更加简洁有针对性。除非是关于组合概念的教程,否则不要组合概念或功能。

写示例代码

  • 稳定比效率更重要。
  • Arduino的主要用户都是一些不关注代码的初学者,他们关心的重点是项目的完成。
  • 别人比你了解代码少是很正常的事。不要认为他们需要理解一些学术概念。他们不需要,他们不理解代码不是因为他们愚蠢。你的代码应该可以自我解释,或者使用注释来做同样的事情。如果需要一个复杂的概念,如寄存器、中断或指针,要么解释它,要么跳过它。
  • 在面临技术上简单和高效选择时,请选择前者。
  • 除非介绍的概念很有用,否则尽量少介绍并且在每个例子中减少新概念的数量。例如,在刚开始,您可以解释没有int以外的变量类型的简单函数,也可以用常数来定义引脚号。另一方面,在一个中间的例子中,您可能希望引入周边概念,因为它们变得有用。 像使用const ints来定义引脚号的概念,当你不需要超过0 - 255时,在int中选择字节等等是有用的,但这不是入门的核心。 所以请谨慎使用它们,并在新教程中解释它们。
  • 请将setup()(声明函数)和loop()(循环函数)放在程序开头。它们帮助初学者了解程序的概况,因为所有其他功能都是从这两个方法调用的。

注释你的代码

  • 注释所有的变量和常量声明,并且声明变量的作用。
  • 注释所有的代码块。如果可能的话,在代码块前注释,这样读者就能了解代码块的作用。
  • 注释所有的循环。
  • 使用详细的if语句。即为了可以将代码更加直观的呈现给读者,请使用程序块格式进行所有操作。避免使用下面这种格式:
if (somethingsIsTrue) doSomething

用下面这种格式代替:

if (somethingsIsTrue==True){
           doSomething;
      }
  • 避免使用指针
  • 避免使用#define

变量

  • 避免使用单字母变量名。使它们具有描述性。
  • 避免使用像valpin这样的变量名。让它们更加具有描述性,像buttonState或者switchPin
  • 如果要定义引脚名称和其他不会改变的数值,请使用const ints。他们与#defines相比不是那么凌乱,但仍然给你一种讲解变量和常数之间的区别的方法。
  • 使用接线/处理类型的变量类型,例如 boolean,char,byte,int,unsigned int,long,unsigned long,float,double,string,array,void,如果可能的话,尽量不用uint8_t等。前者在文档中有说明,更简洁的名称。
  • 避免让用户混淆的编号方案,像:
pin1 = 2
pin2 = 3
etc.
  • 如果你需要重新编号引脚,考虑使用数组,如下所示:
int myPins[] = { 2, 7, 6, 5, 4, 3 };
  • 这允许您使用数组元素来引用新的引脚号,如下所示:
digitalWrite(myPins[1], HIGH);  //打开引脚7
  • 它还允许您按照所需的顺序打开或关闭所有引脚,如下所示:
for (int thisPin = 0; thisPin < 6; thisPin++) {
   digitalWrite(myPins[thisPin], HIGH);
   delay(500);
   digitalWrite(myPins[thisPin], LOW);
   delay(500);
}

刚开始就解释代码

这是一个很好的标题块:

/*
  程序标题
  从一个外行人的视角来解释程序的功能。请参阅各种引脚附件。
  电路:
  * 列出每个输入组件
  * 列出每个输出组件
  创建年月日
  创建者名字
  修改年月日
  修改者名字
  http://url/of/online/tutorial.cc
*/

电路

  • 对于数字输入开关,默认是在开关上使用下拉电阻,而不是上拉。 这样,开关的交互逻辑对非工程师是有意义的。
  • 保持您的电路简单。例如,旁路电容器是方便的,但是大多数简单的输入可以在没有它们的情况下正常工作。 如果一个组件是偶然的,请稍后解释。
  • 更正,建议和新的文件应该发布到论坛。

Arduino参考文本以Creative Commons Attribution-ShareAlike 3.0许可证授权。指南中的代码示例将公布到公共区域。

个人学习翻译作品,感谢好友@Morning在翻译过程中提供的指导
继承Arduino开源精神,本文同样以Creative Commons Attribution-ShareAlike 3.0许可证授权,您可以自由分享,修改,或者引用,引用时希望您尊重个人努力成果,注明来源。个人水平有限,不足之处还望多多指正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • 夜深人静, 朦胧中, 由远而近的 轰鸣声。 被惊醒, 伸出左手 半举着。 一只蚊子 附在我的右脸, 啪! 左手打了...
    新言漾语阅读 248评论 0 0
  • 引言 我是一个1年android开发程序员,工作中遇到的问题不会就百度,再不会就问人,github上开源项目没得,...
    过期的薯条阅读 1,331评论 0 1
  • 生活的意义在于奉献,在于对他人产生兴趣和相互合作。只有那些对他人产生兴趣而又决心要对社会有所贡献的人,才能使自己鼓...
    江南礼仪形象阅读 244评论 0 0