denko 0.13.1 → 0.13.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (204) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build_avr.yml +2 -4
  3. data/.github/workflows/build_esp32.yml +2 -3
  4. data/.github/workflows/build_esp8266.yml +2 -3
  5. data/.github/workflows/build_megaavr.yml +2 -4
  6. data/.github/workflows/build_ra4m1.yml +57 -0
  7. data/.github/workflows/build_rp2040.yml +2 -4
  8. data/.github/workflows/build_sam3x.yml +1 -3
  9. data/.github/workflows/build_samd.yml +2 -4
  10. data/CHANGELOG.md +60 -0
  11. data/DEPS_CLI.md +8 -6
  12. data/DEPS_IDE.md +9 -7
  13. data/HARDWARE.md +90 -74
  14. data/README.md +19 -28
  15. data/benchmarks/i2c_ssd1306_refresh.rb +74 -0
  16. data/examples/analog_io/ads1115.rb +57 -0
  17. data/examples/analog_io/ads1118.rb +8 -9
  18. data/examples/analog_io/dac_loopback.rb +6 -4
  19. data/examples/analog_io/input.rb +39 -36
  20. data/examples/connection/tcp.rb +1 -1
  21. data/examples/display/hd44780.rb +3 -3
  22. data/examples/display/ssd1306.rb +1 -1
  23. data/examples/pulse_io/buzzer.rb +40 -0
  24. data/lib/denko/analog_io/ads1115.rb +61 -0
  25. data/lib/denko/analog_io/ads1118.rb +10 -120
  26. data/lib/denko/analog_io/ads111x.rb +123 -0
  27. data/lib/denko/analog_io/output.rb +2 -1
  28. data/lib/denko/analog_io.rb +2 -0
  29. data/lib/denko/behaviors/reader.rb +14 -13
  30. data/lib/denko/behaviors/subcomponents.rb +2 -2
  31. data/lib/denko/board/core.rb +1 -1
  32. data/lib/denko/board/i2c.rb +1 -4
  33. data/lib/denko/board/map.rb +9 -0
  34. data/lib/denko/board/servo.rb +2 -6
  35. data/lib/denko/board.rb +32 -20
  36. data/lib/denko/connection/board_uart.rb +3 -3
  37. data/lib/denko/connection/flow_control.rb +10 -2
  38. data/lib/denko/digital_io/output.rb +1 -1
  39. data/lib/denko/display/hd44780.rb +18 -18
  40. data/lib/denko/led/seven_segment.rb +18 -19
  41. data/lib/denko/message.rb +6 -14
  42. data/lib/denko/pulse_io/ir_transmitter.rb +1 -2
  43. data/lib/denko/version.rb +1 -1
  44. data/lib/denko_cli/packages.rb +7 -1
  45. data/lib/denko_cli/targets.rb +8 -5
  46. data/lib/denko_cli/usage.txt +8 -4
  47. data/src/denko_ethernet.ino +15 -23
  48. data/src/denko_serial.ino +3 -14
  49. data/src/denko_wifi.ino +35 -50
  50. data/src/lib/Denko.cpp +23 -6
  51. data/src/lib/Denko.h +6 -16
  52. data/src/lib/DenkoCoreIO.cpp +3 -3
  53. data/src/lib/DenkoDefines.h +62 -16
  54. data/src/lib/DenkoEEPROM.cpp +9 -1
  55. data/src/lib/DenkoI2C.cpp +11 -9
  56. data/src/lib/DenkoLEDArray.cpp +1 -1
  57. data/target.yml +35 -1
  58. data/test/behaviors/reader_test.rb +8 -1
  59. data/test/board/helper_test.rb +0 -4
  60. data/test/display/hd44780_test.rb +10 -0
  61. data/test/led/seven_segment_test.rb +30 -8
  62. data/test/test_helper.rb +17 -2
  63. data/vendor/board-maps/.gitmodules +3 -0
  64. data/vendor/board-maps/BoardMap.h +40 -12
  65. data/vendor/board-maps/README.md +1 -0
  66. data/vendor/board-maps/lib/header_parser.rb +30 -5
  67. data/vendor/board-maps/run.rb +11 -1
  68. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +6 -1
  69. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +6 -1
  70. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +5 -1
  71. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +20 -0
  72. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +2 -1
  73. data/vendor/board-maps/yaml/ARTRONSHOP_RP2_NANO.yml +32 -0
  74. data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +1 -1
  75. data/vendor/board-maps/yaml/AVR_ESPLORA.yml +1 -1
  76. data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +1 -1
  77. data/vendor/board-maps/yaml/AVR_LEONARDO.yml +1 -1
  78. data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +1 -1
  79. data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +1 -1
  80. data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +1 -1
  81. data/vendor/board-maps/yaml/AVR_MICRO.yml +1 -1
  82. data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +1 -1
  83. data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +1 -1
  84. data/vendor/board-maps/yaml/AVR_YUN.yml +1 -1
  85. data/vendor/board-maps/yaml/AVR_YUNMINI.yml +1 -1
  86. data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +11 -1
  87. data/vendor/board-maps/yaml/BeeMotionS3.yml +6 -1
  88. data/vendor/board-maps/yaml/Bee_Motion.yml +3 -0
  89. data/vendor/board-maps/yaml/Bee_S3.yml +1 -1
  90. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI6_BLE_RP2040.yml +42 -0
  91. data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +4 -1
  92. data/vendor/board-maps/yaml/CoreESP32.yml +5 -1
  93. data/vendor/board-maps/yaml/D1_MINI32.yml +10 -1
  94. data/vendor/board-maps/yaml/DENKY.yml +10 -1
  95. data/vendor/board-maps/yaml/DENKY_PICOV3.yml +10 -1
  96. data/vendor/board-maps/yaml/DENKY_WROOM32.yml +10 -1
  97. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +6 -1
  98. data/vendor/board-maps/yaml/DPU_ESP32.yml +10 -1
  99. data/vendor/board-maps/yaml/D_Duino_32.yml +9 -1
  100. data/vendor/board-maps/yaml/ESP32S2_DEV.yml +11 -1
  101. data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +11 -1
  102. data/vendor/board-maps/yaml/ESP32S2_USB.yml +11 -1
  103. data/vendor/board-maps/yaml/ESP32_DEV.yml +10 -1
  104. data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +10 -1
  105. data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +10 -1
  106. data/vendor/board-maps/yaml/ESP32_PICO.yml +10 -1
  107. data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +4 -1
  108. data/vendor/board-maps/yaml/ESP32_THING.yml +10 -1
  109. data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +4 -1
  110. data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +4 -1
  111. data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +10 -1
  112. data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +10 -1
  113. data/vendor/board-maps/yaml/ESPECTRO32.yml +10 -1
  114. data/vendor/board-maps/yaml/ESPea32.yml +10 -1
  115. data/vendor/board-maps/yaml/ESPino32.yml +10 -1
  116. data/vendor/board-maps/yaml/FEATHERS2.yml +11 -1
  117. data/vendor/board-maps/yaml/FEATHERS2NEO.yml +2 -1
  118. data/vendor/board-maps/yaml/FEATHERS3.yml +3 -0
  119. data/vendor/board-maps/yaml/FEATHER_ESP32.yml +5 -1
  120. data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +11 -1
  121. data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +11 -1
  122. data/vendor/board-maps/yaml/FROG_ESP32.yml +10 -1
  123. data/vendor/board-maps/yaml/HEALTHYPI_4.yml +10 -1
  124. data/vendor/board-maps/yaml/HONEYLEMON.yml +10 -1
  125. data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +10 -1
  126. data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +4 -1
  127. data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +5 -1
  128. data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +7 -1
  129. data/vendor/board-maps/yaml/LOLIN32.yml +10 -1
  130. data/vendor/board-maps/yaml/LOLIN32_LITE.yml +10 -1
  131. data/vendor/board-maps/yaml/LOLIN_D32.yml +10 -1
  132. data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +10 -1
  133. data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +11 -1
  134. data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +11 -1
  135. data/vendor/board-maps/yaml/LOLIN_S3.yml +9 -1
  136. data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +9 -1
  137. data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +9 -1
  138. data/vendor/board-maps/yaml/LoPy.yml +11 -1
  139. data/vendor/board-maps/yaml/LoPy4.yml +11 -1
  140. data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +11 -1
  141. data/vendor/board-maps/yaml/METRO_ESP32S2.yml +11 -1
  142. data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +10 -1
  143. data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +10 -1
  144. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +10 -1
  145. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +10 -1
  146. data/vendor/board-maps/yaml/MICROS2.yml +11 -1
  147. data/vendor/board-maps/yaml/MINIMA.yml +15 -0
  148. data/vendor/board-maps/yaml/NANO32.yml +10 -1
  149. data/vendor/board-maps/yaml/Node32s.yml +10 -1
  150. data/vendor/board-maps/yaml/NodeMCU_32S.yml +10 -1
  151. data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +11 -1
  152. data/vendor/board-maps/yaml/PIMORONI_PLASMA2040.yml +29 -0
  153. data/vendor/board-maps/yaml/PORTENTA_C33.yml +28 -0
  154. data/vendor/board-maps/yaml/PROS3.yml +6 -1
  155. data/vendor/board-maps/yaml/PYCOM_GPY.yml +11 -1
  156. data/vendor/board-maps/yaml/Piranha.yml +7 -1
  157. data/vendor/board-maps/yaml/Pocket32.yml +10 -1
  158. data/vendor/board-maps/yaml/QUANTUM.yml +10 -1
  159. data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +11 -1
  160. data/vendor/board-maps/yaml/RMP.yml +11 -1
  161. data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +0 -1
  162. data/vendor/board-maps/yaml/SAM_DUE.yml +3 -1
  163. data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +10 -1
  164. data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +11 -1
  165. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +6 -1
  166. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +6 -1
  167. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +6 -1
  168. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +6 -1
  169. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +6 -1
  170. data/vendor/board-maps/yaml/TBeam.yml +6 -1
  171. data/vendor/board-maps/yaml/TINYPICO.yml +10 -1
  172. data/vendor/board-maps/yaml/TINYS2.yml +11 -1
  173. data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +11 -1
  174. data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +11 -1
  175. data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +11 -1
  176. data/vendor/board-maps/yaml/TTGO_T1.yml +10 -1
  177. data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +10 -1
  178. data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +10 -1
  179. data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +0 -1
  180. data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +0 -1
  181. data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +0 -1
  182. data/vendor/board-maps/yaml/TWATCH_BASE.yml +0 -1
  183. data/vendor/board-maps/yaml/TWatch.yml +0 -1
  184. data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +10 -1
  185. data/vendor/board-maps/yaml/UNOWIFIR4.yml +17 -0
  186. data/vendor/board-maps/yaml/WIPY3.yml +11 -1
  187. data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +2 -1
  188. data/vendor/board-maps/yaml/connaxio_espoir.yml +7 -1
  189. data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +10 -1
  190. data/vendor/board-maps/yaml/heltec_wifi_32_lora_V3.yml +11 -1
  191. data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +11 -1
  192. data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +11 -1
  193. data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +10 -1
  194. data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +10 -1
  195. data/vendor/board-maps/yaml/heltec_wireless_stick.yml +10 -1
  196. data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +10 -1
  197. data/vendor/board-maps/yaml/openkb.yml +11 -1
  198. data/vendor/board-maps/yaml/roboheart_hercules.yml +10 -1
  199. data/vendor/board-maps/yaml/sensesiot_weizen.yml +10 -1
  200. data/vendor/board-maps/yaml/uPesy_WROOM.yml +10 -1
  201. data/vendor/board-maps/yaml/uPesy_WROVER.yml +10 -1
  202. data/vendor/board-maps/yaml/unphone8.yml +11 -1
  203. data/vendor/board-maps/yaml/unphone9.yml +11 -1
  204. metadata +14 -2
