Statistics
| Branch: | Revision:

root / arduino-1.0 / hardware / arduino / cores / arduino / Arduino.h @ 58d82c77

History | View | Annotate | Download (5.5 KB)

1
#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