From 0292fe91fc2de0e5c5b374a6d0e0c3879fe49387 Mon Sep 17 00:00:00 2001 From: "David A. Mellis" Date: Wed, 21 Nov 2007 17:08:07 +0000 Subject: Adding map(), fixing radians() and degrees(), adding cast functions (int(x) instead of (int) x), adding interrupts() and noInterrupts(), etc. --- cores/arduino/WMath.cpp | 58 +++++++++++++++++++++++++++++++++++++++++++++++ cores/arduino/WProgram.h | 3 ++- cores/arduino/WRandom.cpp | 54 ------------------------------------------- cores/arduino/wiring.h | 18 +++++++++++++++ 4 files changed, 78 insertions(+), 55 deletions(-) create mode 100644 cores/arduino/WMath.cpp delete mode 100644 cores/arduino/WRandom.cpp (limited to 'cores/arduino') diff --git a/cores/arduino/WMath.cpp b/cores/arduino/WMath.cpp new file mode 100644 index 0000000..c83e2a2 --- /dev/null +++ b/cores/arduino/WMath.cpp @@ -0,0 +1,58 @@ +/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Wiring project - http://wiring.org.co + Copyright (c) 2004-06 Hernando Barragan + Modified 13 August 2006, David A. Mellis for Arduino - http://www.arduino.cc/ + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id$ +*/ + +extern "C" { + #include "stdlib.h" +} + +void randomSeed(unsigned int seed) +{ + if(seed != 0){ + srand(seed); + } +} + +long random(long howbig) +{ + long value; + if (howbig == 0){ + return 0; + } + return rand() % howbig; +} + +long random(long howsmall, long howbig) +{ + if(howsmall >= howbig){ + return howsmall; + } + long diff = howbig - howsmall; + return random(diff) + howsmall; +} + +long map(long x, long in_min, long in_max, long out_min, long out_max) +{ + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; +} \ No newline at end of file diff --git a/cores/arduino/WProgram.h b/cores/arduino/WProgram.h index d6d5ccc..206cdac 100755 --- a/cores/arduino/WProgram.h +++ b/cores/arduino/WProgram.h @@ -10,8 +10,9 @@ #ifdef __cplusplus #include "HardwareSerial.h" -// random prototypes +// WMath prototypes long random(long); long random(long, long); void randomSeed(unsigned int); +long map(long, long, long, long, long); #endif diff --git a/cores/arduino/WRandom.cpp b/cores/arduino/WRandom.cpp deleted file mode 100644 index c45c306..0000000 --- a/cores/arduino/WRandom.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Wiring project - http://wiring.org.co - Copyright (c) 2004-06 Hernando Barragan - Modified 13 August 2006, David A. Mellis for Arduino - http://www.arduino.cc/ - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA - - $Id$ -*/ - -extern "C" { - #include "stdlib.h" -} - -void randomSeed(unsigned int seed) -{ - if(seed != 0){ - srand(seed); - } -} - -long random(long howbig) -{ - long value; - if (howbig == 0){ - return 0; - } - return rand() % howbig; -} - -long random(long howsmall, long howbig) -{ - if(howsmall >= howbig){ - return howsmall; - } - long diff = howbig - howsmall; - return random(diff) + howsmall; -} - diff --git a/cores/arduino/wiring.h b/cores/arduino/wiring.h index 3c77389..e0c5315 100755 --- a/cores/arduino/wiring.h +++ b/cores/arduino/wiring.h @@ -44,6 +44,8 @@ extern "C"{ #define PI 3.14159265 #define HALF_PI 1.57079 #define TWO_PI 6.283185 +#define DEG_TO_RAD 0.01745329 +#define RAD_TO_DEG 57.2957786 #define SERIAL 0x0 #define DISPLAY 0x1 @@ -55,14 +57,30 @@ extern "C"{ #define FALLING 2 #define RISING 3 +// undefine stdlib's abs if encountered +#ifdef abs +#undef abs +#endif + +#define int(x) ((int)(x)) +#define char(x) ((char)(x)) +#define long(x) ((long)(x)) +#define byte(x) ((uint8_t)(x)) +#define float(x) ((float)(x)) +#define boolean(x) ((uint8_t)((x)==0?0:1)) + #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))) +#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) #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() ) -- cgit v1.2.3-18-g5258