Library to allow the use of Arduino specific language with the mbed

Dependents:   Gameduino Factory_monitor_0v1 mbed_mindflex NEW_NFC_TEST

This is a library for allowing the use of programs written for the Arduino with the mbed. This was started for use with the Gameduino shield Library. It is currently uncomplete and not fully tested, but I don't see myself spending time on it. See TODOs and check http://arduino.cc/en/Reference/HomePage for missing parts

Committer:
TheChrisyd
Date:
Thu Dec 20 23:00:25 2012 +0000
Revision:
3:272d0276d474
Parent:
1:b22cf6a5957d
updated macros and typedefs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TheChrisyd 0:8d785e80d3ba 1 /**
TheChrisyd 0:8d785e80d3ba 2 * @section LICENSE
TheChrisyd 0:8d785e80d3ba 3 * Copyright (c) 2012
TheChrisyd 0:8d785e80d3ba 4 *
TheChrisyd 0:8d785e80d3ba 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
TheChrisyd 0:8d785e80d3ba 6 * of this software and associated documentation files (the "Software"), to deal
TheChrisyd 0:8d785e80d3ba 7 * in the Software without restriction, including without limitation the rights
TheChrisyd 0:8d785e80d3ba 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
TheChrisyd 0:8d785e80d3ba 9 * copies of the Software, and to permit persons to whom the Software is
TheChrisyd 0:8d785e80d3ba 10 * furnished to do so, subject to the following conditions:
TheChrisyd 0:8d785e80d3ba 11 *
TheChrisyd 0:8d785e80d3ba 12 * The above copyright notice and this permission notice shall be included in
TheChrisyd 0:8d785e80d3ba 13 * all copies or substantial portions of the Software.
TheChrisyd 0:8d785e80d3ba 14 *
TheChrisyd 0:8d785e80d3ba 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
TheChrisyd 0:8d785e80d3ba 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
TheChrisyd 0:8d785e80d3ba 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
TheChrisyd 0:8d785e80d3ba 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
TheChrisyd 0:8d785e80d3ba 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
TheChrisyd 0:8d785e80d3ba 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
TheChrisyd 0:8d785e80d3ba 21 * THE SOFTWARE.
TheChrisyd 0:8d785e80d3ba 22 *
TheChrisyd 0:8d785e80d3ba 23 * @section DESCRIPTION
TheChrisyd 0:8d785e80d3ba 24 * This is a library for allowing the use of programs written for the Arduino
TheChrisyd 0:8d785e80d3ba 25 * with the mbed. This was started for use with the Gameduino shield Library.
TheChrisyd 0:8d785e80d3ba 26 * It is currently uncomplete and not fully tested, but I don't see myself spending time on it.
TheChrisyd 0:8d785e80d3ba 27 * See TODOs and check http://arduino.cc/en/Reference/HomePage for missing parts
TheChrisyd 0:8d785e80d3ba 28 *
TheChrisyd 0:8d785e80d3ba 29 * @file arduino.c
TheChrisyd 0:8d785e80d3ba 30 *
TheChrisyd 0:8d785e80d3ba 31 * Example:
TheChrisyd 0:8d785e80d3ba 32 * @code
TheChrisyd 0:8d785e80d3ba 33 *
TheChrisyd 0:8d785e80d3ba 34 * #include "mbed.h"
TheChrisyd 0:8d785e80d3ba 35 * #include "arduino.h"
TheChrisyd 0:8d785e80d3ba 36 *
TheChrisyd 0:8d785e80d3ba 37 * void setup(){
TheChrisyd 0:8d785e80d3ba 38 * // setup code
TheChrisyd 0:8d785e80d3ba 39 * }
TheChrisyd 0:8d785e80d3ba 40 *
TheChrisyd 0:8d785e80d3ba 41 *void loop(){
TheChrisyd 0:8d785e80d3ba 42 * // loop code
TheChrisyd 0:8d785e80d3ba 43 *}
TheChrisyd 0:8d785e80d3ba 44 *
TheChrisyd 0:8d785e80d3ba 45 * int main() {
TheChrisyd 0:8d785e80d3ba 46 * timer_start();
TheChrisyd 0:8d785e80d3ba 47 * setup();
TheChrisyd 0:8d785e80d3ba 48 * while(1) {
TheChrisyd 0:8d785e80d3ba 49 * loop();
TheChrisyd 0:8d785e80d3ba 50 * }
TheChrisyd 0:8d785e80d3ba 51 * }
TheChrisyd 0:8d785e80d3ba 52 * @endcode
TheChrisyd 0:8d785e80d3ba 53 */
TheChrisyd 0:8d785e80d3ba 54 #include "arduino.h"
TheChrisyd 0:8d785e80d3ba 55
TheChrisyd 0:8d785e80d3ba 56 /*****************************************************
TheChrisyd 0:8d785e80d3ba 57 Digital I/O
TheChrisyd 0:8d785e80d3ba 58
TheChrisyd 0:8d785e80d3ba 59 pinMode()- TODO
TheChrisyd 0:8d785e80d3ba 60 digitalWrite()- TODO
TheChrisyd 0:8d785e80d3ba 61 digitalRead()- TODO
TheChrisyd 0:8d785e80d3ba 62
TheChrisyd 0:8d785e80d3ba 63 ******************************************************/
TheChrisyd 0:8d785e80d3ba 64
TheChrisyd 0:8d785e80d3ba 65 /*****************************************************
TheChrisyd 0:8d785e80d3ba 66 Analog I/O
TheChrisyd 0:8d785e80d3ba 67
TheChrisyd 0:8d785e80d3ba 68 analogReference() - TODO
TheChrisyd 0:8d785e80d3ba 69 analogRead() - TODO
TheChrisyd 0:8d785e80d3ba 70 analogWrite()-(PWM) - TODO
TheChrisyd 0:8d785e80d3ba 71
TheChrisyd 0:8d785e80d3ba 72 *****************************************************/
TheChrisyd 0:8d785e80d3ba 73
TheChrisyd 0:8d785e80d3ba 74 /*****************************************************
TheChrisyd 0:8d785e80d3ba 75 Advanced I/O
TheChrisyd 0:8d785e80d3ba 76
TheChrisyd 0:8d785e80d3ba 77 tone() - TODO
TheChrisyd 0:8d785e80d3ba 78 noTone() - TODO
TheChrisyd 0:8d785e80d3ba 79 shiftOut() - TODO
TheChrisyd 0:8d785e80d3ba 80 shiftIn() - TODO
TheChrisyd 0:8d785e80d3ba 81 pulseIn() - TODO
TheChrisyd 0:8d785e80d3ba 82
TheChrisyd 0:8d785e80d3ba 83 *****************************************************/
TheChrisyd 0:8d785e80d3ba 84
TheChrisyd 0:8d785e80d3ba 85 /*****************************************************
TheChrisyd 0:8d785e80d3ba 86 Time
TheChrisyd 0:8d785e80d3ba 87
TheChrisyd 0:8d785e80d3ba 88 millis() - need to start timer first
TheChrisyd 0:8d785e80d3ba 89 micros() - need to start timer first
TheChrisyd 0:8d785e80d3ba 90 delay() - done by Macro
TheChrisyd 0:8d785e80d3ba 91 delayMicroseconds() - Done byMacro
TheChrisyd 0:8d785e80d3ba 92
TheChrisyd 0:8d785e80d3ba 93 *****************************************************/
TheChrisyd 0:8d785e80d3ba 94
TheChrisyd 0:8d785e80d3ba 95 Timer arduino_timer;
TheChrisyd 0:8d785e80d3ba 96 /** start the arduino_timer timer for millis() and micros() running.
TheChrisyd 0:8d785e80d3ba 97 *
TheChrisyd 0:8d785e80d3ba 98 * @param void
TheChrisyd 0:8d785e80d3ba 99 */
TheChrisyd 0:8d785e80d3ba 100 void timer_start(void) {
TheChrisyd 0:8d785e80d3ba 101 arduino_timer.start();
TheChrisyd 0:8d785e80d3ba 102 }
TheChrisyd 0:8d785e80d3ba 103 /** return a long for the amount of time since the timer was started in milliseconds.
TheChrisyd 0:8d785e80d3ba 104 *
TheChrisyd 0:8d785e80d3ba 105 * @param void
TheChrisyd 0:8d785e80d3ba 106 */
TheChrisyd 0:8d785e80d3ba 107 long millis(void) {
TheChrisyd 0:8d785e80d3ba 108 return arduino_timer.read_ms();
TheChrisyd 0:8d785e80d3ba 109 }
TheChrisyd 0:8d785e80d3ba 110 /** return a long for the amount of time since the timer was started in microseconds.
TheChrisyd 0:8d785e80d3ba 111 *
TheChrisyd 0:8d785e80d3ba 112 * @param void
TheChrisyd 0:8d785e80d3ba 113 */
TheChrisyd 0:8d785e80d3ba 114 long micros(void) {
TheChrisyd 0:8d785e80d3ba 115 return arduino_timer.read_us();
TheChrisyd 0:8d785e80d3ba 116 }
TheChrisyd 0:8d785e80d3ba 117
TheChrisyd 0:8d785e80d3ba 118
TheChrisyd 0:8d785e80d3ba 119 /*****************************************************
TheChrisyd 0:8d785e80d3ba 120 Maths
TheChrisyd 0:8d785e80d3ba 121
TheChrisyd 0:8d785e80d3ba 122 min() - done by Macro
TheChrisyd 0:8d785e80d3ba 123 max() - done by Macro
TheChrisyd 0:8d785e80d3ba 124 abs() - done by Macro
TheChrisyd 0:8d785e80d3ba 125 constrain() - TODO
TheChrisyd 0:8d785e80d3ba 126 map() - TODO
TheChrisyd 0:8d785e80d3ba 127 pow() - implemented by including math.h
TheChrisyd 0:8d785e80d3ba 128 sqrt() - implemented by including math.h
TheChrisyd 0:8d785e80d3ba 129
TheChrisyd 0:8d785e80d3ba 130 *****************************************************/
TheChrisyd 0:8d785e80d3ba 131
TheChrisyd 0:8d785e80d3ba 132
TheChrisyd 0:8d785e80d3ba 133 /*****************************************************
TheChrisyd 0:8d785e80d3ba 134 Trigonometry
TheChrisyd 0:8d785e80d3ba 135
TheChrisyd 0:8d785e80d3ba 136 sin() - implemented by including math.h
TheChrisyd 0:8d785e80d3ba 137 cos() - implemented by including math.h
TheChrisyd 0:8d785e80d3ba 138 tan() - implemented by including math.h
TheChrisyd 0:8d785e80d3ba 139
TheChrisyd 0:8d785e80d3ba 140 *****************************************************/
TheChrisyd 0:8d785e80d3ba 141
TheChrisyd 0:8d785e80d3ba 142 /*****************************************************
TheChrisyd 0:8d785e80d3ba 143 Random Numbers
TheChrisyd 0:8d785e80d3ba 144
TheChrisyd 0:8d785e80d3ba 145 randomSeed() - done by Macro
TheChrisyd 0:8d785e80d3ba 146 random() - function below
TheChrisyd 0:8d785e80d3ba 147
TheChrisyd 0:8d785e80d3ba 148 *****************************************************/
TheChrisyd 0:8d785e80d3ba 149
TheChrisyd 0:8d785e80d3ba 150 /** generates a random number from 0 to defined number
TheChrisyd 0:8d785e80d3ba 151 *
TheChrisyd 0:8d785e80d3ba 152 * @param number maximum value for random number
TheChrisyd 0:8d785e80d3ba 153 */
TheChrisyd 0:8d785e80d3ba 154 int random(int number) {
TheChrisyd 0:8d785e80d3ba 155 return (rand()%number);
TheChrisyd 0:8d785e80d3ba 156 }
TheChrisyd 0:8d785e80d3ba 157 /** generates a random number between two numbers
TheChrisyd 0:8d785e80d3ba 158 *
TheChrisyd 0:8d785e80d3ba 159 * @param numberone minimum value for random number
TheChrisyd 0:8d785e80d3ba 160 * @param numbertwo maximum value for random number
TheChrisyd 0:8d785e80d3ba 161 */
TheChrisyd 0:8d785e80d3ba 162 int random(int numberone, int numbertwo) {
TheChrisyd 0:8d785e80d3ba 163 int random = 0;
TheChrisyd 0:8d785e80d3ba 164 if ((numberone < 0) && (numbertwo < 0)) {
TheChrisyd 0:8d785e80d3ba 165 numberone = numberone * -1;
TheChrisyd 0:8d785e80d3ba 166 numbertwo = numbertwo * -1;
TheChrisyd 0:8d785e80d3ba 167 random = -1 * (rand()%(numberone + numbertwo));
TheChrisyd 0:8d785e80d3ba 168 }
TheChrisyd 0:8d785e80d3ba 169 if ((numbertwo < 0) && (numberone >= 0)) {
TheChrisyd 0:8d785e80d3ba 170 numbertwo = numbertwo * -1;
TheChrisyd 0:8d785e80d3ba 171 random = (rand()%(numberone + numbertwo)) - numbertwo;
TheChrisyd 0:8d785e80d3ba 172 }
TheChrisyd 0:8d785e80d3ba 173 if ((numberone < 0) && (numbertwo >= 0)) {
TheChrisyd 0:8d785e80d3ba 174 numberone = numberone * -1;
TheChrisyd 0:8d785e80d3ba 175 random = (rand()%(numberone + numbertwo)) - numberone;
TheChrisyd 0:8d785e80d3ba 176 } else {
TheChrisyd 0:8d785e80d3ba 177 random = (rand()%(numberone + numbertwo)) - min(numberone, numbertwo);
TheChrisyd 0:8d785e80d3ba 178 }
TheChrisyd 0:8d785e80d3ba 179 return random;
TheChrisyd 0:8d785e80d3ba 180 }
TheChrisyd 0:8d785e80d3ba 181
TheChrisyd 0:8d785e80d3ba 182 /*****************************************************
TheChrisyd 0:8d785e80d3ba 183 Bits and Bytes
TheChrisyd 0:8d785e80d3ba 184
TheChrisyd 0:8d785e80d3ba 185 lowByte() - function below
TheChrisyd 0:8d785e80d3ba 186 highByte() - function below
TheChrisyd 0:8d785e80d3ba 187 bitRead() - TODO
TheChrisyd 0:8d785e80d3ba 188 bitWrite() - TODO
TheChrisyd 0:8d785e80d3ba 189 bitSet() - TODO
TheChrisyd 0:8d785e80d3ba 190 bitClear() - TODO
TheChrisyd 0:8d785e80d3ba 191 bit() - TODO
TheChrisyd 0:8d785e80d3ba 192
TheChrisyd 0:8d785e80d3ba 193 *****************************************************/
TheChrisyd 0:8d785e80d3ba 194
TheChrisyd 0:8d785e80d3ba 195 /** returns the lower nibble of first byte
TheChrisyd 0:8d785e80d3ba 196 *
TheChrisyd 0:8d785e80d3ba 197 * @param high byte of which the high nibble is required
TheChrisyd 0:8d785e80d3ba 198 */
TheChrisyd 0:8d785e80d3ba 199 byte lowByte(short int low) {
TheChrisyd 0:8d785e80d3ba 200 byte bytelow = 0;
TheChrisyd 0:8d785e80d3ba 201 bytelow = (low & 0xFF);
TheChrisyd 0:8d785e80d3ba 202 return bytelow;
TheChrisyd 0:8d785e80d3ba 203 }
TheChrisyd 0:8d785e80d3ba 204 /** returns the higher nibble of first byte
TheChrisyd 0:8d785e80d3ba 205 *
TheChrisyd 0:8d785e80d3ba 206 * @param high byte of which the high nibble is required
TheChrisyd 0:8d785e80d3ba 207 */
TheChrisyd 0:8d785e80d3ba 208 byte highByte(short int high) {
TheChrisyd 0:8d785e80d3ba 209 byte bytehigh = 0;
TheChrisyd 0:8d785e80d3ba 210 bytehigh = ((high >> 8) & 0xFF);
TheChrisyd 0:8d785e80d3ba 211 return bytehigh;
TheChrisyd 0:8d785e80d3ba 212 }
TheChrisyd 0:8d785e80d3ba 213
TheChrisyd 0:8d785e80d3ba 214
TheChrisyd 0:8d785e80d3ba 215
TheChrisyd 0:8d785e80d3ba 216 /*****************************************************
TheChrisyd 0:8d785e80d3ba 217 External Interrupts
TheChrisyd 0:8d785e80d3ba 218
TheChrisyd 0:8d785e80d3ba 219 attachInterrupt() - TODO
TheChrisyd 0:8d785e80d3ba 220 detachInterrupt() - TODO
TheChrisyd 0:8d785e80d3ba 221
TheChrisyd 0:8d785e80d3ba 222 *****************************************************/
TheChrisyd 0:8d785e80d3ba 223
TheChrisyd 0:8d785e80d3ba 224 /*****************************************************
TheChrisyd 0:8d785e80d3ba 225 Interrupts
TheChrisyd 0:8d785e80d3ba 226
TheChrisyd 0:8d785e80d3ba 227 interrupts() - TODO
TheChrisyd 0:8d785e80d3ba 228 noInterrupts() - TODO
TheChrisyd 0:8d785e80d3ba 229
TheChrisyd 0:8d785e80d3ba 230 *****************************************************/
TheChrisyd 0:8d785e80d3ba 231
TheChrisyd 0:8d785e80d3ba 232 /*****************************************************
TheChrisyd 0:8d785e80d3ba 233 Communication
TheChrisyd 0:8d785e80d3ba 234
TheChrisyd 0:8d785e80d3ba 235 Serial - TODO
TheChrisyd 0:8d785e80d3ba 236 Stream - TODO
TheChrisyd 0:8d785e80d3ba 237
TheChrisyd 0:8d785e80d3ba 238 *****************************************************/