tommasta

Arduino.h

Mar 24th, 2012
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.70 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment