basic_Arduino

  1. Arduino基础
    1. 日志打印
    2. 变量
    3. 常量与宏定义
    4. 运算符
    5. 控制结构
    6. 函数

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() {

}

常量与宏定义

需要芯片帮我们存储永远固定不变的值,这时候使用常量或宏定义。

常量:

750ca18e-6bf3-4c88-b2e3-7aac6b06a2f5

宏定义:

a9286234-feef-4cf6-8ac8-9e2de5169bbf

#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都是一个函数,我们也可以定义自己的函数,这样程序结构化才会更清晰,不同函数有不同的作用域。

ee8c3422-9a30-4e6e-9625-ae2edebc845b

#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

×

喜欢就点赞,疼爱就打赏