@@ -27,6 +27,9 @@ class HeaderParser
27
27
  file.each_line do |line|
28
28
  # Reject comments.
29
29
  next if line.match /\A\/\//
30
+
31
+ # Reject anything to do with QSPI.
32
+ next if line.match /QSPI/
30
33
 
31
34
  # Reject lines that end with pin-style identifiers, instead of numbers.
32
35
  next if line.match /(PIN_)*(A|D|DAC|T)(\d+)\s*;*\s*\z/
@@ -41,22 +44,43 @@ class HeaderParser
41
44
 
42
45
  # Match RP2040 analog overrides and store them with prefixed keys like :_A0
43
46
  # Will substitute them later in #clean_map
44
- rp2040_analog = line.match /__PIN(_A\d+)\s*\(?(\d+)\w*\)?/
47
+ rp2040_analog = line.match /__PIN(_A\d+)\s+\(?(\d+)\w*\)?/
45
48
  if rp2040_analog
46
49
  @map[rp2040_analog[1].to_sym] = rp2040_analog[2].to_i
47
50
  next
48
51
  end
49
52
 
50
53
  #
51
- # Match analog input and DAC pins declared like:
54
+ # Match analog input pins declared like:
52
55
  # #define PIN_A0 (14ul)
53
- # #define PIN_DAC0 (14)
54
56
  # #define PIN_A0 14
