denko 0.13.6 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|