有关为英特尔® Galileo 主板编写自定义功能的教程 2
在此之前,我们一直在设置和循环功能内部编写代码。这完美无缺。但是,如果您的计划有很多复杂的逻辑,该怎么办?您如何组织代码?
编程需要一门艺术,它首先需要了解将代码放入何处。
编码有时会变得杂乱。如果您曾经读过任何开源代码,您可能会运行到以下代码:
- 缺乏评论:包括评论会帮助您并且阅读的人了解发生了什么
- 逻辑并非有组织:将您的代码组织到逻辑区块有助于调试和代码维护
- 名称具有误导性:可变和函数名称应正确描述它们打算做什么
- 精明而直通:应该能轻松读取代码;尝试不要在你想要完成的东西中采用加密方法
程序员认为可以使用任何语言编写和组织程序。如果您是唯一一个正在读取代码的人,这很好。但是,如果您正在与一个团队合作,必须提供一些每个人都遵循的准则。有一天,您所编写的代码需要更新并由其他人阅读。编写有组织代码和练习通用编码实践将帮助您和您的工程师编写精美的代码。
有关如何改进编码风格的提示,请访问 Google 的 C++ 编码风格指南。
它们有两种功能:
- 执行指令并返回无值 (type void)
- 执行指令并退回一个值(类型包括 int、浮动、双倍)
请参阅 Arduino 参考页面 上的"数据类型"部分中的更多信息。
功能类型
Type void:
void sayHello(){
Serial.println("Hello!");
}
Type integer:
int theAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything(){
return 42;
}
We can assign the value of functions that return something to variables:
int myAnswer = theAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything();
假设我们想使功能更有用。我们可以使用函 数参数 来传递对功能结果产生影响的独特数据。例如:
int add(int x, int y){
return x + y;
}
我们称之为此函数,通过以下自定义参数:
int numbersAdded = add(2, 2); // The variable numbersAdded is equal to 4
您可通过多种方式写入一个函数。这都取决于你想要做什么。编写自定义函数的一个很好的地方是定义函数签名。
功能签名
在编写函数代码之前,最好确定您正在尝试实现什么。
- 它会退回一个值吗?
- 将向它传递多少个参数(如果有的话)?
- 该功能的目的是什么?
让我们假设您正在编写一个将自定义消息输出到串行显示器的程序。此消息会评论天气(例如,可能基于温度传感器)。
您还不知道该函数内的代码到底是怎样的,但您知道您希望它做什么:
- 采用两个自定义参数将(或加入)整合在一起
- 进行一个将附录到消息的"双倍"类型
- 不返回值
- 串行显示器输出会打印出"室外 30 度"。
我们的签名可能类似:
void myMessage (String msg1, String msg2, double deg){}
调用该函数看上去类似:
这里的温度是一个基于温度传感器读数的预定义变量。
myMessage("是",学历,"外部");
挑战
如何编写代码以完成此函数的任务?
- 介绍
- 高级输入
- 脉冲宽度调制 (PWM)
- 编写自定义功能
- 使用自定义函数
- 包装