55
57
  # #define A0 14
56
58
  #
57
- pin = line.match /(PIN_)*((A|DAC)\d+)\s*\(?(\d+)\w*\)?/
59
+ pin = line.match /(PIN_)*(A\d+)\s+\(?(\d+)\w*\)?/
58
60
  if pin
59
- @map[pin[2].to_sym] = pin[4].to_i
61
+ @map[pin[2].to_sym] = pin[3].to_i
62
+ next
63
+ end
64
+
65
+ #
66
+ # Strict matcher for DAC pins in Arduino SAMD core:
67
+ # #define DAC A0
68
+ # #define DAC1 14
69
+ #
70
+ pin = line.match /(PIN_)(DAC\d+)\s+\(?(\d+)\w*\)?/
71
+ if pin
72
+ @map[pin[2].to_sym] = pin[3].to_i
73
+ next
74
+ end
75
+
76
+ #
77
+ # Match I2C/SPI pins declared like: (first seen in UNO R4)
78
+ # #define WIRE_SDA_PIN 20
79
+ # #define WIRE_SCL1_PIN 20
80
+ #
81
+ pin = line.match /(WIRE(\d*)_(SCL_|SDA_)PIN)\s*\(?(\d+)\w*\)?/
82
+ if pin
83
+ @map[pin[1].gsub("_PIN", "").to_sym] = pin[4].to_i
60
84
  next
