root / arduino-1.0 / hardware / arduino / cores / arduino / Arduino.h @ 58d82c77
History | View | Annotate | Download (5.5 KB)
1 | 58d82c77 | Tom Mullins | #ifndef Arduino_h
|
---|---|---|---|
2 | #define Arduino_h
|
||
3 | |||
4 | #include <stdlib.h> |
||
5 | #include <string.h> |
||
6 | #include <math.h> |
||
7 | |||
8 | #include <avr/pgmspace.h> |
||
9 | #include <avr/io.h> |
||
10 | #include <avr/interrupt.h> |
||
11 | |||
12 | #include "binary.h" |
||
13 | |||
14 | #ifdef __cplusplus
|
||
15 | extern "C"{ |
||
16 | #endif
|
||
17 | |||
18 | #define HIGH 0x1 |
||
19 | #define LOW 0x0 |
||
20 | |||
21 | #define INPUT 0x0 |
||
22 | #define OUTPUT 0x1 |
||
23 | |||
24 | #define true 0x1 |
||
25 | #define false 0x0 |
||
26 | |||
27 | #define PI 3.1415926535897932384626433832795 |
||
28 | #define HALF_PI 1.5707963267948966192313216916398 |
||
29 | #define TWO_PI 6.283185307179586476925286766559 |
||
30 | #define DEG_TO_RAD 0.017453292519943295769236907684886 |
||
31 | #define RAD_TO_DEG 57.295779513082320876798154814105 |
||
32 | |||
33 | #define SERIAL 0x0 |
||
34 | #define DISPLAY 0x1 |
||
35 | |||
36 | #define LSBFIRST 0 |
||
37 | #define MSBFIRST 1 |
||
38 | |||
39 | #define CHANGE 1 |
||
40 | #define FALLING 2 |
||
41 | #define RISING 3 |
||
42 | |||
43 | #if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
|
||
44 | #define DEFAULT 0 |
||
45 | #define EXTERNAL 1 |
||
46 | #define INTERNAL 2 |
||
47 | #else
|
||
48 | #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
||
49 | #define INTERNAL1V1 2 |
||
50 | #define INTERNAL2V56 3 |
||
51 | #else
|
||
52 | #define INTERNAL 3 |
||
53 | #endif
|
||
54 | #define DEFAULT 1 |
||
55 | #define EXTERNAL 0 |
||
56 | #endif
|
||
57 | |||
58 | // undefine stdlib's abs if encountered
|
||
59 | #ifdef abs
|
||
60 | #undef abs
|
||
61 | #endif
|
||
62 | |||
63 | #define min(a,b) ((a)<(b)?(a):(b))
|
||
64 | #define max(a,b) ((a)>(b)?(a):(b))
|
||
65 | #define abs(x) ((x)>0?(x):-(x)) |
||
66 | #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
|
||
67 | #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) |
||
68 | #define radians(deg) ((deg)*DEG_TO_RAD)
|
||
69 | #define degrees(rad) ((rad)*RAD_TO_DEG)
|
||
70 | #define sq(x) ((x)*(x))
|
||
71 | |||
72 | #define interrupts() sei()
|
||
73 | #define noInterrupts() cli()
|
||
74 | |||
75 | #define clockCyclesPerMicrosecond() ( F_CPU / 1000000L ) |
||
76 | #define clockCyclesToMicroseconds(a) ( ((a) * 1000L) / (F_CPU / 1000L) ) |
||
77 | #define microsecondsToClockCycles(a) ( ((a) * (F_CPU / 1000L)) / 1000L ) |
||
78 | |||
79 | #define lowByte(w) ((uint8_t) ((w) & 0xff)) |
||
80 | #define highByte(w) ((uint8_t) ((w) >> 8)) |
||
81 | |||
82 | #define bitRead(value, bit) (((value) >> (bit)) & 0x01) |
||
83 | #define bitSet(value, bit) ((value) |= (1UL << (bit))) |
||
84 | #define bitClear(value, bit) ((value) &= ~(1UL << (bit))) |
||
85 | #define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
|
||
86 | |||
87 | |||
88 | typedef unsigned int word; |
||
89 | |||
90 | #define bit(b) (1UL << (b)) |
||
91 | |||
92 | typedef uint8_t boolean;
|
||
93 | typedef uint8_t byte;
|
||
94 | |||
95 | void init(void); |
||
96 | |||
97 | void pinMode(uint8_t, uint8_t);
|
||
98 | void digitalWrite(uint8_t, uint8_t);
|
||
99 | int digitalRead(uint8_t);
|
||
100 | int analogRead(uint8_t);
|
||
101 | void analogReference(uint8_t mode);
|
||
102 | void analogWrite(uint8_t, int); |
||
103 | |||
104 | unsigned long millis(void); |
||
105 | unsigned long micros(void); |
||
106 | void delay(unsigned long); |
||
107 | void delayMicroseconds(unsigned int us); |
||
108 | unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout); |
||
109 | |||
110 | void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
|
||
111 | uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); |
||
112 | |||
113 | void attachInterrupt(uint8_t, void (*)(void), int mode); |
||
114 | void detachInterrupt(uint8_t);
|
||
115 | |||
116 | void setup(void); |
||
117 | void loop(void); |
||
118 | |||
119 | // Get the bit location within the hardware port of the given virtual pin.
|
||
120 | // This comes from the pins_*.c file for the active board configuration.
|
||
121 | |||
122 | #define analogInPinToBit(P) (P)
|
||
123 | |||
124 | // On the ATmega1280, the addresses of some of the port registers are
|
||
125 | // greater than 255, so we can't store them in uint8_t's.
|
||
126 | extern const uint16_t PROGMEM port_to_mode_PGM[]; |
||
127 | extern const uint16_t PROGMEM port_to_input_PGM[]; |
||
128 | extern const uint16_t PROGMEM port_to_output_PGM[]; |
||
129 | |||
130 | extern const uint8_t PROGMEM digital_pin_to_port_PGM[]; |
||
131 | // extern const uint8_t PROGMEM digital_pin_to_bit_PGM[];
|
||
132 | extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[]; |
||
133 | extern const uint8_t PROGMEM digital_pin_to_timer_PGM[]; |
||
134 | |||
135 | // Get the bit location within the hardware port of the given virtual pin.
|
||
136 | // This comes from the pins_*.c file for the active board configuration.
|
||
137 | //
|
||
138 | // These perform slightly better as macros compared to inline functions
|
||
139 | //
|
||
140 | #define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
|
||
141 | #define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )
|
||
142 | #define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
|
||
143 | #define analogInPinToBit(P) (P)
|
||
144 | #define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) ) |
||
145 | #define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) ) |
||
146 | #define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) ) |
||
147 | |||
148 | #define NOT_A_PIN 0 |
||
149 | #define NOT_A_PORT 0 |
||
150 | |||
151 | #ifdef ARDUINO_MAIN
|
||
152 | #define PA 1 |
||
153 | #define PB 2 |
||
154 | #define PC 3 |
||
155 | #define PD 4 |
||
156 | #define PE 5 |
||
157 | #define PF 6 |
||
158 | #define PG 7 |
||
159 | #define PH 8 |
||
160 | #define PJ 10 |
||
161 | #define PK 11 |
||
162 | #define PL 12 |
||
163 | #endif
|
||
164 | |||
165 | #define NOT_ON_TIMER 0 |
||
166 | #define TIMER0A 1 |
||
167 | #define TIMER0B 2 |
||
168 | #define TIMER1A 3 |
||
169 | #define TIMER1B 4 |
||
170 | #define TIMER2 5 |
||
171 | #define TIMER2A 6 |
||
172 | #define TIMER2B 7 |
||
173 | |||
174 | #define TIMER3A 8 |
||
175 | #define TIMER3B 9 |
||
176 | #define TIMER3C 10 |
||
177 | #define TIMER4A 11 |
||
178 | #define TIMER4B 12 |
||
179 | #define TIMER4C 13 |
||
180 | #define TIMER4D 14 |
||
181 | #define TIMER5A 15 |
||
182 | #define TIMER5B 16 |
||
183 | #define TIMER5C 17 |
||
184 | |||
185 | #ifdef __cplusplus
|
||
186 | } // extern "C"
|
||
187 | #endif
|
||
188 | |||
189 | #ifdef __cplusplus
|
||
190 | #include "WCharacter.h" |
||
191 | #include "WString.h" |
||
192 | #include "HardwareSerial.h" |
||
193 | |||
194 | uint16_t makeWord(uint16_t w); |
||
195 | uint16_t makeWord(byte h, byte l); |
||
196 | |||
197 | #define word(...) makeWord(__VA_ARGS__)
|
||
198 | |||
199 | unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L); |
||
200 | |||
201 | void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0); |
||
202 | void noTone(uint8_t _pin);
|
||
203 | |||
204 | // WMath prototypes
|
||
205 | long random(long); |
||
206 | long random(long, long); |
||
207 | void randomSeed(unsigned int); |
||
208 | long map(long, long, long, long, long); |
||
209 | |||
210 | #endif
|
||
211 | |||
212 | #include "pins_arduino.h" |
||
213 | |||
214 | #endif |