arduino library for mbed
Dependents: Gameduino2 MemoryGame arduino2
arduino.cpp@0:3b83fc30bbdf, 2014-04-11 (annotated)
- Committer:
- aluqard
- Date:
- Fri Apr 11 07:21:59 2014 +0000
- Revision:
- 0:3b83fc30bbdf
Initial release
Who changed what in which revision?
User | Revision | Line number | New 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 | *****************************************************/ |