前言
由於采用的是在VScode平台的PlatformIO來開發ESP32,所以在文件的頭文件中,我們需要添加Arduino.h文件來配置環境。PlatformIO基本集成了目前市面上的常見單片機與物聯網模塊的開發插件,由於作者的原生ardunio平台安裝了ESP8266開發插件,無法再適配ESP32,所以轉戰PIO,並且由於VScode良好的交互性和代碼的追溯性,我推薦大家可以以VScode為主要的開發平台。
本節將先熟悉一下Arduino.h文件的內容,里面包含了很多小功能,我們可以直接調用無需重復造輪子。
內容
常數系列:
#define PI 3.1415926535897932384626433832795 #define HALF_PI 1.5707963267948966192313216916398 #define TWO_PI 6.283185307179586476925286766559 #define DEG_TO_RAD 0.017453292519943295769236907684886 #define RAD_TO_DEG 57.295779513082320876798154814105 #define EULER 2.718281828459045235360287471352
小工具系列:
#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) // 用於設置上下限 #define radians(deg) ((deg)*DEG_TO_RAD) // 角度與弧長轉換 #define degrees(rad) ((rad)*RAD_TO_DEG) #define sq(x) ((x)*(x))
long random(long, long); // 范圍隨機數
void randomSeed(unsigned long); // 隨機種子數
long map(long, long, long, long, long); // 數值映射 long map(long x, long in_min, long in_max, long out_min, long out_max)
#define _min(a,b) ((a)<(b)?(a):(b)) // 大小比較
#define _max(a,b) ((a)>(b)?(a):(b))
位操作:
#define lowByte(w) ((uint8_t) ((w) & 0xff)) #define highByte(w) ((uint8_t) ((w) >> 8)) #define bitRead(value, bit) (((value) >> (bit)) & 0x01) #define bitSet(value, bit) ((value) |= (1UL << (bit))) #define bitClear(value, bit) ((value) &= ~(1UL << (bit))) #define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
#define bit(b) (1UL << (b))
#define _BV(b) (1UL << (b))
空指令:
// avr-libc defines _NOP() since 1.6.2 #ifndef _NOP #define _NOP() do { __asm__ volatile ("nop"); } while (0) #endif
重置:
void init(void); void initVariant(void); void initArduino(void);
不知道是啥:
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout); unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout); uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