61
85
  end
62
86
 
@@ -73,6 +97,7 @@ class HeaderParser
73
97
  next
74
98
  end
75
99
 
100
+ # This mostly affectes SAM3X, ESP32 and ESP8266.
76
101
  #
77
102
  # Match custom labeled D* pins (eg. ESP8266) declared like:
78
103
  # static const uint D4 = (2)
@@ -1,7 +1,7 @@
1
1
  require_relative "lib/boards_parser"
2
2
  require_relative "lib/header_parser"
3
3
 
4
- CORES = ["avr", "esp32", "esp8266", "megaavr", "rp2040", "sam3x", "samd"]
4
+ CORES = ["avr", "esp32", "esp8266", "megaavr", "rp2040", "sam3x", "samd", "ra4m1"]
5
5
 
6
6
  # This will end up containing a map for each board identified. Each key
7
7
  # is a board's identifier and the value is its pin map as a hash.
@@ -15,11 +15,21 @@ CORES.each do |core|
15
15
 
16
16
  # For each board, parse its header and add it to the hash of maps.
17
17
  board_headers.each do |board, header_folder|
18
+ # No idea what this is, but doesn't seem to be a real board.
19
+ next if board.match /muxto/i
20
+
18
21
  parser = HeaderParser.new(header_folder)
19
22
  board_maps[board] = parser.map
20
23
  end
21
24
  end
22
25
 
