arduino library for mbed

Dependents:   Gameduino2 MemoryGame arduino2

Committer:
aluqard
Date:
Fri Apr 11 07:21:59 2014 +0000
Revision:
0:3b83fc30bbdf
Initial release

Who changed what in which revision?

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