123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- #ifndef Arduino_h
- #define Arduino_h
-
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
-
- #include <avr/pgmspace.h>
- #include <avr/io.h>
- #include <avr/interrupt.h>
-
- #include "binary.h"
-
- #ifdef __cplusplus
- extern "C"{
- #endif
-
- #define HIGH 0x1
- #define LOW 0x0
-
- #define INPUT 0x0
- #define OUTPUT 0x1
- #define INPUT_PULLUP 0x2
-
- #define true 0x1
- #define false 0x0
-
- #define PI 3.1415926535897932384626433832795
- #define HALF_PI 1.5707963267948966192313216916398
- #define TWO_PI 6.283185307179586476925286766559
- #define DEG_TO_RAD 0.017453292519943295769236907684886
- #define RAD_TO_DEG 57.295779513082320876798154814105
-
- #define SERIAL 0x0
- #define DISPLAY 0x1
-
- #define LSBFIRST 0
- #define MSBFIRST 1
-
- #define CHANGE 1
- #define FALLING 2
- #define RISING 3
-
- // analog voltage references
- #if defined(REFS2) // ATtiny of some sort
- #define DEFAULT 0
- #define EXTERNAL 1
- #define INTERNAL 2
- #else
- // Looks like the SFIOR register exists only on those chips without
- // 1.1V internal reference voltage. This is an educated guess inspired
- // by AppNote AVR097, page 5 bottom.
- #if !defined(SFIOR)
- #define INTERNAL1V1 2
- #define INTERNAL2V56 3
- #else
- #define INTERNAL 3
- #endif
- #define DEFAULT 1
- #define EXTERNAL 0
- #endif
-
- // undefine stdlib's abs if encountered
- #ifdef abs
- #undef abs
- #endif
-
- #define min(a,b) ((a)<(b)?(a):(b))
- #define max(a,b) ((a)>(b)?(a):(b))
- #define abs(x) ((x)>0?(x):-(x))
- #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
- #if __GNUC__ <= 4 && __GNUC_MINOR__ < 5
- // this conflicts with avr-gcc's built in headers as of avr-gcc 4.5.3
- #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
- #endif
- #define radians(deg) ((deg)*DEG_TO_RAD)
- #define degrees(rad) ((rad)*RAD_TO_DEG)
- #define sq(x) ((x)*(x))
-
- #define interrupts() sei()
- #define noInterrupts() cli()
-
- #define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
- #define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() )
- #define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() )
-
- #define lowByte(w) ((uint8_t) ((w) & 0xff))
- #define highByte(w) ((uint8_t) ((w) >> 8))
-
- #define bitRead(value, bit) (((value) >> (bit)) & 0x01)
- #define bitSet(value, bit) ((value) |= (1UL << (bit)))
- #define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
- #define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
-
-
- typedef unsigned int word;
-
- #define bit(b) (1UL << (b))
-
- typedef uint8_t boolean;
- typedef uint8_t byte;
-
- void init(void);
-
- void pinMode(uint8_t, uint8_t);
- void digitalWrite(uint8_t, uint8_t);
- int digitalRead(uint8_t);
- int analogRead(uint8_t);
- void analogReference(uint8_t mode);
- void analogWrite(uint8_t, int);
-
- unsigned long millis(void);
- unsigned long micros(void);
- void delay(unsigned long);
- void delayMicroseconds(unsigned int us);
- unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
-
- void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
- uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
-
- void attachInterrupt(uint8_t, void (*)(void), int mode);
- void detachInterrupt(uint8_t);
-
- void setup(void);
- void loop(void);
-
- // Get the bit location within the hardware port of the given virtual pin.
- // This comes from the pins_*.c file for the active board configuration.
-
- #define analogInPinToBit(P) (P)
-
- // On the ATmega1280, the addresses of some of the port registers are
- // greater than 255, so we can't store them in uint8_t's.
- extern const uint16_t PROGMEM port_to_mode_PGM[];
- extern const uint16_t PROGMEM port_to_input_PGM[];
- extern const uint16_t PROGMEM port_to_output_PGM[];
-
- extern const uint8_t PROGMEM digital_pin_to_port_PGM[];
- // extern const uint8_t PROGMEM digital_pin_to_bit_PGM[];
- extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[];
- extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];
-
- // Get the bit location within the hardware port of the given virtual pin.
- // This comes from the pins_*.c file for the active board configuration.
- //
- // These perform slightly better as macros compared to inline functions
- //
- #define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
- #define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )
- #define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
- #define analogInPinToBit(P) (P)
- #define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) )
- #define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
- #define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) )
-
- #define NOT_A_PIN 0
- #define NOT_A_PORT 0
-
- #ifdef ARDUINO_MAIN
- #define PA 1
- #define PB 2
- #define PC 3
- #define PD 4
- #define PE 5
- #define PF 6
- #define PG 7
- #define PH 8
- #define PJ 10
- #define PK 11
- #define PL 12
- #endif
-
- #define NOT_ON_TIMER 0
- #define TIMER0A 1
- #define TIMER0B 2
- #define TIMER1A 3
- #define TIMER1B 4
- #define TIMER2 5
- #define TIMER2A 6
- #define TIMER2B 7
-
- #define TIMER3A 8
- #define TIMER3B 9
- #define TIMER3C 10
- #define TIMER4A 11
- #define TIMER4B 12
- #define TIMER4C 13
- #define TIMER4D 14
- #define TIMER5A 15
- #define TIMER5B 16
- #define TIMER5C 17
-
- #ifdef __cplusplus
- } // extern "C"
- #endif
-
- #ifdef __cplusplus
- #include "WCharacter.h"
- #include "WString.h"
- #include "HardwareSerial.h"
-
- uint16_t makeWord(uint16_t w);
- uint16_t makeWord(byte h, byte l);
-
- #define word(...) makeWord(__VA_ARGS__)
-
- unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L);
-
- void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
- void noTone(uint8_t _pin);
-
- // WMath prototypes
- long random(long);
- long random(long, long);
- void randomSeed(unsigned int);
- long map(long, long, long, long, long);
-
- #endif
-
- #include "pins_arduino.h"
-
- #endif
|