26
+ # Manually set DAC pins for Arduino branded RA4M1 boards.
27
+ # Should handle with different matchers for each core, but this works for now.
28
+ board_maps["ARDUINO_MINIMA"][:DAC] = 14
29
+ board_maps["ARDUINO_UNOWIFIR4"][:DAC] = 14
30
+ board_maps["ARDUINO_PORTENTA_C33"][:DAC] = 21
31
+ board_maps["ARDUINO_PORTENTA_C33"][:DAC1] = 20
32
+
23
33
  # Remove chars from board identifier that won't work in a filename.
24
34
  def board_to_filename(board_identifier)
25
35
  board_identifier.gsub(":", "_").gsub(",", "_").gsub(/\AARDUINO_/, "")
@@ -7,7 +7,7 @@
7
7
  :SCK: 36
8
8
  :MISO: 37
9
9
  :A0: 18
10
- :A1: 4
10
+ :A1: 17
11
11
  :A2: 16
12
12
  :A3: 15
13
13
  :A4: 14
@@ -16,6 +16,11 @@
16
16
  :A7: 4
17
17
  :A8: 5
18
18
  :A9: 6
19
+ :A10: 9
20
+ :A11: 10
21
+ :A12: 11
22
+ :A13: 12
23
+ :A14: 13
19
24
  :T3: 3
20
25
  :T4: 4
21
26
  :T5: 5
@@ -7,7 +7,7 @@
7
7
  :SCK: 36
8
8
  :MISO: 37
9
9
  :A0: 18
10
- :A1: 4
10
+ :A1: 17
11
11
  :A2: 16
12
12
  :A3: 15
13
13
  :A4: 14
@@ -16,6 +16,11 @@
16
16
  :A7: 4
17
17
  :A8: 5
18
18
  :A9: 6
19
+ :A10: 9
20
+ :A11: 10
21
+ :A12: 11
22
+ :A13: 12
23
+ :A14: 13
19
24
  :T3: 3
20
25
  :T4: 4
21
26
  :T5: 5
@@ -7,7 +7,7 @@
7
7
  :MISO: 21
8
8
  :SCK: 5
9
9
  :A0: 26
10
- :A1: 3
10
+ :A1: 25
11
11
  :A2: 34
12
12
  :A3: 39
13
13
  :A4: 36
@@ -16,6 +16,10 @@
16
16
  :A7: 32
17
17
  :A8: 15
18
18
  :A9: 33
19
+ :A10: 27
20
+ :A11: 12
21
+ :A12: 13
22
+ :A13: 35
19
23
  :T0: 4
20
24
  :T1: 0
21
25
  :T2: 2
@@ -0,0 +1,20 @@
1
+ ---
2
+ :SDA: 7
3
+ :SCL: 6
4
+ :A1: 17
5
+ :SS: 42
6
+ :MOSI: 35
7
+ :SCK: 36
8
+ :MISO: 37
9
+ :A0: 18
10
+ :A2: 9
11
+ :A3: 8
12
+ :A4: 7
13
+ :A5: 6
14
+ :A6: 5
15
+ :A7: 16
16
+ :T5: 5
17
+ :T6: 6
18
+ :T7: 7
19
+ :T8: 8
20
+ :T9: 9
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :SDA: 4
3
3
  :SCL: 33
4
- :A1: 0
4
+ :A1: 25
5
5
  :SS: 27
6
6
  :MOSI: 13
7
7
  :MISO: 12
@@ -15,6 +15,7 @@
15
15
  :A7: 7
16
16
  :A8: 14
17
17
  :A9: 12
18
+ :A10: 13
18
19
  :T0: 4
19
20
  :T3: 15
20
21
  :T4: 13
@@ -0,0 +1,32 @@
1
+ ---
2
+ :LED_BUILTIN: 13
3
+ :D0: 0
4
+ :D1: 1
5
+ :D2: 2
6
+ :D3: 3
7
+ :D4: 4
8
+ :D5: 5
9
+ :D6: 6
10
+ :D7: 7
11
+ :D8: 8
12
+ :D9: 9
13
+ :D10: 10
14
+ :D11: 11
15
+ :D12: 12
16
+ :D13: 13
17
+ :A0: 26
18
+ :A1: 27
19
+ :A2: 28
20
+ :A3: 29
21
+ :MISO0: 4
22
+ :MOSI0: 3
23
+ :SCK0: 2
24
+ :SS0: 5
25
+ :MISO1: 12
26
+ :MOSI1: 11
27
+ :SCK1: 10
28
+ :SS1: 13
29
+ :SDA0: 16
30
+ :SCL0: 17
31
+ :SDA1: 18
32
+ :SCL1: 19
@@ -7,7 +7,7 @@
7
7
  :MISO: 14
