Arduino基础
日志打印
#include <Arduino.h>
void setup() {
//初始化串口,波特率位9600
Serial.begin(9600);
//打印“setup”字符到电脑,\n为换行符
Serial.printf("setup\n");
}
void loop() {
}
变量
使用时,根据需要存储的数据范围,选择不同的数据类型。
32位的芯片中:
有符号整数:
char -128 ~ 127
short -32768 ~ 32767
int -2147483648 ~ 2147483647
小数:
float是单精度浮点数,内存占4个字节,有效数字8位,表示范围是 -3.40E+38~3.40E+38。 3.40E+38 = 3.4×10的38次方。
double是双精度浮点数,内存占8个字节,有效数字16位,表示范围是-1.79E+ 308~-1.79E+308。
两者处理速度不同,CPU处理float的速度比处理double快。double的精度高,double消耗内存是float的两倍。
无符号整数:
unsigned char 0 ~ 256
unsigned short 0 ~ 65536
unsigned int 0 ~ 4294967295
无符号整数别名:
typedef unsigned char uint8_t
typedef unsigned short uint16_t
typedef unsigned int uint32_t
根据实际需要装的数据大小、类型进行申请即可,例如:
纸币面额: 1 5 10 20 50 100 可以使用uint8_t
你的账户余额:uint32_t
室外温度: -20.1 ~ 40.5 可以使用float
变量命名要求:
- 建议小写字母+下划线命名 底层C类:device_name、java:类deviceName
- 尽量不使用a b c i j k
- 变量名的第一个字符必须是字母、下划线(_);
变量打印:
printf("%d %f %.3f %s")
例子:
#include <Arduino.h>
uint8_t my_age;
long my_money = 1000000;
float my_height = 1.88;
void setup() {
//初始化串口,波特率位9600
Serial.begin(9600);
//打印“setup”字符到电脑,\n为换行符
my_age = 19;
Serial.printf("setup\n");
Serial.printf("age = %d\n",my_age );
Serial.printf("money = %d\n",my_money );
Serial.printf("height = %f\n",my_height );
}
void loop() {
}
常量与宏定义
需要芯片帮我们存储永远固定不变的值,这时候使用常量或宏定义。
常量:
宏定义:
#include <Arduino.h>
const int OPEN = 1;
const int CLOSE = 0;
const double PI_NUM = 3.1415;
#define LED_PIN 15
#define MAX_HEIGHT 100
#define SUCCESS 0
#define FAIL -1
void setup() {
//初始化串口,波特率位9600
Serial.begin(9600);
//打印“setup”字符到电脑,\n为换行符
Serial.printf("setup\n");
//OPEN = 2;
Serial.printf("OPEN = %d\n",OPEN );
Serial.printf("LED_PIN = %d\n",LED_PIN );
Serial.printf("PI_NUM = %f\n",PI_NUM );
}
void loop() {
}
命名建议:
常量和宏定义建议使用大写字母+下划线命名
常量声明:
const int var; //错误
const int var; //错误
var = 5;
const int var = 5; //正确
运算符
#include <Arduino.h>
uint8_t a = 10;
uint8_t b = 5;
uint8_t c = 0;
void setup() {
//初始化串口,波特率位9600
Serial.begin(9600);
//打印“setup”字符到电脑,\n为换行符
Serial.printf("setup\n");
c = a + b;
Serial.printf("c= %d\n",c);
c = a - b;
Serial.printf("c= %d\n",c);
c = a * b;
Serial.printf("c= %d\n",c);
c = a / b;
Serial.printf("c= %d\n",c);
a ++;
Serial.printf("a= %d\n",a);
a --;
Serial.printf("a= %d\n",a);
}
void loop() {
}
控制结构
让芯片具有逻辑执行能力:
//判断
if(a>b){
}else{
}
//循环
while(a>b){
}
//有限循环
for(uint8_t i = 0;i < 5;i++){
}
等价于:
uint8_t i = 0;
while(i < 5){
//xxx
i ++;
}
#include <Arduino.h>
#define MAX_HEIGHT 100
uint8_t a = 10;
uint8_t b = 5;
uint8_t c = 0;
void setup() {
//初始化串口,波特率位9600
Serial.begin(9600);
//打印“setup”字符到电脑,\n为换行符
Serial.printf("setup\n");
if(a > b){
Serial.printf("a > b\n");
}else{
Serial.printf("a <= b\n");
}
while(a > b){
Serial.printf("a > b\n");
b = 15;
}
for(uint8_t i = 0;i < 5;i++){
Serial.printf("i = %d\n",i);
}
if(a > MAX_HEIGHT){
Serial.printf("a > MAX_HEIGHT\n");
}else{
Serial.printf("a <= MAX_HEIGHT\n");
}
}
void loop() {
}
函数
函数是一组完成某个功能的语句。
setup和loop都是一个函数,我们也可以定义自己的函数,这样程序结构化才会更清晰,不同函数有不同的作用域。
#include <Arduino.h>
uint8_t a = 10;
uint8_t b = 5;
uint8_t maxdata;
void print_msg(){
printf("i am printf msg \n");
return;
}
uint8_t max(uint8_t a,uint8_t b){
if(a > b){
return a;
}else{
return b;
}
}
void func_1(){
uint8_t a = 20;
Serial.printf("func_1 a= %d\n",a);
}
void func_2(){
uint8_t a = 30;
Serial.printf("func_2 a= %d\n",a);
}
void setup() {
//初始化串口,波特率位9600
Serial.begin(9600);
//打印“setup”字符到电脑,\n为换行符
Serial.printf("setup\n");
print_msg();
maxdata = max(a,b);
Serial.printf("maxdata = %d\n",maxdata);
Serial.printf("a= %d\n",a);
func_1();
func_2():
}
void loop() {
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jungle8884@163.com