@@ -75,65 +75,70 @@ void yield(void);
75
75
76
76
/* Analog reference definitions */
77
77
78
- // ATmega8535, ATmega8, ATmega16, ATmega32, ATmega64, ATmega128
79
- #if defined(__AVR_ATmega8535__ ) || defined(__AVR_ATmega8__ ) || defined(__AVR_ATmega16__ ) \
80
- || defined(__AVR_ATmega32__ ) || defined(__AVR_ATmega64__ ) || defined(__AVR_ATmega128__ )
78
+ // "Classic" series
79
+ #if defined(__AVR_ATmega8535__) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) \
80
+ || defined(__AVR_ATmega32__) || defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
81
81
#define EXTERNAL 0
82
82
#define DEFAULT 1 // Default -> AVCC with external capacitor at AREF pin
83
83
#define INTERNAL2V56 3
84
84
#define INTERNAL 3
85
85
86
- // ATmega48/P/PB, ATmega88/P/PB, ATmega168/P/PB, ATmega328/P/PB
87
- #elif defined(__AVR_ATmega48__ ) || defined(__AVR_ATmega48P__ ) || defined(__AVR_ATmega48PB__ ) \
88
- || defined(__AVR_ATmega88__ ) || defined(__AVR_ATmega88P__ ) || defined(__AVR_ATmega88PB__ ) \
89
- || defined(__AVR_ATmega168__ ) || defined(__AVR_ATmega168P__ ) || defined(__AVR_ATmega168PB__ ) \
90
- || defined(__AVR_ATmega328__ ) || defined(__AVR_ATmega328P__ ) || defined(__AVR_ATmega328PB__ )
86
+ // 0/1 series
87
+ #elif defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) \
88
+ || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__)
91
89
#define EXTERNAL 0
92
90
#define DEFAULT 1 // Default -> AVCC with external capacitor at AREF pin
93
- #define INTERNAL1V1 3
91
+ #define INTERNAL1V1 2
92
+ #define INTERNAL2V56 3
94
93
#define INTERNAL 3
95
94
96
- // ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561
97
- #elif defined(__AVR_ATmega640__ ) || defined(__AVR_ATmega1280__ ) || defined(__AVR_ATmega1281__ ) \
98
- || defined(__AVR_ATmega2560__ ) || defined(__AVR_ATmega2561__ )
95
+ // 4 series
96
+ #elif defined(__AVR_ATmega164A__) || defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324A__) \
97
+ || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega324PB__) \
98
+ || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284__) \
99
+ || defined(__AVR_ATmega1284P__)
99
100
#define EXTERNAL 0
100
101
#define DEFAULT 1 // Default -> AVCC with external capacitor at AREF pin
101
102
#define INTERNAL1V1 2
102
103
#define INTERNAL2V56 3
103
104
#define INTERNAL 3
104
105
106
+ // 5 series
107
+ #elif defined(__AVR_ATmega165__) || defined(__AVR_ATmega165A__) || defined(__AVR_ATmega165P__) \
108
+ || defined(__AVR_ATmega165PA__) || defined(__AVR_ATmega325__) || defined(__AVR_ATmega325A__) \
109
+ || defined(__AVR_ATmega325P__) || defined(__AVR_ATmega325PA__) || defined(__AVR_ATmega3250__) \
110
+ || defined(__AVR_ATmega3250A__) || defined(__AVR_ATmega3250P__) || defined(__AVR_ATmega3250PA__) \
111
+ || defined(__AVR_ATmega645__) || defined(__AVR_ATmega645A__) || defined(__AVR_ATmega645P__) \
112
+ || defined(__AVR_ATmega6450__) || defined(__AVR_ATmega6450A__) || defined(__AVR_ATmega6450P__)
113
+ #define EXTERNAL 0
114
+ #define DEFAULT 1 // Default -> AVCC with external capacitor at AREF pin
115
+ #define INTERNAL1V1 3
116
+ #define INTERNAL 3
105
117
106
- // ATmega164A/P, ATmega324A/P/PA/PB, ATmega644/P, ATmega1284/P
107
- #elif defined(__AVR_ATmega164A__ ) || defined(__AVR_ATmega164P__ ) || defined(__AVR_ATmega324A__ ) \
108
- || defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega324PA__ ) || defined(__AVR_ATmega324PB__ ) \
109
- || defined(__AVR_ATmega644A__ ) || defined(__AVR_ATmega644P__ ) || defined(__AVR_ATmega1284__ ) \
110
- || defined(__AVR_ATmega1284P__ )
118
+ // 8 series
119
+ #elif defined(__AVR_ATmega48__ ) || defined(__AVR_ATmega48P__) || defined(__AVR_ATmega48PB__) \
120
+ || defined(__AVR_ATmega88__) || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega88PB__ ) \
121
+ || defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega168PB__) \
122
+ || defined(__AVR_ATmega328__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328PB__ )
111
123
#define EXTERNAL 0
112
124
#define DEFAULT 1 // Default -> AVCC with external capacitor at AREF pin
113
- #define INTERNAL1V1 2
114
- #define INTERNAL2V56 3
125
+ #define INTERNAL1V1 3
115
126
#define INTERNAL 3
116
127
117
- #endif
128
+ // 9 series
129
+ #elif defined(__AVR_ATmega169__) || defined(__AVR_ATmega169A__) || defined(__AVR_ATmega169P__) \
130
+ || defined(__AVR_ATmega169PA__) || defined(__AVR_ATmega329__) || defined(__AVR_ATmega329A__) \
131
+ || defined(__AVR_ATmega329P__) || defined(__AVR_ATmega329PA__) || defined(__AVR_ATmega3290__) \
132
+ || defined(__AVR_ATmega3290A__) || defined(__AVR_ATmega3290P__) || defined(__AVR_ATmega3290PA__) \
133
+ || defined(__AVR_ATmega649__) || defined(__AVR_ATmega649A__) || defined(__AVR_ATmega649P__) \
134
+ || defined(__AVR_ATmega6490__) || defined(__AVR_ATmega6490A__) || defined(__AVR_ATmega6490P__)
135
+ #define EXTERNAL 0
136
+ #define DEFAULT 1 // Default -> AVCC with external capacitor at AREF pin
137
+ #define INTERNAL1V1 3
138
+ #define INTERNAL 3
118
139
119
- // undefine stdlib's abs if encountered
120
- #ifdef abs
121
- #undef abs
122
140
#endif
123
141
124
- #define abs (x ) ({ typeof (x) _x = (x); _x > 0 ? _x : -_x; })
125
- #define sq (x ) ({ typeof (x) _x = (x); _x * _x; })
126
- #define min (a ,b ) ({ typeof (a) _a = (a); typeof (b) _b = (b); _a < _b ? _a : _b; })
127
- #define max (a ,b ) ({ typeof (a) _a = (a); typeof (b) _b = (b); _a > _b ? _a : _b; })
128
- #define round (x ) ({ typeof (x) _x = (x); _x >= 0 ? (long)(_x + 0.5) : (long)(_x - 0.5); })
129
- #define radians (deg ) ((deg) * DEG_TO_RAD)
130
- #define degrees (rad ) ((rad) * RAD_TO_DEG)
131
- #define constrain (x ,low ,high ) ({ \
132
- typeof (x) _x = (x); \
133
- typeof (low) _l = (low); \
134
- typeof (high) _h = (high); \
135
- _x < _l ? _l : _x > _h ? _h : _x; })
136
-
137
142
#define interrupts () sei()
138
143
#define noInterrupts () cli()
139
144
@@ -293,6 +298,66 @@ extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];
293
298
} // extern "C"
294
299
#endif
295
300
301
+ // Undefine stdlib's abs if encountered
302
+ #ifdef abs
303
+ #undef abs
304
+ #endif
305
+
306
+ #ifdef __cplusplus
307
+ template <class T >
308
+ auto abs (const T& x) -> decltype(x > 0 ? x : -x) {
309
+ return x > 0 ? x : -x;
310
+ }
311
+
312
+ template <class T , class L >
313
+ auto min (const T& a, const L& b) -> decltype((b < a) ? b : a) {
314
+ return (b < a) ? b : a;
315
+ }
316
+
317
+ template <class T , class L >
318
+ auto max (const T& a, const L& b) -> decltype((b < a) ? b : a) {
319
+ return (a < b) ? b : a;
320
+ }
321
+
322
+ template <class T >
323
+ long round (const T& x) {
324
+ return (long )(x >= 0 ? (x + 0.5 ) : (x - 0.5 ));
325
+ }
326
+
327
+ template <class T >
328
+ auto sq (const T& x) -> decltype(x * x) {
329
+ return x * x;
330
+ }
331
+
332
+ template <class T >
333
+ auto radians (const T& deg) -> decltype(deg * DEG_TO_RAD) {
334
+ return deg * DEG_TO_RAD;
335
+ }
336
+
337
+ template <class T >
338
+ auto degrees (const T& rad) -> decltype(rad * RAD_TO_DEG) {
339
+ return rad * RAD_TO_DEG;
340
+ }
341
+
342
+ template <class T , class L , class H >
343
+ auto constrain (const T& x, const L& l, const H& h) -> decltype((x < l) ? l : (x > h) ? h : x) {
344
+ return (x < l) ? l : (x > h) ? h : x;
345
+ }
346
+
347
+ #else
348
+ #define abs (x ) ({ typeof (x) _x = (x); _x > 0 ? _x : -_x; })
349
+ #define min (a,b ) ({ typeof (a) _a = (a); typeof (b) _b = (b); _a < _b ? _a : _b; })
350
+ #define max (a,b ) ({ typeof (a) _a = (a); typeof (b) _b = (b); _a > _b ? _a : _b; })
351
+ #define sq (x ) ({ typeof (x) _x = (x); _x * _x; })
352
+ #define radians (deg ) ((deg) * DEG_TO_RAD)
353
+ #define degrees (rad ) ((rad) * RAD_TO_DEG)
354
+ #define constrain (x,low,high ) ({ \
355
+ typeof (x) _x = (x); \
356
+ typeof (low) _l = (low); \
357
+ typeof (high) _h = (high); \
358
+ _x < _l ? _l : _x > _h ? _h : _x; })
359
+ #endif // __cplusplus
360
+
296
361
#ifdef __cplusplus
297
362
#include " WCharacter.h"
298
363
#include " WString.h"
0 commit comments