8
8
  :SCK: 15
9
9
  :A0: 18
10
- :A1: 1
10
+ :A1: 19
11
11
  :A2: 20
12
12
  :A3: 21
13
13
  :A4: 22
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :LED_BUILTIN: 13
3
3
  :A0: 18
4
- :A1: 1
4
+ :A1: 19
5
5
  :A2: 20
6
6
  :A3: 21
7
7
  :A4: 22
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :LED_BUILTIN: 13
3
3
  :A0: 18
4
- :A1: 1
4
+ :A1: 19
5
5
  :A2: 20
6
6
  :A3: 21
7
7
  :A4: 22
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :LED_BUILTIN: 13
3
3
  :A0: 18
4
- :A1: 1
4
+ :A1: 19
5
5
  :A2: 20
6
6
  :A3: 21
7
7
  :A4: 22
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :LED_BUILTIN: 13
3
3
  :A0: 18
4
- :A1: 1
4
+ :A1: 19
5
5
  :A2: 20
6
6
  :A3: 21
7
7
  :A4: 22
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :LED_BUILTIN: 13
3
3
  :A0: 18
4
- :A1: 1
4
+ :A1: 19
5
5
  :A2: 20
6
6
  :A3: 21
7
7
  :A4: 22
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :LED_BUILTIN: 13
3
3
  :A0: 18
4
- :A1: 1
4
+ :A1: 19
5
5
  :A2: 20
6
6
  :A3: 21
7
7
  :A4: 22
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :LED_BUILTIN: 13
3
3
  :A0: 18
4
- :A1: 1
4
+ :A1: 19
5
5
  :A2: 20
6
6
  :A3: 21
7
7
  :A4: 22
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  :A0: 18
3
- :A1: 1
3
+ :A1: 19
4
4
  :A2: 20
5
5
  :A3: 21
6
6
  :A4: 22
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  :A0: 18
3
- :A1: 1
3
+ :A1: 19
4
4
  :A2: 20
5
5
  :A3: 21
6
6
  :A4: 22
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :LED_BUILTIN: 13
3
3
  :A0: 18
4
- :A1: 1
4
+ :A1: 19
5
5
  :A2: 20
6
6
  :A3: 21
7
7
  :A4: 22
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :LED_BUILTIN: 13
3
3
  :A0: 18
4
- :A1: 1
4
+ :A1: 19
5
5
  :A2: 20
6
6
  :A3: 21
7
7
  :A4: 22
@@ -6,7 +6,7 @@
6
6
  :MISO: 13
7
7
  :SCK: 12
8
8
  :A0: 1
9
- :A1: 9
9
+ :A1: 2
10
10
  :A2: 3
11
11
  :A3: 4
12
12
  :A4: 5
@@ -15,6 +15,16 @@
15
15
  :A7: 8
16
16
  :A8: 9
17
17
  :A9: 10
18
+ :A10: 11
19
+ :A11: 12
20
+ :A12: 13
21
+ :A13: 14
22
+ :A14: 15
23
+ :A15: 16
24
+ :A16: 17
25
+ :A17: 18
26
+ :A18: 19
27
+ :A19: 20
18
28
  :T1: 1
19
29
  :T2: 2
20
30
  :T3: 3
@@ -10,7 +10,12 @@
10
10
  :A7: 7
11
11
  :A8: 8
12
12
  :A9: 9
13
- :A1: 5
13
+ :A10: 10
14
+ :A11: 11
15
+ :A12: 12
16
+ :A13: 13
17
+ :A14: 14
18
+ :A15: 15
14
19
  :D5: 5
15
20
  :D6: 6
16
21
  :D7: 7
@@ -14,6 +14,9 @@
14
14
  :A7: 8
