30 #define PI 3.1415926535897932384626433832795
31 #define HALF_PI 1.5707963267948966192313216916398
32 #define TWO_PI 6.283185307179586476925286766559
33 #define DEG_TO_RAD 0.017453292519943295769236907684886
34 #define RAD_TO_DEG 57.295779513082320876798154814105
35 #define EULER 2.718281828459045235360287471352
41 #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
45 #define radians(deg) ((deg)*DEG_TO_RAD)
49 #define degrees(rad) ((rad)*RAD_TO_DEG)
53 #define sq(x) ((x)*(x))
56 typedef void (*voidFuncPtr)(void);
57 typedef void (*voidFuncPtrParam)(
void*);
61 #define lowByte(w) ((uint8_t) ((w) & 0xff))
62 #define highByte(w) ((uint8_t) ((w) >> 8))
64 #define bitRead(value, bit) (((value) >> (bit)) & 0x01)
65 #define bitSet(value, bit) ((value) |= (1UL << (bit)))
66 #define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
67 #define bitToggle(value, bit) ((value) ^= (1UL << (bit)))
68 #define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
71 #define bit(b) (1UL << (b))
77 typedef uint16_t word;
80 void initVariant(
void);
83 int atexit(
void (*func)()) __attribute__((weak));
85 int main() __attribute__((weak));
87 #ifdef EXTENDED_PIN_MODE
89 typedef uint32_t pin_size_t;
91 typedef uint8_t pin_size_t;
94 void pinMode(pin_size_t pinNumber, PinMode pinMode);
95 void digitalWrite(pin_size_t pinNumber, PinStatus status);
96 PinStatus digitalRead(pin_size_t pinNumber);
97 int analogRead(pin_size_t pinNumber);
98 void analogReference(uint8_t mode);
99 void analogWrite(pin_size_t pinNumber,
int value);
101 unsigned long millis(
void);
102 unsigned long micros(
void);
103 void delay(
unsigned long);
104 void delayMicroseconds(
unsigned int us);
105 unsigned long pulseIn(pin_size_t pin, uint8_t state,
unsigned long timeout);
106 unsigned long pulseInLong(pin_size_t pin, uint8_t state,
unsigned long timeout);
108 void shiftOut(pin_size_t dataPin, pin_size_t clockPin, BitOrder bitOrder, uint8_t val);
109 uint8_t shiftIn(pin_size_t dataPin, pin_size_t clockPin, BitOrder bitOrder);
111 void attachInterrupt(pin_size_t interruptNumber, voidFuncPtr callback, PinStatus mode);
112 void attachInterruptParam(pin_size_t interruptNumber, voidFuncPtrParam callback, PinStatus mode,
void* param);
113 void detachInterrupt(pin_size_t interruptNumber);
123 template<
class T,
class L>
124 auto min(
const T& a,
const L& b) -> decltype((b < a) ? b : a)
126 return (b < a) ? b : a;
129 template<
class T,
class L>
130 auto max(
const T& a,
const L& b) -> decltype((b < a) ? b : a)
132 return (a < b) ? b : a;
137 ({ __typeof__ (a) _a = (a); \
138 __typeof__ (b) _b = (b); \
139 _a < _b ? _a : _b; })
143 ({ __typeof__ (a) _a = (a); \
144 __typeof__ (b) _b = (b); \
145 _a > _b ? _a : _b; })
152 uint16_t makeWord(uint16_t w);
153 uint16_t makeWord(
byte h,
byte l);
155 #define word(...) makeWord(__VA_ARGS__)
157 unsigned long pulseIn(uint8_t pin, uint8_t state,
unsigned long timeout = 1000000L);
158 unsigned long pulseInLong(uint8_t pin, uint8_t state,
unsigned long timeout = 1000000L);
160 void tone(uint8_t _pin,
unsigned int frequency,
unsigned long duration = 0);
161 void noTone(uint8_t _pin);
165 long random(
long,
long);
166 void randomSeed(
unsigned long);
167 long map(
long,
long,
long,
long,
long);