arduino
Fork of arduino by
arduino.cpp@4:b000674ff8b3, 2019-04-15 (annotated)
- Committer:
- gastonfeng
- Date:
- Mon Apr 15 15:23:54 2019 +0800
- Revision:
- 4:b000674ff8b3
- Parent:
- 2:f032b07dbff0
remove
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 | */ |
gastonfeng | 2:f032b07dbff0 | 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 | ******************************************************/ |
gastonfeng |
1:4e1b6bfbac98 | 64 | void *pinMode(PinName pin, uint8_t f) |
gastonfeng |
1:4e1b6bfbac98 | 65 | { |
gastonfeng |
1:4e1b6bfbac98 | 66 | if (f == INPUT) |
gastonfeng |
1:4e1b6bfbac98 | 67 | return new DigitalIn(pin); |
gastonfeng |
1:4e1b6bfbac98 | 68 | else if (f == OUTPUT) |
gastonfeng |
1:4e1b6bfbac98 | 69 | return new DigitalOut(pin); |
gastonfeng |
1:4e1b6bfbac98 | 70 | } |
gastonfeng |
1:4e1b6bfbac98 | 71 | |
aluqard | 0:3b83fc30bbdf | 72 | /***************************************************** |
aluqard | 0:3b83fc30bbdf | 73 | Analog I/O |
aluqard | 0:3b83fc30bbdf | 74 | |
aluqard | 0:3b83fc30bbdf | 75 | analogReference() - TODO |
aluqard | 0:3b83fc30bbdf | 76 | analogRead() - TODO |
aluqard | 0:3b83fc30bbdf | 77 | analogWrite()-(PWM) - TODO |
aluqard | 0:3b83fc30bbdf | 78 | |
aluqard | 0:3b83fc30bbdf | 79 | *****************************************************/ |
aluqard | 0:3b83fc30bbdf | 80 | |
aluqard | 0:3b83fc30bbdf | 81 | /***************************************************** |
aluqard | 0:3b83fc30bbdf | 82 | Advanced I/O |
aluqard | 0:3b83fc30bbdf | 83 | |
aluqard | 0:3b83fc30bbdf | 84 | tone() - TODO |
aluqard | 0:3b83fc30bbdf | 85 | noTone() - TODO |
aluqard | 0:3b83fc30bbdf | 86 | shiftOut() - TODO |
aluqard | 0:3b83fc30bbdf | 87 | shiftIn() - TODO |
aluqard | 0:3b83fc30bbdf | 88 | pulseIn() - TODO |
aluqard | 0:3b83fc30bbdf | 89 | |
aluqard | 0:3b83fc30bbdf | 90 | *****************************************************/ |
aluqard | 0:3b83fc30bbdf | 91 | |
aluqard | 0:3b83fc30bbdf | 92 | /***************************************************** |
aluqard | 0:3b83fc30bbdf | 93 | Time |
aluqard | 0:3b83fc30bbdf | 94 | |
aluqard | 0:3b83fc30bbdf | 95 | millis() - need to start timer first |
aluqard | 0:3b83fc30bbdf | 96 | micros() - need to start timer first |
aluqard | 0:3b83fc30bbdf | 97 | delay() - done by Macro |
aluqard | 0:3b83fc30bbdf | 98 | delayMicroseconds() - Done byMacro |
aluqard | 0:3b83fc30bbdf | 99 | |
aluqard | 0:3b83fc30bbdf | 100 | *****************************************************/ |
aluqard | 0:3b83fc30bbdf | 101 | |
aluqard | 0:3b83fc30bbdf | 102 | Timer arduino_timer; |
aluqard | 0:3b83fc30bbdf | 103 | /** start the arduino_timer timer for millis() and micros() running. |
aluqard | 0:3b83fc30bbdf | 104 | * |
aluqard | 0:3b83fc30bbdf | 105 | * @param void |
aluqard | 0:3b83fc30bbdf | 106 | */ |
aluqard | 0:3b83fc30bbdf | 107 | void timer_start(void) { |
aluqard | 0:3b83fc30bbdf | 108 | arduino_timer.start(); |
aluqard | 0:3b83fc30bbdf | 109 | } |
aluqard | 0:3b83fc30bbdf | 110 | /** return a long for the amount of time since the timer was started in milliseconds. |
aluqard | 0:3b83fc30bbdf | 111 | * |
aluqard | 0:3b83fc30bbdf | 112 | * @param void |
aluqard | 0:3b83fc30bbdf | 113 | */ |
aluqard | 0:3b83fc30bbdf | 114 | long millis(void) { |
aluqard | 0:3b83fc30bbdf | 115 | return arduino_timer.read_ms(); |
aluqard | 0:3b83fc30bbdf | 116 | } |
aluqard | 0:3b83fc30bbdf | 117 | /** return a long for the amount of time since the timer was started in microseconds. |
aluqard | 0:3b83fc30bbdf | 118 | * |
aluqard | 0:3b83fc30bbdf | 119 | * @param void |
aluqard | 0:3b83fc30bbdf | 120 | */ |
aluqard | 0:3b83fc30bbdf | 121 | long micros(void) { |
aluqard | 0:3b83fc30bbdf | 122 | return arduino_timer.read_us(); |
aluqard | 0:3b83fc30bbdf | 123 | } |
aluqard | 0:3b83fc30bbdf | 124 | |
aluqard | 0:3b83fc30bbdf | 125 | |
aluqard | 0:3b83fc30bbdf | 126 | /***************************************************** |
aluqard | 0:3b83fc30bbdf | 127 | Maths |
aluqard | 0:3b83fc30bbdf | 128 | |
aluqard | 0:3b83fc30bbdf | 129 | min() - done by Macro |
aluqard | 0:3b83fc30bbdf | 130 | max() - done by Macro |
aluqard | 0:3b83fc30bbdf | 131 | abs() - done by Macro |
aluqard | 0:3b83fc30bbdf | 132 | constrain() - TODO |
aluqard | 0:3b83fc30bbdf | 133 | map() - TODO |
aluqard | 0:3b83fc30bbdf | 134 | pow() - implemented by including math.h |
aluqard | 0:3b83fc30bbdf | 135 | sqrt() - implemented by including math.h |
aluqard | 0:3b83fc30bbdf | 136 | |
aluqard | 0:3b83fc30bbdf | 137 | *****************************************************/ |
aluqard | 0:3b83fc30bbdf | 138 | |
aluqard | 0:3b83fc30bbdf | 139 | |
aluqard | 0:3b83fc30bbdf | 140 | /***************************************************** |
aluqard | 0:3b83fc30bbdf | 141 | Trigonometry |
aluqard | 0:3b83fc30bbdf | 142 | |
aluqard | 0:3b83fc30bbdf | 143 | sin() - implemented by including math.h |
aluqard | 0:3b83fc30bbdf | 144 | cos() - implemented by including math.h |
aluqard | 0:3b83fc30bbdf | 145 | tan() - implemented by including math.h |
aluqard | 0:3b83fc30bbdf | 146 | |
aluqard | 0:3b83fc30bbdf | 147 | *****************************************************/ |
aluqard | 0:3b83fc30bbdf | 148 | |
aluqard | 0:3b83fc30bbdf | 149 | /***************************************************** |
aluqard | 0:3b83fc30bbdf | 150 | Random Numbers |
aluqard | 0:3b83fc30bbdf | 151 | |
aluqard | 0:3b83fc30bbdf | 152 | randomSeed() - done by Macro |
aluqard | 0:3b83fc30bbdf | 153 | random() - function below |
aluqard | 0:3b83fc30bbdf | 154 | |
aluqard | 0:3b83fc30bbdf | 155 | *****************************************************/ |
aluqard | 0:3b83fc30bbdf | 156 | |
aluqard | 0:3b83fc30bbdf | 157 | /** generates a random number from 0 to defined number |
aluqard | 0:3b83fc30bbdf | 158 | * |
aluqard | 0:3b83fc30bbdf | 159 | * @param number maximum value for random number |
aluqard | 0:3b83fc30bbdf | 160 | */ |
aluqard | 0:3b83fc30bbdf | 161 | int random(int number) { |
aluqard | 0:3b83fc30bbdf | 162 | return (rand()%number); |
aluqard | 0:3b83fc30bbdf | 163 | } |
aluqard | 0:3b83fc30bbdf | 164 | /** generates a random number between two numbers |
aluqard | 0:3b83fc30bbdf | 165 | * |
aluqard | 0:3b83fc30bbdf | 166 | * @param numberone minimum value for random number |
aluqard | 0:3b83fc30bbdf | 167 | * @param numbertwo maximum value for random number |
aluqard | 0:3b83fc30bbdf | 168 | */ |
aluqard | 0:3b83fc30bbdf | 169 | int random(int numberone, int numbertwo) { |
aluqard | 0:3b83fc30bbdf | 170 | int random = 0; |
aluqard | 0:3b83fc30bbdf | 171 | if ((numberone < 0) && (numbertwo < 0)) { |
aluqard | 0:3b83fc30bbdf | 172 | numberone = numberone * -1; |
aluqard | 0:3b83fc30bbdf | 173 | numbertwo = numbertwo * -1; |
aluqard | 0:3b83fc30bbdf | 174 | random = -1 * (rand()%(numberone + numbertwo)); |
aluqard | 0:3b83fc30bbdf | 175 | } |
aluqard | 0:3b83fc30bbdf | 176 | if ((numbertwo < 0) && (numberone >= 0)) { |
aluqard | 0:3b83fc30bbdf | 177 | numbertwo = numbertwo * -1; |
aluqard | 0:3b83fc30bbdf | 178 | random = (rand()%(numberone + numbertwo)) - numbertwo; |
aluqard | 0:3b83fc30bbdf | 179 | } |
aluqard | 0:3b83fc30bbdf | 180 | if ((numberone < 0) && (numbertwo >= 0)) { |
aluqard | 0:3b83fc30bbdf | 181 | numberone = numberone * -1; |
aluqard | 0:3b83fc30bbdf | 182 | random = (rand()%(numberone + numbertwo)) - numberone; |
aluqard | 0:3b83fc30bbdf | 183 | } else { |
aluqard | 0:3b83fc30bbdf | 184 | random = (rand()%(numberone + numbertwo)) - min(numberone, numbertwo); |
aluqard | 0:3b83fc30bbdf | 185 | } |
aluqard | 0:3b83fc30bbdf | 186 | return random; |
aluqard | 0:3b83fc30bbdf | 187 | } |
aluqard | 0:3b83fc30bbdf | 188 | |
aluqard | 0:3b83fc30bbdf | 189 | /***************************************************** |
aluqard | 0:3b83fc30bbdf | 190 | Bits and Bytes |
aluqard | 0:3b83fc30bbdf | 191 | |
aluqard | 0:3b83fc30bbdf | 192 | lowByte() - function below |
aluqard | 0:3b83fc30bbdf | 193 | highByte() - function below |
aluqard | 0:3b83fc30bbdf | 194 | bitRead() - TODO |
aluqard | 0:3b83fc30bbdf | 195 | bitWrite() - TODO |
aluqard | 0:3b83fc30bbdf | 196 | bitSet() - TODO |
aluqard | 0:3b83fc30bbdf | 197 | bitClear() - TODO |
aluqard | 0:3b83fc30bbdf | 198 | bit() - TODO |
aluqard | 0:3b83fc30bbdf | 199 | |
aluqard | 0:3b83fc30bbdf | 200 | *****************************************************/ |
aluqard | 0:3b83fc30bbdf | 201 | |
aluqard | 0:3b83fc30bbdf | 202 | /** returns the lower nibble of first byte |
aluqard | 0:3b83fc30bbdf | 203 | * |
aluqard | 0:3b83fc30bbdf | 204 | * @param high byte of which the high nibble is required |
aluqard | 0:3b83fc30bbdf | 205 | */ |
aluqard | 0:3b83fc30bbdf | 206 | byte lowByte(short int low) { |
aluqard | 0:3b83fc30bbdf | 207 | byte bytelow = 0; |
aluqard | 0:3b83fc30bbdf | 208 | bytelow = (low & 0xFF); |
aluqard | 0:3b83fc30bbdf | 209 | return bytelow; |
aluqard | 0:3b83fc30bbdf | 210 | } |
aluqard | 0:3b83fc30bbdf | 211 | /** returns the higher nibble of first byte |
aluqard | 0:3b83fc30bbdf | 212 | * |
aluqard | 0:3b83fc30bbdf | 213 | * @param high byte of which the high nibble is required |
aluqard | 0:3b83fc30bbdf | 214 | */ |
aluqard | 0:3b83fc30bbdf | 215 | byte highByte(short int high) { |
aluqard | 0:3b83fc30bbdf | 216 | byte bytehigh = 0; |
aluqard | 0:3b83fc30bbdf | 217 | bytehigh = ((high >> 8) & 0xFF); |
aluqard | 0:3b83fc30bbdf | 218 | return bytehigh; |
aluqard | 0:3b83fc30bbdf | 219 | } |
aluqard | 0:3b83fc30bbdf | 220 | |
aluqard | 0:3b83fc30bbdf | 221 | |
aluqard | 0:3b83fc30bbdf | 222 | |
aluqard | 0:3b83fc30bbdf | 223 | /***************************************************** |
aluqard | 0:3b83fc30bbdf | 224 | External Interrupts |
aluqard | 0:3b83fc30bbdf | 225 | |
aluqard | 0:3b83fc30bbdf | 226 | attachInterrupt() - TODO |
aluqard | 0:3b83fc30bbdf | 227 | detachInterrupt() - TODO |
aluqard | 0:3b83fc30bbdf | 228 | |
aluqard | 0:3b83fc30bbdf | 229 | *****************************************************/ |
aluqard | 0:3b83fc30bbdf | 230 | |
aluqard | 0:3b83fc30bbdf | 231 | /***************************************************** |
aluqard | 0:3b83fc30bbdf | 232 | Interrupts |
aluqard | 0:3b83fc30bbdf | 233 | |
aluqard | 0:3b83fc30bbdf | 234 | interrupts() - TODO |
aluqard | 0:3b83fc30bbdf | 235 | noInterrupts() - TODO |
aluqard | 0:3b83fc30bbdf | 236 | |
aluqard | 0:3b83fc30bbdf | 237 | *****************************************************/ |
aluqard | 0:3b83fc30bbdf | 238 | |
aluqard | 0:3b83fc30bbdf | 239 | /***************************************************** |
aluqard | 0:3b83fc30bbdf | 240 | Communication |
aluqard | 0:3b83fc30bbdf | 241 | |
aluqard | 0:3b83fc30bbdf | 242 | Serial - TODO |
aluqard | 0:3b83fc30bbdf | 243 | Stream - TODO |
aluqard | 0:3b83fc30bbdf | 244 | |
gastonfeng | 2:f032b07dbff0 | 245 | *****************************************************/ |