15
15
  :A8: 9
16
16
  :A9: 10
17
+ :A10: 11
18
+ :A11: 12
19
+ :A12: 13
17
20
  :T1: 1
18
21
  :T3: 3
19
22
  :T5: 5
@@ -12,7 +12,7 @@
12
12
  :A7: 7
13
13
  :A8: 8
14
14
  :A9: 9
15
- :A1: 0
15
+ :A10: 10
16
16
  :D3: 3
17
17
  :D4: 4
18
18
  :D5: 5
@@ -0,0 +1,42 @@
1
+ ---
2
+ :LED_BUILTIN: 10
3
+ :D0: 16
4
+ :D1: 17
5
+ :D2: 20
6
+ :D3: 23
7
+ :D4: 22
8
+ :D5: 2
9
+ :D6: 3
10
+ :D7: 0
11
+ :D8: 1
12
+ :D9: 6
13
+ :D10: 7
14
+ :D11: 8
15
+ :D12: 9
16
+ :D13: 10
17
+ :D14: 11
18
+ :D15: 12
19
+ :D16: 13
20
+ :D17: 14
21
+ :D18: 15
22
+ :D19: 18
23
+ :D20: 19
24
+ :D21: 24
25
+ :A0: 26
26
+ :A1: 27
27
+ :A2: 28
28
+ :A3: 29
29
+ :A4: 25
30
+ :A5: 21
31
+ :MISO0: 24
32
+ :MOSI0: 23
33
+ :SCK0: 22
34
+ :SS0: 21
35
+ :MISO1: 12
36
+ :MOSI1: 15
37
+ :SCK1: 14
38
+ :SS1: 13
39
+ :SDA0: 0
40
+ :SCL0: 1
41
+ :SDA1: 31
42
+ :SCL1: 31
@@ -7,7 +7,7 @@
7
7
  :SCK: 17
8
8
  :MISO: 18
9
9
  :A0: 10
10
- :A1: 2
10
+ :A1: 9
11
11
  :A2: 6
12
12
  :A3: 5
13
13
  :A4: 4
@@ -16,6 +16,9 @@
16
16
  :A7: 8
17
17
  :A8: 18
18
18
  :A9: 16
19
+ :A10: 15
20
+ :A11: 14
21
+ :A12: 13
19
22
  :T4: 4
20
23
  :T5: 5
21
24
  :T6: 6
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  :SDA: 22
3
3
  :SCL: 21
4
- :A1: 3
4
+ :A1: 13
5
5
  :SS: 5
6
6
  :MOSI: 23
7
7
  :MISO: 19
@@ -13,6 +13,10 @@
13
13
  :A7: 37
14
14
  :A8: 32
15
15
  :A9: 33
16
+ :A10: 25
17
+ :A11: 26
18
+ :A12: 27
19
+ :A13: 14
16
20
  :D0: 3
17
21
  :D1: 1
18
22
  :D2: 16
@@ -11,7 +11,16 @@
11
11
  :A5: 33
12
12
  :A6: 34
13
13
  :A7: 35
14
- :A1: 9
14
+ :A10: 4
15
+ :A11: 0
16
+ :A12: 2
17
+ :A13: 15
18
+ :A14: 13
19
+ :A15: 12
20
+ :A16: 14
21
+ :A17: 27
22
+ :A18: 25
23
+ :A19: 26
15
24
  :T0: 4
16
25
  :T1: 0
17
26
  :T2: 2
@@ -11,7 +11,16 @@
11
11
  :A5: 33
12
12
  :A6: 34
13
13
  :A7: 35
14
- :A1: 9
14
+ :A10: 4
15
+ :A11: 0
16
+ :A12: 2
17
+ :A13: 15
18
+ :A14: 13
19
+ :A15: 12
20
+ :A16: 14
21
+ :A17: 27
22
+ :A18: 25
23
+ :A19: 26
15
24
  :T0: 4
16
25
  :T1: 0
17
26
  :T2: 2
@@ -11,7 +11,16 @@
11
11
  :A5: 33
12
12
  :A6: 34
13
13
  :A7: 35
