1
1
/*
2
2
Boards.h - Hardware Abstraction Layer for Firmata library
3
3
Copyright (c) 2006-2008 Hans-Christoph Steiner. All rights reserved.
4
- Copyright (C) 2009-2015 Jeff Hoefs. All rights reserved.
4
+ Copyright (C) 2009-2017 Jeff Hoefs. All rights reserved.
5
5
6
6
This library is free software; you can redistribute it and/or
7
7
modify it under the terms of the GNU Lesser General Public
10
10
11
11
See file LICENSE.txt for further informations on licensing terms.
12
12
13
- Last updated December 19th, 2015
13
+ Last updated March 16th, 2017
14
14
*/
15
15
16
16
#ifndef Firmata_Boards_h
@@ -260,6 +260,23 @@ writePort(port, value, bitmask): Write an 8 bit port.
260
260
#define PIN_TO_SERVO (p ) (p) // deprecated since v2.4
261
261
262
262
263
+ // Arduino MKRZero
264
+ #elif defined(ARDUINO_SAMD_MKRZERO )
265
+ #define TOTAL_ANALOG_PINS 7
266
+ #define TOTAL_PINS 34 // 8 digital + 3 spi + 2 i2c + 2 uart + 7 analog + 3 usb + 1 aref + 5 sd + 1 bottom pad + 1 led + 1 battery adc
267
+ #define IS_PIN_DIGITAL (p ) ((((p) >= 0 && (p) <= 21) || (p) == 32) && !IS_PIN_SERIAL(p))
268
+ #define IS_PIN_ANALOG (p ) (((p) >= 15 && (p) < 15 + TOTAL_ANALOG_PINS) || (p) == 33)
269
+ #define IS_PIN_PWM (p ) digitalPinHasPWM(p)
270
+ #define IS_PIN_SERVO (p ) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS) // deprecated since v2.4
271
+ #define IS_PIN_I2C (p ) ((p) == 11 || (p) == 12) // SDA = 11, SCL = 12
272
+ #define IS_PIN_SPI (p ) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
273
+ #define IS_PIN_SERIAL (p ) ((p) == PIN_SERIAL1_RX || (p) == PIN_SERIAL1_TX) //defined in variant.h RX = 13, TX = 14
274
+ #define PIN_TO_DIGITAL (p ) (p)
275
+ #define PIN_TO_ANALOG (p ) ((p) - 15)
276
+ #define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
277
+ #define PIN_TO_SERVO (p ) (p) // deprecated since v2.4
278
+
279
+
263
280
// Arduino Zero
264
281
// Note this will work with an Arduino Zero Pro, but not with an Arduino M0 Pro
265
282
// Arduino M0 Pro does not properly map pins to the board labeled pin numbers
@@ -282,8 +299,23 @@ writePort(port, value, bitmask): Write an 8 bit port.
282
299
#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
283
300
#define PIN_TO_SERVO (p ) (p) // deprecated since v2.4
284
301
302
+ // Arduino Primo
303
+ #elif defined(ARDUINO_PRIMO )
304
+ #define TOTAL_ANALOG_PINS 6
305
+ #define TOTAL_PINS 22 //14 digital + 6 analog + 2 i2c
306
+ #define VERSION_BLINK_PIN LED_BUILTIN
307
+ #define IS_PIN_DIGITAL (p ) ((p) >= 2 && (p) < 20)
308
+ #define IS_PIN_ANALOG (p ) ((p) >= 14 && (p) < 20)
309
+ #define IS_PIN_PWM (p ) digitalPinHasPWM(p)
310
+ #define IS_PIN_SERVO (p ) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS+2)
311
+ #define IS_PIN_I2C (p ) ((p) == PIN_WIRE_SDA || (p) == PIN_WIRE_SCL) // SDA = 20, SCL = 21
312
+ #define IS_PIN_SPI (p ) ((p) == SS || (p)== MOSI || (p) == MISO || (p == SCK)) // 10, 11, 12, 13
313
+ #define PIN_TO_DIGITAL (p ) (p)
314
+ #define PIN_TO_ANALOG (p ) ((p) - 14)
315
+ #define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
316
+ #define PIN_TO_SERVO (p ) (p)
285
317
286
- // Teensy 1.0
318
+ // Arduino 101
287
319
#elif defined(_VARIANT_ARDUINO_101_X_ )
288
320
#define TOTAL_ANALOG_PINS NUM_ANALOG_INPUTS
289
321
#define TOTAL_PINS NUM_DIGITAL_PINS // 15 digital (including ATN pin) + 6 analog
@@ -343,6 +375,36 @@ writePort(port, value, bitmask): Write an 8 bit port.
343
375
#define PIN_TO_SERVO (p ) (p)
344
376
345
377
378
+ // Teensy 3.5 and 3.6
379
+ // reference: https://github.com/PaulStoffregen/cores/blob/master/teensy3/pins_arduino.h
380
+ #elif defined(__MK64FX512__ ) || defined(__MK66FX1M0__ )
381
+ #define TOTAL_ANALOG_PINS 27 // 3.5 has 27 and 3.6 has 25
382
+ #define TOTAL_PINS 70 // 43 digital + 21 analog-digital + 6 analog (64-69)
383
+ #define VERSION_BLINK_PIN 13
384
+ #define PIN_SERIAL1_RX 0
385
+ #define PIN_SERIAL1_TX 1
386
+ #define PIN_SERIAL2_RX 9
387
+ #define PIN_SERIAL2_TX 10
388
+ #define PIN_SERIAL3_RX 7
389
+ #define PIN_SERIAL3_TX 8
390
+ // The following 2 UARTs are not yet available via SerialFirmata
391
+ #define PIN_SERIAL4_RX 31
392
+ #define PIN_SERIAL5_TX 32
393
+ #define PIN_SERIAL6_RX 34
394
+ #define PIN_SERIAL6_TX 33
395
+ #define IS_PIN_DIGITAL (p ) ((p) >= 0 && (p) <= 63)
396
+ #define IS_PIN_ANALOG (p ) (((p) >= 14 && (p) <= 23) || ((p) >= 31 && (p) <= 39) || ((p) >= 49 && (p) <= 50) || ((p) >= 64 && (p) <= 69))
397
+ #define IS_PIN_PWM (p ) digitalPinHasPWM(p)
398
+ #define IS_PIN_SERVO (p ) ((p) >= 0 && (p) < MAX_SERVOS)
399
+ #define IS_PIN_I2C (p ) ((p) == 18 || (p) == 19)
400
+ #define IS_PIN_SERIAL (p ) (((p) > 6 && (p) < 11) || ((p) == 0 || (p) == 1))
401
+ #define PIN_TO_DIGITAL (p ) (p)
402
+ // A0-A9 = D14-D23; A12-A20 = D31-D39; A23-A24 = D49-D50; A10-A11 = D64-D65; A21-A22 = D66-D67; A25-A26 = D68-D69
403
+ #define PIN_TO_ANALOG (p ) (((p) <= 23) ? (p) - 14 : (((p) <= 39) ? (p) - 19 : (((p) <= 50) ? (p) - 26 : (((p) <= 65) ? (p) - 55 : (((p) <= 67) ? (p) - 45 : (p) - 43)))))
404
+ #define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
405
+ #define PIN_TO_SERVO (p ) (p)
406
+
407
+
346
408
// Teensy 3.0, 3.1 and 3.2
347
409
#elif defined(__MK20DX128__ ) || defined(__MK20DX256__ )
348
410
#define TOTAL_ANALOG_PINS 14
@@ -449,6 +511,22 @@ writePort(port, value, bitmask): Write an 8 bit port.
449
511
#define PIN_TO_SERVO (p ) ((p) - 2)
450
512
451
513
514
+ // RedBearLab BLE Nano with factory switch settings (S1 - S10)
515
+ #elif defined(BLE_NANO )
516
+ #define TOTAL_ANALOG_PINS 6
517
+ #define TOTAL_PINS 15 // 9 digital + 3 analog
518
+ #define IS_PIN_DIGITAL (p ) ((p) >= 2 && (p) <= 14)
519
+ #define IS_PIN_ANALOG (p ) ((p) == 8 || (p) == 9 || (p) == 10 || (p) == 11 || (p) == 12 || (p) == 14) //A0~A5
520
+ #define IS_PIN_PWM (p ) ((p) == 3 || (p) == 5 || (p) == 6)
521
+ #define IS_PIN_SERVO (p ) ((p) >= 2 && (p) <= 7)
522
+ #define IS_PIN_I2C (p ) ((p) == SDA || (p) == SCL)
523
+ #define IS_PIN_SPI (p ) ((p) == CS || (p) == MOSI || (p) == MISO || (p) == SCK)
524
+ #define PIN_TO_DIGITAL (p ) (p)
525
+ #define PIN_TO_ANALOG (p ) ((p) - 8)
526
+ #define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
527
+ #define PIN_TO_SERVO (p ) (p)
528
+
529
+
452
530
// Sanguino
453
531
#elif defined(__AVR_ATmega644P__ ) || defined(__AVR_ATmega644__ )
454
532
#define TOTAL_ANALOG_PINS 8
@@ -665,29 +743,48 @@ writePort(port, value, bitmask): Write an 8 bit port.
665
743
#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
666
744
#define PIN_TO_SERVO (p ) ((p) - 2)
667
745
668
- // Nucleo STM32F429
669
- #elif defined(STM32 )
670
- #define TOTAL_ANALOG_PINS NUM_ANALOG_INPUTS //7
671
- #define TOTAL_PINS NUM_DIGITAL_PINS //22 : All pins can be digital
672
- #define TOTAL_PORTS 3
673
- #define VERSION_BLINK_PIN LED_BUILTIN
674
- #define PIN_SERIAL_RX 9
675
- #define PIN_SERIAL_TX 8
676
- #define PIN_SERIAL1_RX 0
677
- #define PIN_SERIAL1_TX 1
678
- #define PIN_SERIAL2_RX 8
679
- #define PIN_SERIAL2_TX 9
680
- #define IS_PIN_DIGITAL (p ) ((p) >= 2 && (p) < TOTAL_PINS)
681
- #define IS_PIN_ANALOG (p ) ((p) >= 16 && (p) < TOTAL_PINS)
682
- #define IS_PIN_PWM (p ) ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11)
683
- #define IS_PIN_SERVO (p ) IS_PIN_DIGITAL((p))
684
- #define IS_PIN_I2C (p ) ((p) == 14 || (p) == 15)
746
+ // ESP8266
747
+ // note: boot mode GPIOs 0, 2 and 15 can be used as outputs, GPIOs 6-11 are in use for flash IO
748
+ #elif defined(ESP8266 )
749
+ #define TOTAL_ANALOG_PINS NUM_ANALOG_INPUTS
750
+ #define TOTAL_PINS A0 + NUM_ANALOG_INPUTS
751
+ #define PIN_SERIAL_RX 3
752
+ #define PIN_SERIAL_TX 1
753
+ #define IS_PIN_DIGITAL (p ) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) < A0))
754
+ #define IS_PIN_ANALOG (p ) ((p) >= A0 && (p) < A0 + NUM_ANALOG_INPUTS)
755
+ #define IS_PIN_PWM (p ) digitalPinHasPWM(p)
756
+ #define IS_PIN_SERVO (p ) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS)
757
+ #define IS_PIN_I2C (p ) ((p) == SDA || (p) == SCL)
685
758
#define IS_PIN_SPI (p ) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
686
- #define IS_PIN_SERIAL (p ) ((p) == 0 || (p) == 1)
759
+ #define IS_PIN_INTERRUPT (p ) (digitalPinToInterrupt(p) > NOT_AN_INTERRUPT)
760
+ #define IS_PIN_SERIAL (p ) ((p) == PIN_SERIAL_RX || (p) == PIN_SERIAL_TX)
687
761
#define PIN_TO_DIGITAL (p ) (p)
688
- #define PIN_TO_ANALOG (p ) ((p) - 16)
762
+ #define PIN_TO_ANALOG (p ) ((p) - A0)
763
+ #define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
764
+ #define PIN_TO_SERVO (p ) (p)
765
+ #define DEFAULT_PWM_RESOLUTION 10
766
+
767
+ // STM32 based boards
768
+ #elif defined(ARDUINO_ARCH_STM32 )
769
+ #define TOTAL_ANALOG_PINS NUM_ANALOG_INPUTS
770
+ #define TOTAL_PINS NUM_DIGITAL_PINS
771
+ #define TOTAL_PORTS MAX_NB_PORT
772
+ #define VERSION_BLINK_PIN LED_BUILTIN
773
+ // PIN_SERIALY_RX/TX defined in the variant.h
774
+ #define IS_PIN_DIGITAL (p ) ((p != PIN_SERIAL_RX) && (p != PIN_SERIAL_TX) &&\
775
+ (p >= 0) && (p < TOTAL_PINS))
776
+ #define IS_PIN_ANALOG (p ) ((p) >= A0 && (p) < AEND)
777
+ #define IS_PIN_PWM (p ) digitalPinHasPWM(p)
778
+ #define IS_PIN_SERVO (p ) IS_PIN_DIGITAL(p)
779
+ #define IS_PIN_I2C (p ) digitalPinHasI2C(p)
780
+ #define IS_PIN_SPI (p ) digitalPinHasSPI(p)
781
+ #define IS_PIN_INTERRUPT (p ) (digitalPinToInterrupt(p) > NOT_AN_INTERRUPT)
782
+ #define IS_PIN_SERIAL (p ) digitalPinHasSerial(p)
783
+ #define PIN_TO_DIGITAL (p ) (p)
784
+ #define PIN_TO_ANALOG (p ) (p-A0)
689
785
#define PIN_TO_PWM (p ) (p)
690
786
#define PIN_TO_SERVO (p ) (p)
787
+ #define DEFAULT_PWM_RESOLUTION PWM_RESOLUTION
691
788
692
789
// anything else
693
790
#else
@@ -703,6 +800,9 @@ writePort(port, value, bitmask): Write an 8 bit port.
703
800
#define IS_PIN_SERIAL (p ) 0
704
801
#endif
705
802
803
+ #ifndef DEFAULT_PWM_RESOLUTION
804
+ #define DEFAULT_PWM_RESOLUTION 8
805
+ #endif
706
806
707
807
/*==============================================================================
708
808
* readPort() - Read an 8 bit port
0 commit comments