denko 0.13.6 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/{build_avr.yml → build_atmega_avr.yml} +18 -18
- data/.github/workflows/{build_megaavr.yml → build_atmega_megaavr.yml} +18 -18
- data/.github/workflows/{build_sam3x.yml → build_atsam3x.yml} +17 -17
- data/.github/workflows/{build_samd.yml → build_atsamd21.yml} +18 -18
- data/.github/workflows/build_esp32.yml +17 -18
- data/.github/workflows/build_esp32c3.yml +57 -0
- data/.github/workflows/build_esp32c6.yml +57 -0
- data/.github/workflows/build_esp32h2.yml +56 -0
- data/.github/workflows/build_esp32s2.yml +57 -0
- data/.github/workflows/build_esp32s3.yml +57 -0
- data/.github/workflows/build_esp8266.yml +15 -15
- data/.github/workflows/build_ra4m1.yml +16 -16
- data/.github/workflows/build_rp2040.yml +17 -16
- data/.github/workflows/ruby.yml +20 -20
- data/CHANGELOG.md +195 -11
- data/DEPS_CLI.md +9 -9
- data/DEPS_IDE.md +17 -18
- data/HARDWARE.md +50 -51
- data/README.md +61 -53
- data/Rakefile +1 -1
- data/benchmarks/analog_listen.rb +49 -0
- data/benchmarks/digital_write.rb +28 -0
- data/benchmarks/i2c_ssd1306_refresh.rb +13 -6
- data/build +1 -1
- data/denko.gemspec +5 -2
- data/examples/advanced/{m5_env.rb → m5_env3.rb} +12 -14
- data/examples/advanced/rotary_encoder_mac_volume.rb +18 -13
- data/examples/advanced/ssd1306_time_temp_rh.rb +8 -13
- data/examples/analog_io/ads1100.rb +48 -0
- data/examples/analog_io/ads1115.rb +2 -2
- data/examples/analog_io/ads1118.rb +3 -11
- data/examples/analog_io/input.rb +17 -16
- data/examples/analog_io/input_smoothing.rb +27 -0
- data/examples/analog_io/potentiometer.rb +31 -0
- data/examples/connection/binary_echo.rb +34 -0
- data/examples/connection/tcp.rb +12 -27
- data/examples/digital_io/button.rb +7 -3
- data/examples/digital_io/relay.rb +17 -0
- data/examples/digital_io/rotary_encoder.rb +21 -11
- data/examples/display/hd44780.rb +13 -5
- data/examples/display/ssd1306.rb +20 -17
- data/examples/display/ssd1306_s2_pico.rb +2 -2
- data/examples/i2c/search.rb +10 -26
- data/examples/led/apa102_bounce.rb +3 -4
- data/examples/led/apa102_fade.rb +44 -0
- data/examples/led/builtin_blink.rb +3 -1
- data/examples/led/builtin_fade.rb +19 -0
- data/examples/led/rgb_led.rb +31 -0
- data/examples/led/seven_segment_char_echo.rb +4 -2
- data/examples/led/ws2812_bounce.rb +5 -7
- data/examples/led/ws2812_builtin_blink.rb +3 -2
- data/examples/led/ws2812_fade.rb +43 -0
- data/examples/motor/l298.rb +10 -8
- data/examples/motor/servo.rb +4 -3
- data/examples/motor/stepper.rb +13 -13
- data/examples/one_wire/search.rb +32 -0
- data/examples/pulse_io/buzzer.rb +8 -3
- data/examples/pulse_io/ir_output.rb +51 -0
- data/examples/pulse_io/pwm_output.rb +30 -0
- data/examples/rtc/ds3231.rb +18 -35
- data/examples/sensor/aht10.rb +4 -6
- data/examples/sensor/aht20.rb +4 -6
- data/examples/sensor/bme280.rb +4 -4
- data/examples/sensor/bmp180.rb +9 -5
- data/examples/sensor/dht.rb +20 -15
- data/examples/sensor/ds18b20.rb +20 -21
- data/examples/sensor/generic_pir.rb +4 -2
- data/examples/sensor/hcsr04.rb +5 -2
- data/examples/sensor/htu21d.rb +9 -20
- data/examples/sensor/htu31d.rb +7 -9
- data/examples/sensor/neat_tph_readings.rb +15 -9
- data/examples/sensor/qmp6988.rb +5 -7
- data/examples/sensor/rcwl9620.rb +3 -3
- data/examples/sensor/sht3x.rb +4 -6
- data/examples/spi/bitbang_loopback.rb +46 -0
- data/examples/spi/input_register.rb +9 -19
- data/examples/spi/output_register.rb +9 -17
- data/examples/spi/ssd_through_registers.rb +28 -0
- data/examples/spi/two_registers.rb +18 -24
- data/examples/uart/bit_bang_demo.rb +25 -0
- data/examples/uart/board_passthrough.rb +19 -13
- data/examples/uart/hardware_loopback.rb +1 -1
- data/lib/denko/analog_io/ads1100.rb +127 -0
- data/lib/denko/analog_io/ads1115.rb +8 -25
- data/lib/denko/analog_io/ads1118.rb +10 -25
- data/lib/denko/analog_io/ads111x.rb +25 -11
- data/lib/denko/analog_io/input.rb +29 -55
- data/lib/denko/analog_io/input_helper.rb +42 -0
- data/lib/denko/analog_io/output.rb +5 -5
- data/lib/denko/analog_io/potentiometer.rb +6 -8
- data/lib/denko/analog_io.rb +2 -1
- data/lib/denko/behaviors/board_proxy.rb +13 -1
- data/lib/denko/behaviors/bus_controller.rb +1 -0
- data/lib/denko/behaviors/bus_controller_addressed.rb +1 -0
- data/lib/denko/behaviors/bus_peripheral.rb +3 -4
- data/lib/denko/behaviors/bus_peripheral_addressed.rb +8 -6
- data/lib/denko/behaviors/callbacks.rb +9 -7
- data/lib/denko/behaviors/component.rb +16 -14
- data/lib/denko/behaviors/input_pin.rb +14 -15
- data/lib/denko/behaviors/lifecycle.rb +51 -0
- data/lib/denko/behaviors/multi_pin.rb +22 -18
- data/lib/denko/behaviors/output_pin.rb +9 -4
- data/lib/denko/behaviors/single_pin.rb +1 -0
- data/lib/denko/behaviors/state.rb +15 -9
- data/lib/denko/behaviors/subcomponents.rb +72 -12
- data/lib/denko/behaviors.rb +2 -1
- data/lib/denko/board/core.rb +36 -18
- data/lib/denko/board/i2c.rb +14 -14
- data/lib/denko/board/i2c_bit_bang.rb +49 -0
- data/lib/denko/board/infrared.rb +6 -6
- data/lib/denko/board/led_array.rb +6 -5
- data/lib/denko/board/spi.rb +15 -10
- data/lib/denko/board/spi_bit_bang.rb +9 -7
- data/lib/denko/board.rb +35 -33
- data/lib/denko/connection/binary_echo.rb +17 -0
- data/lib/denko/connection/flow_control.rb +11 -15
- data/lib/denko/connection/handshake.rb +2 -0
- data/lib/denko/digital_io/button.rb +4 -0
- data/lib/denko/digital_io/c_bit_bang.rb +15 -0
- data/lib/denko/digital_io/input.rb +4 -5
- data/lib/denko/digital_io/output.rb +7 -6
- data/lib/denko/digital_io/relay.rb +2 -0
- data/lib/denko/digital_io/rotary_encoder.rb +78 -60
- data/lib/denko/digital_io.rb +1 -0
- data/lib/denko/display/hd44780.rb +136 -93
- data/lib/denko/display/sh1106.rb +42 -0
- data/lib/denko/display/ssd1306.rb +105 -45
- data/lib/denko/display.rb +1 -0
- data/lib/denko/eeprom/built_in.rb +19 -16
- data/lib/denko/i2c/bit_bang.rb +31 -0
- data/lib/denko/i2c/bus.rb +8 -36
- data/lib/denko/i2c/bus_common.rb +45 -0
- data/lib/denko/i2c/peripheral.rb +28 -19
- data/lib/denko/i2c.rb +2 -0
- data/lib/denko/led/apa102.rb +43 -29
- data/lib/denko/led/base.rb +8 -2
- data/lib/denko/led/rgb.rb +5 -7
- data/lib/denko/led/seven_segment.rb +24 -9
- data/lib/denko/led/ws2812.rb +10 -7
- data/lib/denko/message.rb +5 -0
- data/lib/denko/motor/l298.rb +11 -10
- data/lib/denko/motor/servo.rb +22 -10
- data/lib/denko/motor/stepper.rb +11 -14
- data/lib/denko/mutex_stub.rb +7 -0
- data/lib/denko/one_wire/bus.rb +9 -5
- data/lib/denko/one_wire/peripheral.rb +0 -3
- data/lib/denko/pulse_io/buzzer.rb +9 -3
- data/lib/denko/pulse_io/{ir_transmitter.rb → ir_output.rb} +9 -4
- data/lib/denko/pulse_io/pwm_output.rb +69 -15
- data/lib/denko/pulse_io.rb +3 -3
- data/lib/denko/rtc/ds3231.rb +11 -13
- data/lib/denko/sensor/aht.rb +22 -21
- data/lib/denko/sensor/bme280.rb +60 -63
- data/lib/denko/sensor/bmp180.rb +41 -38
- data/lib/denko/sensor/dht.rb +22 -5
- data/lib/denko/sensor/ds18b20.rb +40 -34
- data/lib/denko/sensor/hcsr04.rb +7 -5
- data/lib/denko/sensor/helper.rb +37 -0
- data/lib/denko/sensor/htu21d.rb +44 -55
- data/lib/denko/sensor/htu31d.rb +32 -33
- data/lib/denko/sensor/qmp6988.rb +25 -23
- data/lib/denko/sensor/rcwl9620.rb +2 -5
- data/lib/denko/sensor/sht3x.rb +23 -21
- data/lib/denko/sensor.rb +1 -2
- data/lib/denko/spi/base_register.rb +22 -22
- data/lib/denko/spi/bit_bang.rb +17 -51
- data/lib/denko/spi/bus.rb +15 -29
- data/lib/denko/spi/bus_common.rb +36 -0
- data/lib/denko/spi/input_register.rb +36 -30
- data/lib/denko/spi/output_register.rb +25 -40
- data/lib/denko/spi/peripheral.rb +93 -24
- data/lib/denko/spi.rb +6 -1
- data/lib/denko/uart/bit_bang.rb +5 -3
- data/lib/denko/uart/hardware.rb +9 -8
- data/lib/denko/version.rb +1 -1
- data/lib/denko.rb +10 -0
- data/lib/denko_cli/generator.rb +2 -2
- data/lib/denko_cli/packages.rb +8 -10
- data/lib/denko_cli/targets.rb +8 -8
- data/lib/denko_cli/targets.txt +4 -4
- data/lib/denko_cli/usage.txt +1 -1
- data/src/denko_ethernet.ino +0 -14
- data/src/denko_serial.ino +0 -14
- data/src/denko_wifi.ino +6 -15
- data/src/lib/Denko.cpp +39 -3
- data/src/lib/Denko.h +42 -26
- data/src/lib/DenkoCoreIO.cpp +57 -102
- data/src/lib/DenkoDefines.h +36 -31
- data/src/lib/DenkoI2C.cpp +54 -45
- data/src/lib/DenkoI2CBB.cpp +238 -0
- data/src/lib/DenkoIROut.cpp +12 -7
- data/src/lib/DenkoLEDArray.cpp +36 -13
- data/src/lib/DenkoSPI.cpp +6 -5
- data/src/lib/DenkoSPIBB.cpp +7 -6
- data/target.yml +37 -2
- data/test/analog_io/potentiometer_test.rb +10 -10
- data/test/behaviors/board_proxy_test.rb +1 -1
- data/test/behaviors/callbacks_test.rb +11 -3
- data/test/behaviors/component_test.rb +17 -9
- data/test/behaviors/input_pin_test.rb +14 -9
- data/test/behaviors/multi_pin_test.rb +14 -4
- data/test/behaviors/output_pin_test.rb +11 -8
- data/test/behaviors/poller_test.rb +1 -0
- data/test/behaviors/reader_test.rb +3 -2
- data/test/behaviors/subcomponents_test.rb +22 -2
- data/test/board/core_test.rb +15 -11
- data/test/board/i2c_test.rb +39 -33
- data/test/board/infrared_test.rb +1 -1
- data/test/board/message_test.rb +17 -11
- data/test/board/spi_test.rb +21 -21
- data/test/digital_io/button_test.rb +15 -0
- data/test/digital_io/relay_test.rb +18 -0
- data/test/digital_io/rotary_encoder_test.rb +80 -60
- data/test/eeprom/built_in_test.rb +9 -9
- data/test/i2c/bus_test.rb +30 -14
- data/test/i2c/peripheral_test.rb +36 -17
- data/test/led/base_test.rb +2 -1
- data/test/led/rgb_test.rb +6 -6
- data/test/led/seven_segment_test.rb +7 -7
- data/test/motor/servo_test.rb +1 -1
- data/test/motor/stepper_test.rb +2 -2
- data/test/one_wire/bus_test.rb +1 -0
- data/test/pulse_io/buzzer_test.rb +7 -4
- data/test/pulse_io/{ir_transmitter_test.rb → ir_output_test.rb} +10 -10
- data/test/pulse_io/pwm_output_test.rb +74 -18
- data/test/rtc/ds3231_test.rb +11 -13
- data/test/sensor/dht_test.rb +1 -1
- data/test/sensor/ds18b20_test.rb +4 -8
- data/test/spi/bus_test.rb +7 -7
- data/test/spi/input_register_test.rb +15 -15
- data/test/spi/output_register_test.rb +10 -28
- data/test/spi/peripheral_multi_pin_test.rb +53 -0
- data/test/spi/peripheral_single_pin_test.rb +48 -0
- data/test/test_helper.rb +36 -33
- data/tutorial/02-button/button.rb +5 -4
- data/tutorial/03-potentiometer/potentiometer.rb +9 -5
- data/tutorial/04-pwm_led/pwm_led.rb +14 -16
- data/tutorial/05-rgb_led/rgb_led.rb +6 -6
- data/tutorial/05-rgb_led/rgb_mapping.rb +11 -11
- data/vendor/board-maps/BoardMap.h +416 -56
- data/vendor/board-maps/lib/header_parser.rb +12 -2
- data/vendor/board-maps/yaml/ADAFRUIT_CAMERA_ESP32S3.yml +2 -2
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32C6.yml +15 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +1 -1
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_ADALOGGER.yml +44 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +1 -0
- data/vendor/board-maps/yaml/AMKEN_BB.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_ES.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_REVELOP.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_REVELOP_PLUS.yml +48 -0
- data/vendor/board-maps/yaml/ASL_CAN_X2.yml +41 -0
- data/vendor/board-maps/yaml/BLING.yml +25 -0
- data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +1 -0
- data/vendor/board-maps/yaml/BRIDGETEK_IDM2040_7A.yml +48 -0
- data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +13 -1
- data/vendor/board-maps/yaml/Breadstick_Raspberry.yml +31 -0
- data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32C6.yml +8 -0
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32C6.yml +20 -0
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_ESP32.yml +46 -0
- data/vendor/board-maps/yaml/DPTECHNICS_WALTER.yml +39 -0
- data/vendor/board-maps/yaml/ELECROW_CROWPANEL_7.yml +8 -0
- data/vendor/board-maps/yaml/ESP32C2_DEV.yml +12 -0
- data/vendor/board-maps/yaml/ESP32C3_DEVKIT_LIPO.yml +14 -0
- data/vendor/board-maps/yaml/ESP32C6_DEV.yml +15 -0
- data/vendor/board-maps/yaml/ESP32C6_EVB.yml +15 -0
- data/vendor/board-maps/yaml/ESP32C6_QWIIC_POCKET.yml +15 -0
- data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +15 -0
- data/vendor/board-maps/yaml/ESP32H2_DEV.yml +13 -0
- data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +13 -0
- data/vendor/board-maps/yaml/ESP32S2_DEV.yml +1 -0
- data/vendor/board-maps/yaml/{RMP.yml → ESP32S2_DEVKIT_LIPO.yml} +2 -1
- data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +44 -0
- data/vendor/board-maps/yaml/ESP32S3_DEVKIT_LIPO.yml +42 -0
- data/vendor/board-maps/yaml/ESP32S3_POWERFEATHER.yml +22 -0
- data/vendor/board-maps/yaml/ESP32_SBC_FABGL.yml +35 -0
- data/vendor/board-maps/yaml/EVN_ALPHA.yml +48 -0
- data/vendor/board-maps/yaml/FEATHERS3NEO.yml +32 -0
- data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +14 -0
- data/vendor/board-maps/yaml/HELTEC_CAPSULE_SENSOR_V3.yml +43 -0
- data/vendor/board-maps/yaml/HELTEC_WIFI_LORA_32_V3.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_BRIDGE.yml +8 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_MINI_SHELL.yml +13 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_PAPER.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_SHELL_V3.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_STICK_LITE_V3.yml +30 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_TRACKER.yml +41 -0
- data/vendor/board-maps/yaml/HT_DE01.yml +42 -0
- data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +1 -1
- data/vendor/board-maps/yaml/LILYGO_T3S3_LR1121.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1262.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1276.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1278.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280PA.yml +8 -0
- data/vendor/board-maps/yaml/LILYGO_T_ETH_LITE.yml +21 -0
- data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +14 -0
- data/vendor/board-maps/yaml/LOLIN_S3.yml +1 -0
- data/vendor/board-maps/yaml/LOLIN_S3_MINI_PRO.yml +40 -0
- data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +0 -2
- data/vendor/board-maps/yaml/LoPy.yml +1 -0
- data/vendor/board-maps/yaml/LoPy4.yml +1 -0
- data/vendor/board-maps/yaml/M5STACK_CAPSULE.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_CARDPUTER.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_DIAL.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_FIRE.yml +0 -1
- data/vendor/board-maps/yaml/M5STACK_NANOC6.yml +17 -0
- data/vendor/board-maps/yaml/M5STACK_PAPER.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_POE_CAM.yml +5 -0
- data/vendor/board-maps/yaml/M5STACK_STAMP_C3.yml +13 -0
- data/vendor/board-maps/yaml/M5STACK_STAMP_S3.yml +4 -0
- data/vendor/board-maps/yaml/{M5Stick_C.yml → M5STACK_STICKC.yml} +0 -1
- data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS2.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_TOUGH.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_UNIT_CAM.yml +10 -0
- data/vendor/board-maps/yaml/M5STACK_UNIT_CAMS3.yml +4 -0
- data/vendor/board-maps/yaml/M5Stack_ATOM.yml +0 -1
- data/vendor/board-maps/yaml/MAKERGO_C3_SUPERMINI.yml +14 -0
- data/vendor/board-maps/yaml/MARBLE_PICO.yml +48 -0
- data/vendor/board-maps/yaml/METEHOCA_AKANA_R1.yml +46 -0
- data/vendor/board-maps/yaml/NAMINO_BIANCO.yml +13 -0
- data/vendor/board-maps/yaml/NEBULAS3.yml +0 -1
- data/vendor/board-maps/yaml/NEWSAN_ARCHI.yml +48 -0
- data/vendor/board-maps/yaml/NOLOGO_ESP32C3_SUPER_MINI.yml +14 -0
- data/vendor/board-maps/yaml/NOLOGO_ESP32S3_PICO.yml +12 -0
- data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_16MB.yml +48 -0
- data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_2MB.yml +48 -0
- data/vendor/board-maps/yaml/OPTA_ANALOG.yml +7 -0
- data/vendor/board-maps/yaml/OPTA_DIGITAL.yml +5 -0
- data/vendor/board-maps/yaml/PINTRONIX_PINMAX.yml +42 -0
- data/vendor/board-maps/yaml/PYCOM_GPY.yml +1 -0
- data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +0 -1
- data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +12 -0
- data/vendor/board-maps/yaml/SPARKFUN_MICROMOD_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/SPARKFUN_PRO_MICRO_ESP32C3.yml +24 -0
- data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER.yml +31 -0
- data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER_C6.yml +15 -0
- data/vendor/board-maps/yaml/TINYC6.yml +25 -0
- data/vendor/board-maps/yaml/UPESY_EDU_ESP32.yml +28 -0
- data/vendor/board-maps/yaml/UPESY_ESP32C3_BASIC.yml +13 -0
- data/vendor/board-maps/yaml/UPESY_ESP32C3_MINI.yml +12 -0
- data/vendor/board-maps/yaml/UPESY_ESP32S3_BASIC.yml +42 -0
- data/vendor/board-maps/yaml/VIRALINK_GATE32_01.yml +6 -0
- data/vendor/board-maps/yaml/VIRALINK_GATE32_11.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32S3_TOUCH_LCD_128.yml +8 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_MATRIX.yml +48 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +1 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_PIZERO.yml +47 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +1 -0
- data/vendor/board-maps/yaml/WEACT_STUDIO_ESP32C3.yml +14 -0
- data/vendor/board-maps/yaml/WIPY3.yml +1 -0
- data/vendor/board-maps/yaml/WT32_SC01_PLUS.yml +7 -0
- data/vendor/board-maps/yaml/WiFiduinoV2.yml +1 -0
- data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +0 -1
- data/vendor/board-maps/yaml/XIAO_ESP32C6.yml +22 -0
- data/vendor/board-maps/yaml/unphone9.yml +8 -0
- metadata +169 -30
- data/examples/led/apa102_breathe.rb +0 -45
- data/examples/pulse_io/ir_transmitter.rb +0 -55
- data/examples/spi/ssd_through_register.rb +0 -40
- data/examples/uart/bit_bang_read.rb +0 -16
- data/examples/uart/bit_bang_write.rb +0 -16
- data/lib/denko/analog_io/sensor.rb +0 -6
- data/lib/denko/sensor/virtual.rb +0 -42
- data/src/lib/DenkoIROutESP.cpp +0 -26
- data/vendor/board-maps/yaml/STAMP_S3.yml +0 -8
- /data/vendor/board-maps/yaml/{BRIDGETEK_IDM2040-7A.yml → BRIDGETEK_IDM2040_43A.yml} +0 -0
- /data/vendor/board-maps/yaml/{heltec_wifi_32_lora_V3.yml → HELTEC_WIRELESS_STICK_V3.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stack_Core_ESP32.yml → M5STACK_CORE.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stamp_Pico.yml → M5STACK_STAMP_PICO.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stack-Timer-CAM.yml → M5STACK_TIMER_CAM.yml} +0 -0
@@ -11,21 +11,21 @@ board = Denko::Board.new(Denko::Connection::Serial.new)
|
|
11
11
|
# Create an object for a momentary button, giving the board, and the pin that
|
12
12
|
# the ungrounded side of the button is connected to.
|
13
13
|
#
|
14
|
-
# `
|
14
|
+
# `mode: :input_pullup` keeps the input pin high (logical 1) when the
|
15
15
|
# button is not pressed. Without this (or an external pullup resistor), the pin
|
16
16
|
# might float between 0 and 1, giving incorrect readings. When the button is
|
17
17
|
# pressed, it pulls the input pin down to ground (0).
|
18
18
|
#
|
19
19
|
# See button.pdf in this folder for a hook-up diagram.
|
20
20
|
#
|
21
|
-
button = Denko::DigitalIO::Button.new(board: board, pin: 7,
|
21
|
+
button = Denko::DigitalIO::Button.new(board: board, pin: 7, mode: :input_pullup)
|
22
22
|
|
23
23
|
#
|
24
24
|
# As soon as a Button (or any DigitalInput) is created, the board starts
|
25
25
|
# listening for changes to the physical button. When that happens, our button
|
26
26
|
# object is notified. To catch these notifications, we have to use a callback.
|
27
27
|
# button.add_callback saves a block of code to run each time the button state changes.
|
28
|
-
#
|
28
|
+
#
|
29
29
|
# The callback below checks if the state is 0 (the button went from up to down),
|
30
30
|
# then counts and prints the number of times pressed.
|
31
31
|
#
|
@@ -38,6 +38,7 @@ button.add_callback(:count_presses) do |state|
|
|
38
38
|
end
|
39
39
|
|
40
40
|
# Wait for the button to be pressed 3 times.
|
41
|
+
puts "Press button 3 times to continue..."
|
41
42
|
sleep 0.005 while presses < 3
|
42
43
|
|
43
44
|
# Button keeps its callbacks in a Hash. We can be specific and use keys to add and remove.
|
@@ -56,7 +57,7 @@ button.remove_callbacks
|
|
56
57
|
#
|
57
58
|
led = Denko::LED.new(board: board, pin: 13)
|
58
59
|
|
59
|
-
button.up { led.off }
|
60
|
+
button.up { led.off }
|
60
61
|
button.down { led.on }
|
61
62
|
|
62
63
|
puts "Press the button to turn on the LED... (Ctrl+C to exit)"
|
@@ -13,7 +13,7 @@ board = Denko::Board.new(Denko::Connection::Serial.new)
|
|
13
13
|
# pins. On most boards these pins start with 'A' and can be given as strings.
|
14
14
|
#
|
15
15
|
# See potentiometer.pdf in this folder for a hook-up diagram.
|
16
|
-
#
|
16
|
+
#
|
17
17
|
potentiometer = Denko::AnalogIO::Potentiometer.new(pin: 'A0', board: board)
|
18
18
|
|
19
19
|
#
|
@@ -33,7 +33,7 @@ potentiometer.remove_callbacks
|
|
33
33
|
# The default resolution for Analog Input is 10-bits, so you should have seen
|
34
34
|
# values from 0 - 1023. We can use the value to control the blinking
|
35
35
|
# speed of the LED from the earlier example.
|
36
|
-
#
|
36
|
+
#
|
37
37
|
led = Denko::LED.new(board: board, pin: 13)
|
38
38
|
|
39
39
|
# Helper method to calculate the blink time.
|
@@ -46,17 +46,21 @@ def map_pot_value(value)
|
|
46
46
|
k = 5
|
47
47
|
linearized = (fraction * (k + 1)) / ((k * fraction) + 1)
|
48
48
|
# Use this for linear potentiometers instead.
|
49
|
-
# linearized = fraction
|
50
|
-
|
49
|
+
# linearized = fraction
|
50
|
+
|
51
51
|
# Map to the 0.1 to 0.5 seconds range in reverse. Clockwise = faster.
|
52
52
|
0.5 - (linearized * 0.4)
|
53
53
|
end
|
54
54
|
|
55
|
+
# Start blinking with interval of 0.3
|
56
|
+
led.blink(0.3)
|
57
|
+
|
55
58
|
# Callback that calculates the blink interval and tells the LED.
|
56
59
|
potentiometer.on_change do |value|
|
57
60
|
interval = map_pot_value(value)
|
58
61
|
print "LED blink interval: #{interval.round(4)} seconds \r"
|
59
|
-
|
62
|
+
# Update the LED's blink interval without stopping the blink.
|
63
|
+
led.blink_interval = interval
|
60
64
|
end
|
61
65
|
puts "Turn potentiometer to control the LED blink. Press Ctrl+C to exit..."
|
62
66
|
sleep
|
@@ -13,11 +13,11 @@ board = Denko::Board.new(Denko::Connection::Serial.new)
|
|
13
13
|
# set a duty cycle, telling the LED what fraction of those cycles to be on for.
|
14
14
|
#
|
15
15
|
# Eg. 1 cycle on, 4 cycles off = 20% duty cycle.
|
16
|
-
# This happens so fast that it looks like 20% brightness to the naked eye.
|
17
|
-
#
|
16
|
+
# This happens so fast that it looks like 20% brightness to the naked eye.
|
17
|
+
#
|
18
18
|
# Depending on your board, some pins may not be PWM capable. Pin 13 on Arduinos
|
19
19
|
# isn't, so the earlier example was limited to on/off. There might be a wave
|
20
|
-
# symbol printed next to the pin number, but check your documentation.
|
20
|
+
# symbol printed next to the pin number, but check your documentation.
|
21
21
|
#
|
22
22
|
# Note: If you have pins labeled "DAC", do not use them here. DACs generate steady
|
23
23
|
# analog voltages, not pulses.
|
@@ -26,11 +26,10 @@ board = Denko::Board.new(Denko::Connection::Serial.new)
|
|
26
26
|
#
|
27
27
|
led = Denko::LED.new(board: board, pin: 11)
|
28
28
|
|
29
|
-
# led.
|
30
|
-
[0,
|
31
|
-
led.
|
32
|
-
|
33
|
-
print "LED at #{percentage}% duty cycle. Press Enter..."; gets
|
29
|
+
# led.duty= sets duty cycle from 0 to 100, in percentage.
|
30
|
+
[0, 20, 40, 60, 80, 100].each do |duty|
|
31
|
+
led.duty = duty
|
32
|
+
print "LED at #{duty}% duty cycle. Press Enter..."; gets
|
34
33
|
end
|
35
34
|
puts
|
36
35
|
|
@@ -48,18 +47,17 @@ def map_pot_value(value)
|
|
48
47
|
# linearized = (fraction * (k + 1)) / ((k * fraction) + 1)
|
49
48
|
|
50
49
|
# Use this for linear potentiometers instead.
|
51
|
-
linearized = fraction
|
52
|
-
|
53
|
-
#
|
54
|
-
(linearized *
|
50
|
+
linearized = fraction
|
51
|
+
|
52
|
+
# x100 to get percentage out of 100.
|
53
|
+
(linearized * 100).round
|
55
54
|
end
|
56
55
|
|
57
56
|
# Callback to change brightness.
|
58
57
|
potentiometer.on_change do |value|
|
59
|
-
duty
|
60
|
-
led.
|
61
|
-
|
62
|
-
print "LED brightness: #{percentage}% \r"
|
58
|
+
duty = map_pot_value(value)
|
59
|
+
led.duty = duty
|
60
|
+
print "LED brightness: #{duty}% \r"
|
63
61
|
end
|
64
62
|
|
65
63
|
puts "Turn potentiometer to control the LED brightness. Press Ctrl+C to exit..."
|
@@ -32,8 +32,8 @@ end
|
|
32
32
|
# Or we can access the individual Leds through the #red, #green and #blue methods.
|
33
33
|
# This makes an orange color with them.
|
34
34
|
#
|
35
|
-
rgb_led.red.
|
36
|
-
rgb_led.green.
|
35
|
+
rgb_led.red.duty = 100
|
36
|
+
rgb_led.green.duty = 40
|
37
37
|
rgb_led.blue.off
|
38
38
|
print "Done. Changed to orange. Press Enter to continue..."; gets
|
39
39
|
|
@@ -47,10 +47,10 @@ potentiometer = Denko::AnalogIO::Potentiometer.new(pin: 'A0', board: board)
|
|
47
47
|
require_relative 'rgb_mapping'
|
48
48
|
potentiometer.on_change do |pot_value|
|
49
49
|
# Use the mapping methods to calculate values and write them.
|
50
|
-
rgb_led.red.
|
51
|
-
rgb_led.green.
|
52
|
-
rgb_led.blue.
|
53
|
-
|
50
|
+
rgb_led.red.duty = map_red(pot_value)
|
51
|
+
rgb_led.green.duty = map_green(pot_value)
|
52
|
+
rgb_led.blue.duty = map_blue(pot_value)
|
53
|
+
|
54
54
|
print "Potentiometer value: #{pot_value} \r"
|
55
55
|
end
|
56
56
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Maximum and minimum PWM values.
|
2
|
-
OUT_MAX =
|
2
|
+
OUT_MAX = 100
|
3
3
|
OUT_MIN = 0
|
4
4
|
|
5
5
|
def map_value(value, input_steps, reverse=false)
|
@@ -8,10 +8,10 @@ def map_value(value, input_steps, reverse=false)
|
|
8
8
|
|
9
9
|
# Reverse if needed.
|
10
10
|
fraction = 1 - fraction if reverse
|
11
|
-
|
11
|
+
|
12
12
|
# Map to the output range
|
13
13
|
value = (fraction * OUT_MAX).floor
|
14
|
-
|
14
|
+
|
15
15
|
# Clamp within the range just in case.
|
16
16
|
value = OUT_MAX if value > OUT_MAX
|
17
17
|
value = OUT_MIN if value < OUT_MIN
|
@@ -21,20 +21,20 @@ end
|
|
21
21
|
def map_red(pot_value)
|
22
22
|
# Red full on at low end.
|
23
23
|
return OUT_MAX if pot_value < 171
|
24
|
-
|
24
|
+
|
25
25
|
# Red fades out from 171-341
|
26
26
|
if (171..341).include? pot_value
|
27
27
|
return map_value(pot_value - 171, 170, true)
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
# Red full off in the middle third.
|
31
31
|
return OUT_MIN if (342..682).include? pot_value
|
32
|
-
|
32
|
+
|
33
33
|
# Red fades in from 683-853
|
34
34
|
if (683..853).include? pot_value
|
35
35
|
return map_value(pot_value - 683, 170, false)
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
# Red full on at high end.
|
39
39
|
return OUT_MAX if pot_value > 853
|
40
40
|
end
|
@@ -47,12 +47,12 @@ def map_green(pot_value)
|
|
47
47
|
|
48
48
|
# Green full on from 1/6 to 1/2.
|
49
49
|
return OUT_MAX if (171..511).include? pot_value
|
50
|
-
|
50
|
+
|
51
51
|
# Green fades out from 512-682
|
52
52
|
if (512..682).include? pot_value
|
53
53
|
return map_value(pot_value - 512, 170, true)
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
# Geen full off above 2/3.
|
57
57
|
return OUT_MIN if pot_value > 682
|
58
58
|
end
|
@@ -60,12 +60,12 @@ end
|
|
60
60
|
def map_blue(pot_value)
|
61
61
|
# Blue full off until 1/3
|
62
62
|
return OUT_MIN if pot_value < 342
|
63
|
-
|
63
|
+
|
64
64
|
# Blue fades in from 342-512 (170 steps)
|
65
65
|
if (342..542).include? pot_value
|
66
66
|
return map_value(pot_value - 342, 170, false)
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
# Blue full on from 513 to 852
|
70
70
|
return OUT_MAX if (513..852).include? pot_value
|
71
71
|
|