14
- :A1: 9
14
+ :A10: 4
15
+ :A11: 0
16
+ :A12: 2
17
+ :A13: 15
18
+ :A14: 13
19
+ :A15: 12
20
+ :A16: 14
21
+ :A17: 27
22
+ :A18: 25
23
+ :A19: 26
15
24
  :T0: 4
16
25
  :T1: 0
17
26
  :T2: 2
@@ -11,7 +11,16 @@
11
11
  :A5: 33
12
12
  :A6: 34
13
13
  :A7: 35
14
- :A1: 9
14
+ :A10: 4
15
+ :A11: 0
16
+ :A12: 2
17
+ :A13: 15
18
+ :A14: 13
19
+ :A15: 12
20
+ :A16: 14
21
+ :A17: 27
22
+ :A18: 25
23
+ :A19: 26
15
24
  :T0: 4
16
25
  :T1: 0
17
26
  :T2: 2
@@ -21,7 +21,7 @@
21
21
  :D12: 4
22
22
  :D13: 12
23
23
  :A0: 36
24
- :A1: 4
24
+ :A1: 39
25
25
  :A2: 34
26
26
  :A3: 35
27
27
  :A4: 15
@@ -30,6 +30,11 @@
30
30
  :A7: 0
31
31
  :A8: 2
32
32
  :A9: 13
33
+ :A10: 12
34
+ :A11: 14
35
+ :A12: 27
36
+ :A13: 25
37
+ :A14: 26
33
38
  :T0: 4
34
39
  :T1: 0
35
40
  :T2: 2
@@ -5,7 +5,16 @@
5
5
  :A5: 33
6
6
  :A6: 34
7
7
  :A7: 35
8
- :A1: 9
8
+ :A10: 4
9
+ :A11: 0
10
+ :A12: 2
11
+ :A13: 15
12
+ :A14: 13
13
+ :A15: 12
14
+ :A16: 14
15
+ :A17: 27
16
+ :A18: 25
17
+ :A19: 26
9
18
  :T0: 4
10
19
  :T1: 0
11
20
  :T2: 2
@@ -7,7 +7,15 @@
7
7
  :SCK: 14
8
8
  :A0: 36
9
9
  :A3: 39
10
- :A1: 9
10
+ :A10: 4
11
+ :A11: 0
12
+ :A12: 2
13
+ :A13: 15
14
+ :A14: 13
15
+ :A15: 12
16
+ :A16: 14
17
+ :A18: 25
18
+ :A19: 26
11
19
  :T0: 4
12
20
  :T1: 0
13
21
  :T2: 2
@@ -6,7 +6,7 @@
6
6
  :MISO: 37
7
7
  :SCK: 36
8
8
  :A0: 1
9
- :A1: 9
9
+ :A1: 2
10
10
  :A2: 3
11
11
  :A3: 4
12
12
  :A4: 5
@@ -15,6 +15,16 @@
15
15
  :A7: 8
16
16
  :A8: 9
17
17
  :A9: 10
18
+ :A10: 11
19
+ :A11: 12
20
+ :A12: 13
21
+ :A13: 14
22
+ :A14: 15
23
+ :A15: 16
24
+ :A16: 17
25
+ :A17: 18
26
+ :A18: 19
27
+ :A19: 20
18
28
  :T1: 1
19
29
  :T2: 2
20
30
  :T3: 3
@@ -7,7 +7,7 @@
7
7
  :MISO: 37
8
8
  :SCK: 36
9
9
  :A0: 17
10
- :A1: 9
10
+ :A1: 18
11
11
  :A2: 14
12
12
  :A3: 9
13
13
  :A4: 7
@@ -16,6 +16,16 @@
16
16
  :A7: 8
17
17
  :A8: 9
18
18
  :A9: 10
19
+ :A10: 11
20
+ :A11: 12
21
+ :A12: 13
22
+ :A13: 14
23
+ :A14: 15
24
+ :A15: 16
25
+ :A16: 17
26
+ :A17: 18
27
+ :A18: 19
28
+ :A19: 20
19
29
  :T1: 1
20
30
  :T2: 2
21
31
  :T3: 3