denko 0.14.0 → 0.15.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_atmega_avr.yml +2 -1
- data/.github/workflows/build_atmega_megaavr.yml +2 -1
- data/.github/workflows/build_atsam3x.yml +1 -0
- data/.github/workflows/build_atsamd21.yml +2 -1
- data/.github/workflows/build_esp32.yml +4 -2
- data/.github/workflows/build_esp32c3.yml +4 -3
- data/.github/workflows/build_esp32c6.yml +4 -2
- data/.github/workflows/build_esp32h2.yml +4 -2
- data/.github/workflows/build_esp32s2.yml +4 -2
- data/.github/workflows/build_esp32s3.yml +4 -2
- data/.github/workflows/build_esp8266.yml +2 -1
- data/.github/workflows/build_ra4m1.yml +1 -0
- data/.github/workflows/build_rp2040.yml +4 -3
- data/.github/workflows/ruby.yml +1 -1
- data/CHANGELOG.md +203 -0
- data/DEPS_CLI.md +16 -16
- data/DEPS_IDE.md +31 -30
- data/MICROCONTROLLERS.md +103 -0
- data/PERIPHERALS.md +178 -0
- data/README.md +28 -21
- data/denko.gemspec +6 -1
- data/lib/denko/analog_io/ads1118.rb +5 -5
- data/lib/denko/analog_io/ads111x.rb +23 -19
- data/lib/denko/analog_io/joystick.rb +87 -0
- data/lib/denko/analog_io/potentiometer.rb +1 -5
- data/lib/denko/analog_io.rb +22 -8
- data/lib/denko/behaviors/bus_controller.rb +2 -1
- data/lib/denko/behaviors/bus_peripheral.rb +1 -1
- data/lib/denko/behaviors/callbacks.rb +18 -16
- data/lib/denko/behaviors/component.rb +0 -4
- data/lib/denko/behaviors/lifecycle.rb +1 -1
- data/lib/denko/behaviors/listener.rb +9 -3
- data/lib/denko/behaviors/multi_pin.rb +4 -6
- data/lib/denko/behaviors/poller.rb +11 -2
- data/lib/denko/behaviors/reader.rb +109 -21
- data/lib/denko/behaviors/single_pin.rb +2 -4
- data/lib/denko/behaviors/state.rb +18 -13
- data/lib/denko/behaviors/threaded.rb +19 -8
- data/lib/denko/behaviors.rb +36 -23
- data/lib/denko/board/eeprom.rb +1 -1
- data/lib/denko/board/i2c.rb +1 -1
- data/lib/denko/board/i2c_bit_bang.rb +9 -5
- data/lib/denko/board/map.rb +6 -2
- data/lib/denko/board/one_wire.rb +3 -3
- data/lib/denko/board/spi.rb +30 -30
- data/lib/denko/board/spi_bit_bang.rb +8 -11
- data/lib/denko/board.rb +6 -3
- data/lib/denko/connection/flow_control.rb +1 -1
- data/lib/denko/connection/serial.rb +5 -5
- data/lib/denko/digital_io/output.rb +12 -4
- data/lib/denko/digital_io/pcf8574.rb +114 -0
- data/lib/denko/digital_io/rotary_encoder.rb +10 -6
- data/lib/denko/digital_io.rb +24 -6
- data/lib/denko/display/canvas.rb +350 -157
- data/lib/denko/display/font/bmp_5x7.rb +142 -0
- data/lib/denko/display/font/bmp_6x8.rb +142 -0
- data/lib/denko/display/font/bmp_8x16.rb +141 -0
- data/lib/denko/display/font.rb +22 -0
- data/lib/denko/display/hd44780.rb +24 -20
- data/lib/denko/display/il0373.rb +186 -0
- data/lib/denko/display/mono_oled.rb +193 -0
- data/lib/denko/display/pcd8544.rb +154 -0
- data/lib/denko/display/pixel_common.rb +83 -0
- data/lib/denko/display/sh1106.rb +17 -21
- data/lib/denko/display/sh1107.rb +10 -0
- data/lib/denko/display/spi_common.rb +35 -0
- data/lib/denko/display/spi_epaper_common.rb +30 -0
- data/lib/denko/display/ssd1306.rb +6 -228
- data/lib/denko/display/ssd1680.rb +14 -0
- data/lib/denko/display/ssd1681.rb +8 -0
- data/lib/denko/display/ssd168x.rb +227 -0
- data/lib/denko/display/st7302.rb +207 -0
- data/lib/denko/display/st7565.rb +166 -0
- data/lib/denko/display.rb +40 -4
- data/lib/denko/eeprom/at24c.rb +67 -0
- data/lib/denko/eeprom/board.rb +69 -0
- data/lib/denko/eeprom.rb +15 -1
- data/lib/denko/helpers/engine_check.rb +13 -0
- data/lib/denko/{mutex_stub.rb → helpers/mutex_stub.rb} +6 -0
- data/lib/denko/helpers.rb +6 -0
- data/lib/denko/i2c/bit_bang.rb +1 -0
- data/lib/denko/i2c/bus_common.rb +9 -4
- data/lib/denko/i2c/peripheral.rb +5 -1
- data/lib/denko/i2c.rb +17 -4
- data/lib/denko/led/apa102.rb +1 -3
- data/lib/denko/led/base.rb +5 -0
- data/lib/denko/led/rgb.rb +16 -10
- data/lib/denko/led/seven_segment.rb +1 -1
- data/lib/denko/led.rb +17 -8
- data/lib/denko/motor/{stepper.rb → a3967.rb} +1 -1
- data/lib/denko/motor/servo.rb +16 -6
- data/lib/denko/motor.rb +16 -3
- data/lib/denko/one_wire/bus.rb +20 -16
- data/lib/denko/one_wire/bus_enumerator.rb +25 -14
- data/lib/denko/one_wire/helper.rb +4 -2
- data/lib/denko/one_wire.rb +18 -5
- data/lib/denko/pulse_io/buzzer.rb +2 -6
- data/lib/denko/pulse_io/ir_output.rb +1 -5
- data/lib/denko/pulse_io/pwm_output.rb +56 -31
- data/lib/denko/pulse_io.rb +17 -3
- data/lib/denko/rtc/ds3231.rb +4 -3
- data/lib/denko/rtc.rb +14 -1
- data/lib/denko/sensor/aht.rb +16 -20
- data/lib/denko/sensor/bme280.rb +23 -36
- data/lib/denko/sensor/bmp180.rb +8 -13
- data/lib/denko/sensor/dht.rb +17 -7
- data/lib/denko/sensor/ds18b20.rb +5 -4
- data/lib/denko/sensor/hdc1080.rb +174 -0
- data/lib/denko/sensor/htu21d.rb +17 -6
- data/lib/denko/sensor/htu31d.rb +6 -5
- data/lib/denko/sensor/jsnsr04t.rb +49 -0
- data/lib/denko/sensor/qmp6988.rb +14 -30
- data/lib/denko/sensor/rcwl9620.rb +1 -0
- data/lib/denko/sensor/sht3x.rb +6 -5
- data/lib/denko/sensor/sht4x.rb +125 -0
- data/lib/denko/sensor/vl53l0x.rb +58 -0
- data/lib/denko/sensor.rb +33 -15
- data/lib/denko/spi/base_register.rb +11 -7
- data/lib/denko/spi/bus_common.rb +12 -15
- data/lib/denko/spi/input_register.rb +6 -6
- data/lib/denko/spi/output_register.rb +13 -4
- data/lib/denko/spi/peripheral.rb +82 -84
- data/lib/denko/spi.rb +20 -10
- data/lib/denko/uart/bit_bang.rb +2 -27
- data/lib/denko/uart/common.rb +33 -0
- data/lib/denko/uart/hardware.rb +1 -26
- data/lib/denko/uart.rb +16 -2
- data/lib/denko/version.rb +1 -1
- data/lib/denko.rb +22 -25
- data/lib/denko_cli/targets.rb +7 -7
- data/lib/denko_cli/targets.txt +19 -20
- data/src/lib/Denko.cpp +26 -13
- data/src/lib/Denko.h +4 -4
- data/src/lib/DenkoDefines.h +7 -26
- data/src/lib/DenkoLEDArray.cpp +1 -8
- data/src/lib/DenkoSPI.cpp +31 -29
- data/src/lib/DenkoSPIBB.cpp +12 -14
- data/test/analog_io/input_test.rb +1 -1
- data/test/analog_io/potentiometer_test.rb +2 -2
- data/test/behaviors/bus_peripheral_test.rb +4 -4
- data/test/behaviors/callbacks_test.rb +20 -10
- data/test/behaviors/component_test.rb +18 -8
- data/test/board/board_test.rb +9 -9
- data/test/board/one_wire_test.rb +25 -14
- data/test/board/spi_test.rb +31 -15
- data/test/digital_io/input_test.rb +2 -2
- data/test/display/canvas_test.rb +306 -0
- data/test/display/hd44780_test.rb +34 -7
- data/test/eeprom/board_test.rb +45 -0
- data/test/helpers/mruby_minitest.rb +95 -0
- data/test/helpers/mruby_runner.rb +13 -0
- data/test/i2c/bus_test.rb +93 -30
- data/test/i2c/peripheral_test.rb +2 -2
- data/test/led/apa102_test.rb +24 -0
- data/test/led/rgb_test.rb +4 -4
- data/test/motor/{stepper_test.rb → a3967_test.rb} +2 -2
- data/test/one_wire/bus_enumerator_test.rb +1 -1
- data/test/one_wire/bus_test.rb +42 -35
- data/test/one_wire/peripheral_test.rb +5 -17
- data/test/pulse_io/ir_output_test.rb +5 -0
- data/test/pulse_io/pwm_output_test.rb +10 -10
- data/test/rtc/ds3231_test.rb +3 -2
- data/test/sensor/dht_test.rb +11 -11
- data/test/spi/bitbang_test.rb +27 -0
- data/test/spi/bus_test.rb +19 -29
- data/test/spi/input_register_test.rb +2 -2
- data/test/spi/{peripheral_multi_pin_test.rb → peripheral_test.rb} +25 -5
- data/test/test_helper.rb +44 -124
- data/vendor/board-maps/BoardMap.h +264 -0
- data/vendor/board-maps/yaml/ALFREDO_NOU3.yml +2 -0
- data/vendor/board-maps/yaml/ATD143_S3.yml +1 -0
- data/vendor/board-maps/yaml/BHARATPI_A7672S_4G.yml +14 -0
- data/vendor/board-maps/yaml/BHARATPI_LORA.yml +14 -0
- data/vendor/board-maps/yaml/BHARATPI_NODE_WIFI.yml +14 -0
- data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +0 -1
- data/vendor/board-maps/yaml/CEZERIO_DEV_ESP32C6.yml +14 -0
- data/vendor/board-maps/yaml/CEZERIO_MINI_DEV_ESP32C6.yml +12 -0
- data/vendor/board-maps/yaml/CIRCUITART_ZERO_S3.yml +71 -0
- data/vendor/board-maps/yaml/CODECELLC3.yml +13 -0
- data/vendor/board-maps/yaml/CYOBOT_V2_ESP32S3.yml +7 -0
- data/vendor/board-maps/yaml/EDGES3D.yml +25 -0
- data/vendor/board-maps/yaml/ESP32C6_DEV.yml +3 -4
- data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +0 -1
- data/vendor/board-maps/yaml/ESP32H2_DEV.yml +0 -1
- data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +0 -1
- data/vendor/board-maps/yaml/ESP32P4_DEV.yml +35 -0
- data/vendor/board-maps/yaml/ESP32S2_DEV.yml +0 -1
- data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO.yml +0 -1
- data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +0 -1
- data/vendor/board-maps/yaml/ESP32_2432S028R.yml +14 -0
- data/vendor/board-maps/yaml/FEATHERS3.yml +1 -1
- data/vendor/board-maps/yaml/FRI3D_2024_ESP32S3.yml +43 -0
- data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +0 -1
- data/vendor/board-maps/yaml/GEEKBLE_NANO_ESP32S3.yml +25 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E290.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E_213.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_T190.yml +41 -0
- data/vendor/board-maps/yaml/HUIDU_HD_WF2.yml +5 -0
- data/vendor/board-maps/yaml/HUIDU_HD_WF4.yml +1 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_CC1101.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_LR1121.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SI4432.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SX1262.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SX1280.yml +6 -0
- data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +0 -1
- data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +1 -2
- data/vendor/board-maps/yaml/LoPy.yml +0 -1
- data/vendor/board-maps/yaml/LoPy4.yml +0 -1
- data/vendor/board-maps/yaml/M5STACK_DINMETER.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_FIRE.yml +1 -1
- data/vendor/board-maps/yaml/OMGS3.yml +25 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHC3.yml +23 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHC6.yml +32 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHH2.yml +24 -0
- data/vendor/board-maps/yaml/PYCOM_GPY.yml +0 -1
- data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +1 -1
- data/vendor/board-maps/yaml/SPARKFUN_ESP32S3_THING_PLUS.yml +13 -0
- data/vendor/board-maps/yaml/SPARKLEMOTIONMINI_ESP32.yml +12 -0
- data/vendor/board-maps/yaml/SPARKLEMOTIONSTICK_ESP32.yml +11 -0
- data/vendor/board-maps/yaml/SPARKLEMOTION_ESP32.yml +12 -0
- data/vendor/board-maps/yaml/SQUIXL.yml +7 -0
- data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER_C6.yml +0 -1
- data/vendor/board-maps/yaml/T_LORA_PAGER.yml +6 -0
- data/vendor/board-maps/yaml/T_WATCH_S3.yml +7 -0
- data/vendor/board-maps/yaml/T_WATCH_S3_ULTRA.yml +6 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_146.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_147.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_169.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_185.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_RELAY_6CH.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_143.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_164.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_18.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_191.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_241.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_146.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_169.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185_BOX.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_21.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_28.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_4.yml +36 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43B.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5B.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_7.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_ZERO.yml +36 -0
- data/vendor/board-maps/yaml/WIPY3.yml +0 -1
- data/vendor/board-maps/yaml/WS_ESP32_S3_MATRIX.yml +38 -0
- data/vendor/board-maps/yaml/XIAO_ESP32S3_PLUS.yml +46 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V2.yml +28 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V3.yml +28 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_ETH.yml +40 -0
- data/vendor/board-maps/yaml/mercury.yml +20 -0
- metadata +116 -101
- data/.vscode/settings.json +0 -5
- data/.vscode/tasks.json +0 -20
- data/HARDWARE.md +0 -263
- data/benchmarks/analog_listen.rb +0 -49
- data/benchmarks/digital_write.rb +0 -28
- data/benchmarks/i2c_ssd1306_refresh.rb +0 -91
- data/examples/advanced/m5_env3.rb +0 -46
- data/examples/advanced/rotary_encoder_mac_volume.rb +0 -53
- data/examples/advanced/ssd1306_time_temp_rh.rb +0 -43
- data/examples/analog_io/ads1100.rb +0 -48
- data/examples/analog_io/ads1115.rb +0 -57
- data/examples/analog_io/ads1118.rb +0 -65
- data/examples/analog_io/dac_loopback.rb +0 -34
- data/examples/analog_io/input.rb +0 -56
- data/examples/analog_io/input_smoothing.rb +0 -27
- data/examples/analog_io/potentiometer.rb +0 -31
- data/examples/connection/binary_echo.rb +0 -34
- data/examples/connection/tcp.rb +0 -19
- data/examples/digital_io/button.rb +0 -17
- data/examples/digital_io/relay.rb +0 -17
- data/examples/digital_io/rotary_encoder.rb +0 -36
- data/examples/display/hd44780.png +0 -0
- data/examples/display/hd44780.rb +0 -47
- data/examples/display/ssd1306.rb +0 -43
- data/examples/display/ssd1306_s2_pico.rb +0 -29
- data/examples/eeprom/built_in.rb +0 -32
- data/examples/i2c/search.rb +0 -39
- data/examples/led/apa102_bounce.rb +0 -32
- data/examples/led/apa102_fade.rb +0 -44
- data/examples/led/builtin_blink.rb +0 -14
- data/examples/led/builtin_fade.rb +0 -19
- data/examples/led/rgb_led.rb +0 -31
- data/examples/led/seven_segment_char_echo.rb +0 -17
- data/examples/led/ws2812_bounce.rb +0 -30
- data/examples/led/ws2812_builtin_blink.rb +0 -22
- data/examples/led/ws2812_fade.rb +0 -43
- data/examples/motor/l298.rb +0 -45
- data/examples/motor/servo.rb +0 -17
- data/examples/motor/stepper.png +0 -0
- data/examples/motor/stepper.rb +0 -43
- data/examples/one_wire/search.rb +0 -32
- data/examples/pulse_io/buzzer.rb +0 -35
- data/examples/pulse_io/ir_output.rb +0 -51
- data/examples/pulse_io/pwm_output.rb +0 -30
- data/examples/rtc/ds3231.rb +0 -31
- data/examples/sensor/aht10.rb +0 -17
- data/examples/sensor/aht20.rb +0 -17
- data/examples/sensor/bme280.rb +0 -38
- data/examples/sensor/bmp180.rb +0 -26
- data/examples/sensor/dht.rb +0 -29
- data/examples/sensor/ds18b20.rb +0 -57
- data/examples/sensor/generic_pir.rb +0 -27
- data/examples/sensor/hcsr04.rb +0 -17
- data/examples/sensor/htu21d.rb +0 -43
- data/examples/sensor/htu31d.rb +0 -33
- data/examples/sensor/neat_tph_readings.rb +0 -32
- data/examples/sensor/qmp6988.rb +0 -51
- data/examples/sensor/rcwl9620.rb +0 -15
- data/examples/sensor/sht3x.rb +0 -32
- data/examples/spi/bitbang_loopback.rb +0 -46
- data/examples/spi/input_register.rb +0 -40
- data/examples/spi/output_register.rb +0 -41
- data/examples/spi/ssd_through_registers.rb +0 -28
- data/examples/spi/two_registers.rb +0 -40
- data/examples/uart/bit_bang_demo.rb +0 -25
- data/examples/uart/board_passthrough.rb +0 -40
- data/examples/uart/hardware_loopback.rb +0 -16
- data/lib/denko/eeprom/built_in.rb +0 -72
- data/lib/denko/fonts.rb +0 -106
- data/test/eeprom/built_in_test.rb +0 -61
- data/test/spi/peripheral_single_pin_test.rb +0 -48
- data/tutorial/01-led/led.fzz +0 -0
- data/tutorial/01-led/led.pdf +0 -0
- data/tutorial/01-led/led.rb +0 -73
- data/tutorial/02-button/button.fzz +0 -0
- data/tutorial/02-button/button.pdf +0 -0
- data/tutorial/02-button/button.rb +0 -65
- data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
- data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
- data/tutorial/03-potentiometer/potentiometer.rb +0 -66
- data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
- data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
- data/tutorial/04-pwm_led/pwm_led.rb +0 -64
- data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
- data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
- data/tutorial/05-rgb_led/rgb_led.rb +0 -58
- data/tutorial/05-rgb_led/rgb_mapping.rb +0 -76
@@ -1,57 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using an ADS1115 ADC over the I2C bus.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
bus = Denko::I2C::Bus.new(board: board)
|
9
|
-
ads = Denko::AnalogIO::ADS1115.new(bus: bus)
|
10
|
-
|
11
|
-
# Helper method so readings look nice.
|
12
|
-
def print_reading(name, raw, voltage)
|
13
|
-
print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - "
|
14
|
-
print "#{name.rjust(18, " ")} | "
|
15
|
-
print "Raw: #{raw.to_s.rjust(6, " ")} | "
|
16
|
-
print "Voltage: "
|
17
|
-
print ("%.10f" % voltage).rjust(13, " ")
|
18
|
-
puts " V"
|
19
|
-
end
|
20
|
-
|
21
|
-
#
|
22
|
-
# Use the ADS1115 directly by writing values to its config registers.
|
23
|
-
# ADS1115#read automatically waits for conversion time and gets the 16-bit reading.
|
24
|
-
# See datasheet for register bitmaps.
|
25
|
-
#
|
26
|
-
# Note: This is the only way to use continuous mode. Subcomponents always use one-shot.
|
27
|
-
#
|
28
|
-
ads.read([0b11000001, 0b10001011]) do |reading|
|
29
|
-
voltage = reading * 0.0001875
|
30
|
-
print_reading("Direct", reading, voltage)
|
31
|
-
end
|
32
|
-
|
33
|
-
#
|
34
|
-
# Or use its BoardProxy interface, adding subcomponents as if it were a Board.
|
35
|
-
# The key adc: can substitute for board: when intializing AnalogIO::Input.
|
36
|
-
# Gain and sample rate bitmasks can be found in the datasheet.
|
37
|
-
#
|
38
|
-
# Input on pin 0, with pin 1 as differential negative input, and 6.144 V full range.
|
39
|
-
diff_input = Denko::AnalogIO::Input.new(adc: ads, pin: 0, negative_pin: 1, gain: 0b000)
|
40
|
-
|
41
|
-
# Input on pin 2 with no negative input (single ended), and 1.024V full range.
|
42
|
-
# Ths one uses a 8 SPS rate, essentially 16x oversampling compared to the default 128.
|
43
|
-
single_input = Denko::AnalogIO::Input.new(adc: ads, pin: 2, gain: 0b011, sample_rate: 0b000)
|
44
|
-
|
45
|
-
# Poll the differential input every second.
|
46
|
-
diff_input.poll(1) do |reading|
|
47
|
-
voltage = reading * diff_input.volts_per_bit
|
48
|
-
print_reading("Differential A1-A0", reading, voltage)
|
49
|
-
end
|
50
|
-
|
51
|
-
# Poll the single ended input every 2 seconds.
|
52
|
-
single_input.poll(2) do |reading|
|
53
|
-
voltage = reading * single_input.volts_per_bit
|
54
|
-
print_reading("Single A2-GN", reading, voltage)
|
55
|
-
end
|
56
|
-
|
57
|
-
sleep
|
@@ -1,65 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using an ADS1118 ADC over the SPI bus.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
bus = Denko::SPI::Bus.new(board: board)
|
9
|
-
ads = Denko::AnalogIO::ADS1118.new(bus: bus, pin: 10)
|
10
|
-
|
11
|
-
# Helper method so readings look nice.
|
12
|
-
def print_reading(name, raw, voltage)
|
13
|
-
print "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - "
|
14
|
-
print "#{name.rjust(18, " ")} | "
|
15
|
-
print "Raw: #{raw.to_s.rjust(6, " ")} | "
|
16
|
-
print "Voltage: "
|
17
|
-
print ("%.10f" % voltage).rjust(13, " ")
|
18
|
-
puts " V"
|
19
|
-
end
|
20
|
-
|
21
|
-
#
|
22
|
-
# Read the ADS1118 internal temperature sensor.
|
23
|
-
# This always uses the 128 SPS mode, and there is no polling method for it.
|
24
|
-
#
|
25
|
-
temperature = ads.temperature_read
|
26
|
-
puts "ADS1118 Temperature: #{temperature} \xC2\xB0C"
|
27
|
-
puts
|
28
|
-
|
29
|
-
#
|
30
|
-
# Use the ADS1118 directly by writing values to its config registers.
|
31
|
-
# ADS1118#read automatically waits for conversion time and gets the 16-bit reading.
|
32
|
-
# See datasheet for register bitmaps.
|
33
|
-
#
|
34
|
-
# Note: This is the only way to use continuous mode. Subcomponents always use one-shot.
|
35
|
-
#
|
36
|
-
ads.read([0b10000001, 0b10001011]) do |reading|
|
37
|
-
voltage = reading * 0.0001875
|
38
|
-
print_reading("Direct", reading, voltage)
|
39
|
-
end
|
40
|
-
|
41
|
-
#
|
42
|
-
# Or use its BoardProxy interface, adding subcomponents as if it were a Board.
|
43
|
-
# The key adc: can substitute for board: when intializing AnalogIO::Input.
|
44
|
-
# Gain and sample rate bitmasks can be found in the datasheet.
|
45
|
-
#
|
46
|
-
# Input on pin 0, with pin 1 as differential negative input, and 6.144 V full range.
|
47
|
-
diff_input = Denko::AnalogIO::Input.new(adc: ads, pin: 0, negative_pin: 1, gain: 0b000)
|
48
|
-
|
49
|
-
# Input on pin 2 with no negative input (single ended), and 1.024V full range.
|
50
|
-
# Ths one uses a 8 SPS rate, essentially 16x oversampling compared to the default 128.
|
51
|
-
single_input = Denko::AnalogIO::Input.new(adc: ads, pin: 2, gain: 0b011, sample_rate: 0b000)
|
52
|
-
|
53
|
-
# Poll the differential input every second.
|
54
|
-
diff_input.poll(1) do |reading|
|
55
|
-
voltage = reading * diff_input.volts_per_bit
|
56
|
-
print_reading("Differential A1-A0", reading, voltage)
|
57
|
-
end
|
58
|
-
|
59
|
-
# Poll the single ended input every 2 seconds.
|
60
|
-
single_input.poll(2) do |reading|
|
61
|
-
voltage = reading * single_input.volts_per_bit
|
62
|
-
print_reading("Single A2-GN", reading, voltage)
|
63
|
-
end
|
64
|
-
|
65
|
-
sleep
|
@@ -1,34 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example looping the Arduino Zero's DAC back into one of its ADC pins.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
#
|
8
|
-
# Arduino Zero: :DAC0 is :A0 is GPIO14
|
9
|
-
# Arduino UNO R4: :DAC is :A0 is GPIO14
|
10
|
-
# ESP32 V1: :DAC0 is GPIO25, :DAC1 is GPIO26, :A4 is GPIO32
|
11
|
-
# ESP32-S2: :DAC0 is GPIO17, :DAC1 is GPIO18, :A4 is GPIO5
|
12
|
-
#
|
13
|
-
# Connect DAC_PIN TO ADC_PIN with a jumper to test.
|
14
|
-
#
|
15
|
-
DAC_PIN = :DAC0
|
16
|
-
ADC_PIN = :A4
|
17
|
-
|
18
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
19
|
-
dac = Denko::AnalogIO::Output.new(pin: DAC_PIN, board: board)
|
20
|
-
adc = Denko::AnalogIO::Input.new(pin: ADC_PIN, board: board)
|
21
|
-
|
22
|
-
#
|
23
|
-
# Read values should be approximately 4x the written values, since Board#new tries to
|
24
|
-
# set output resolution at 8-bits and input to 10-bits. Not configurable on all chips.
|
25
|
-
# Scale may be off but, readings should still be proportional.
|
26
|
-
#
|
27
|
-
[0, 32, 64, 128, 192, 255].each do |output_value|
|
28
|
-
dac.write output_value
|
29
|
-
sleep 1
|
30
|
-
loopback_value = adc.read
|
31
|
-
puts "ADC reads: #{loopback_value} when DAC writes: #{output_value}"
|
32
|
-
end
|
33
|
-
|
34
|
-
board.finish_write
|
data/examples/analog_io/input.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Use your board's analog-to-digital-converter(ADC) pins with AnalogIO::Input.
|
3
|
-
# ADC inputs can be connected to sensors that produce variable output voltage,
|
4
|
-
# such as light dependent resistors, or a temperature sensor like the TMP36.
|
5
|
-
#
|
6
|
-
require 'bundler/setup'
|
7
|
-
require 'denko'
|
8
|
-
|
9
|
-
PIN = :A0
|
10
|
-
|
11
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
12
|
-
input = Denko::AnalogIO::Input.new(pin: PIN, board: board)
|
13
|
-
|
14
|
-
# Single read. Blocks main thread during read, then runs given block with the value.
|
15
|
-
input.read { |value| puts "#{Time.now} Single read #1: #{value}" }
|
16
|
-
|
17
|
-
# Poll repeatedly does single reads, in a separate thread, with an interval in seconds.
|
18
|
-
# Given block is saved as a callback, and runs each time a value is received.
|
19
|
-
input.poll(0.5) { |value| puts "#{Time.now} Polling: #{value}" }
|
20
|
-
|
21
|
-
# Does not block main thread, so wait for some values.
|
22
|
-
sleep 3
|
23
|
-
# Stop polling, automatically removing callback from #poll.
|
24
|
-
input.stop
|
25
|
-
|
26
|
-
# "Listening" is where the Board keeps time, reading the ADC at a small interval
|
27
|
-
# and continuously sends values, until #stop is called.
|
28
|
-
# Powers of 2 from 1 to 128 (in milliseconds) are supported for listener intervals.
|
29
|
-
input.listen(32) { |value| puts "#{Time.now} Listening: #{value}" }
|
30
|
-
sleep 0.5
|
31
|
-
|
32
|
-
# Stop listening. Automatically removes the #listen callback.
|
33
|
-
input.stop
|
34
|
-
|
35
|
-
# This adds a persistent callback, which runs no matter how a read happens.
|
36
|
-
# It will not be removed by #stop.
|
37
|
-
input.on_data { |value| puts "#{Time.now} Persistent callback: #{value}" }
|
38
|
-
|
39
|
-
# This is a persistent callback with a custom key.
|
40
|
-
input.on_data(:test) { |value| puts "#{Time.now} Keyed callback: #{value}"}
|
41
|
-
|
42
|
-
# If we do a single read, the two persistent callbacks, and the block given, should run once each.
|
43
|
-
input.read { |value| puts "#{Time.now} Single read #2: #{value}" }
|
44
|
-
|
45
|
-
# If we listen, the two persistent callbacks, and the block given should run many times.
|
46
|
-
input.listen(8) { |value| puts "#{Time.now } Listening again: #{value}" }
|
47
|
-
sleep 0.125
|
48
|
-
input.stop
|
49
|
-
|
50
|
-
# Remove callbacks keyed with :test.
|
51
|
-
input.remove_callbacks(:test)
|
52
|
-
|
53
|
-
# Remove all callbacks.
|
54
|
-
input.remove_callbacks
|
55
|
-
|
56
|
-
board.finish_write
|
@@ -1,27 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# This example shows how to smooth the input of an AnalogIO::Input.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PIN = :A0
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
input = Denko::AnalogIO::Input.new(pin: PIN, board: board)
|
11
|
-
|
12
|
-
# Enable smoothing on the input using the last 16 values.
|
13
|
-
input.smoothing = true
|
14
|
-
input.smoothing_size = 16
|
15
|
-
|
16
|
-
# Use the slowest listener possible.
|
17
|
-
input.listen(128)
|
18
|
-
|
19
|
-
#
|
20
|
-
# With these settings, the input's state should gradually change (~2 seconds),
|
21
|
-
# if you switch its supply from Vcc to Ground (or vice versa), instead of instantaneously.
|
22
|
-
#
|
23
|
-
# Print the state every 1/4 second. Change the voltage being input to the pin to see results.
|
24
|
-
loop do
|
25
|
-
puts input.state
|
26
|
-
sleep(0.25)
|
27
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example for a potentiometer.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PIN = :A0
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
pot = Denko::AnalogIO::Potentiometer.new(pin: PIN, board: board)
|
11
|
-
|
12
|
-
last_percent = nil
|
13
|
-
pot.on_data do |reading|
|
14
|
-
# Map reading to a decimal between 0 and 1.
|
15
|
-
fraction = reading / board.adc_high.to_f
|
16
|
-
|
17
|
-
# Linearization hack for audio taper potentiometers.
|
18
|
-
# Adjust k for different tapers. This was an A500K.
|
19
|
-
k = 5
|
20
|
-
linearized = (fraction * (k + 1)) / ((k * fraction) + 1)
|
21
|
-
# Use this for linear potentiometers instead.
|
22
|
-
# linearized = fraction
|
23
|
-
|
24
|
-
percent = (linearized * 100).round
|
25
|
-
unless percent == last_percent
|
26
|
-
puts "Potentiometer: #{percent.to_s.rjust(3, " ")}%"
|
27
|
-
last_percent = percent
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
sleep
|
@@ -1,34 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Diagnostic to confirm board is receiving binary data
|
3
|
-
# (in aux message) properly.
|
4
|
-
#
|
5
|
-
require 'bundler/setup'
|
6
|
-
require 'denko'
|
7
|
-
|
8
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
9
|
-
echo = Denko::Connection::BinaryEcho.new(board: board, pin: 253)
|
10
|
-
|
11
|
-
min_byte = 0
|
12
|
-
max_byte = 255
|
13
|
-
|
14
|
-
expected_result = (min_byte..max_byte).to_a.join(',') << ','
|
15
|
-
|
16
|
-
waiting = false
|
17
|
-
wait_mutex = Mutex.new
|
18
|
-
|
19
|
-
echo.on_data do |data|
|
20
|
-
if data == expected_result
|
21
|
-
puts "#{Time.now.strftime '%Y-%m-%d %H:%M:%S'} - Echo received"
|
22
|
-
wait_mutex.synchronize { waiting = false }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
loop do
|
27
|
-
wait_mutex.synchronize do
|
28
|
-
unless waiting
|
29
|
-
echo.test_range(min: min_byte, max: max_byte)
|
30
|
-
waiting = true
|
31
|
-
end
|
32
|
-
end
|
33
|
-
sleep 0.001
|
34
|
-
end
|
data/examples/connection/tcp.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Connect to a Board via TCP. This works for WiFi and Ethernet sketches.
|
3
|
-
# Default port is 3466, and must match the port the Board was flashed to listen on.
|
4
|
-
#
|
5
|
-
require 'bundler/setup'
|
6
|
-
require 'denko'
|
7
|
-
|
8
|
-
IP_ADDRESS = "192.168.0.52"
|
9
|
-
PORT = 3466
|
10
|
-
PIN = :LED_BUILTIN
|
11
|
-
|
12
|
-
connection = Denko::Connection::TCP.new(IP_ADDRESS, PORT)
|
13
|
-
board = Denko::Board.new(connection)
|
14
|
-
led = Denko::LED.new(board: board, pin: PIN)
|
15
|
-
|
16
|
-
[:on, :off].cycle do |switch|
|
17
|
-
led.send(switch)
|
18
|
-
sleep 0.5
|
19
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Simple button example.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
PIN = 3
|
8
|
-
|
9
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
10
|
-
button = Denko::DigitalIO::Button.new board: board,
|
11
|
-
pin: PIN,
|
12
|
-
mode: :input_pullup
|
13
|
-
|
14
|
-
button.up { puts "Button released at #{Time.now.strftime '%H:%M:%S'}" }
|
15
|
-
button.down { puts "Button pressed at #{Time.now.strftime '%H:%M:%S'}" }
|
16
|
-
|
17
|
-
sleep
|
@@ -1,17 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Use Relays to work with higher voltage circuits. This example
|
3
|
-
# closes and opens a relay to send a 500ms pulse on a 12V control circuit.
|
4
|
-
#
|
5
|
-
require 'bundler/setup'
|
6
|
-
require 'denko'
|
7
|
-
|
8
|
-
PIN = 6
|
9
|
-
|
10
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
11
|
-
relay = Denko::DigitalIO::Relay.new(board: board, pin: PIN)
|
12
|
-
|
13
|
-
relay.close
|
14
|
-
sleep(0.500)
|
15
|
-
relay.open
|
16
|
-
|
17
|
-
board.finish_write
|
@@ -1,36 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# KY-040 (30 detent) rotary encoder on a microcontroller, listener at 1ms.
|
3
|
-
#
|
4
|
-
# WARNING: This method is not precise and may miss steps. Don't use for anything
|
5
|
-
# that requires all steps to be read for exact positioning or high speed.
|
6
|
-
#
|
7
|
-
require 'bundler/setup'
|
8
|
-
require 'denko'
|
9
|
-
|
10
|
-
PIN_A = 4
|
11
|
-
PIN_B = 5
|
12
|
-
|
13
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
14
|
-
|
15
|
-
# Other options and their default values:
|
16
|
-
#
|
17
|
-
# divider: 1 # read every divider milliseconds (Board only)
|
18
|
-
# debounce_time: 1 # software debounce in microseconds (PiBoard only)
|
19
|
-
# counts_per_revolution: 60 # for generic 30 detent rotary encoders
|
20
|
-
#
|
21
|
-
encoder = Denko::DigitalIO::RotaryEncoder.new board: board,
|
22
|
-
pins: { a: PIN_A, b: PIN_B }
|
23
|
-
|
24
|
-
# Reverse direction.
|
25
|
-
# encoder.reverse
|
26
|
-
|
27
|
-
# Reset count and angle to 0.
|
28
|
-
# encoder.reset
|
29
|
-
|
30
|
-
encoder.add_callback do |state|
|
31
|
-
change_printable = state[:change].to_s
|
32
|
-
change_printable = "+#{change_printable}" if state[:change] > 0
|
33
|
-
puts "Encoder Change: #{change_printable} | Count: #{state[:count]} | Angle: #{state[:angle]}\xC2\xB0"
|
34
|
-
end
|
35
|
-
|
36
|
-
sleep
|
Binary file
|
data/examples/display/hd44780.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# This example writes "Hello World!" in the display
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
# These pins match the SainSmart LCD Keypad Shield for Arduino boards.
|
8
|
-
RS = 8
|
9
|
-
EN = 9
|
10
|
-
D4 = 4
|
11
|
-
D5 = 5
|
12
|
-
D6 = 6
|
13
|
-
D7 = 7
|
14
|
-
|
15
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
16
|
-
lcd = Denko::Display::HD44780.new board: board,
|
17
|
-
pins: { rs: RS, enable: EN, d4: D4, d5: D5, d6: D6, d7: D7 },
|
18
|
-
cols: 16,
|
19
|
-
rows: 2
|
20
|
-
|
21
|
-
# Bitmap for a custom character. 5 bits wide x 8 high.
|
22
|
-
# Useful for generating these: https://omerk.github.io/lcdchargen/
|
23
|
-
heart = [ 0b00000,
|
24
|
-
0b00000,
|
25
|
-
0b01010,
|
26
|
-
0b11111,
|
27
|
-
0b11111,
|
28
|
-
0b01110,
|
29
|
-
0b00100,
|
30
|
-
0b00000 ]
|
31
|
-
|
32
|
-
# Define the character in CGRAM address 2. 0-7 are usable.
|
33
|
-
lcd.create_char(2, heart)
|
34
|
-
|
35
|
-
# Need to call home/clear/set_cursor so we go back to writing DDRAM.
|
36
|
-
lcd.home
|
37
|
-
|
38
|
-
# End the first line with the heart by writing its CGRAM address.
|
39
|
-
lcd.print "Hello World! "
|
40
|
-
lcd.write(2)
|
41
|
-
|
42
|
-
# Display a clock on second line, updating approximately every second.
|
43
|
-
loop do
|
44
|
-
lcd.move_to 0,1
|
45
|
-
lcd.print(Time.now.strftime("%I:%M:%S"))
|
46
|
-
sleep 1
|
47
|
-
end
|
data/examples/display/ssd1306.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using an SSD1306 driven OLED screen over I2C.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
|
9
|
-
# The SSD1306 OLED connects to either an I2C or SPI bus, depending on the model you have.
|
10
|
-
# Bus setup exampels in order:
|
11
|
-
# I2C Hardware
|
12
|
-
# I2C Bit-Bang
|
13
|
-
# SPI Hardware
|
14
|
-
# SPI Bit-Bang
|
15
|
-
#
|
16
|
-
bus = Denko::I2C::Bus.new(board: board)
|
17
|
-
# bus = Denko::I2C::BitBang.new(board: board, pins: {scl: 4, sda: 5})
|
18
|
-
# bus = Denko::SPI::Bus.new(board: board)
|
19
|
-
# bus = Denko::SPI::BitBang.new(board: board, pins: {clock: 13, output: 11})
|
20
|
-
|
21
|
-
# I2C OLED, connected to I2C SDA and SCL.
|
22
|
-
oled = Denko::Display::SSD1306.new(bus: bus, rotate: true) # address: 0x3C is default
|
23
|
-
# oled = Denko::Display::SH1106.new(bus: bus,rotate: true) # address: 0x3C is default
|
24
|
-
|
25
|
-
# SPI OLED, connected to SPI CLK and MOSI pins.
|
26
|
-
# select: and dc: pins must be given. reset is optional (can be pulled high instead).
|
27
|
-
# oled = Denko::Display::SSD1306.new(bus: bus, pins: { select: 10, dc: 7, reset: 8 }, rotate: true)
|
28
|
-
# oled = Denko::Display::SH1106.new(bus: bus, pins: { select: 10, dc: 7, reset: 8}, rotate: true)
|
29
|
-
|
30
|
-
# Draw some text on the OLED's canvas (a Ruby memory buffer).
|
31
|
-
canvas = oled.canvas
|
32
|
-
canvas.text_cursor = [27,60]
|
33
|
-
canvas.print("Hello World!")
|
34
|
-
|
35
|
-
# Add some shapes to the canvas.
|
36
|
-
baseline = 40
|
37
|
-
canvas.rectangle(10, baseline, 30, -30)
|
38
|
-
canvas.circle(66, baseline - 15, 15)
|
39
|
-
canvas.triangle(87, baseline, 117, baseline, 102, baseline - 30)
|
40
|
-
|
41
|
-
# Send the canvas to the OLED's graphics RAM so it shows.
|
42
|
-
oled.draw
|
43
|
-
board.finish_write
|
@@ -1,29 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example using the SSD1306 OLED built into the LOLIN ES32-S2 PICO
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
|
9
|
-
# The OLED's reset pin on this board isn't tied high. Do it manually.
|
10
|
-
reset = Denko::DigitalIO::Output.new(board: board, pin: 18)
|
11
|
-
reset.high
|
12
|
-
|
13
|
-
bus = Denko::I2C::Bus.new(board: board, pin: :SDA)
|
14
|
-
oled = Denko::Display::SSD1306.new(bus: bus, width: 128, height: 32)
|
15
|
-
canvas = oled.canvas
|
16
|
-
|
17
|
-
# Draw some text on the OLED's canvas (a Ruby memory buffer).
|
18
|
-
canvas.text_cursor = [27,31]
|
19
|
-
canvas.print("Hello World!")
|
20
|
-
|
21
|
-
# Add some shapes to the canvas.
|
22
|
-
baseline = 15
|
23
|
-
canvas.rectangle(10, baseline, 15, -15)
|
24
|
-
canvas.circle(66, baseline - 7, 8)
|
25
|
-
canvas.triangle(102, baseline, 118, baseline, 110, baseline - 15)
|
26
|
-
|
27
|
-
# Send the canvas to the OLED's graphics RAM so it shows.
|
28
|
-
oled.draw
|
29
|
-
board.finish_write
|
data/examples/eeprom/built_in.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example showing how to load, modify and save the board's EEPROM.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
8
|
-
|
9
|
-
# Initialization automatically gets all EEPROM data from the board.
|
10
|
-
# eeprom = Denko::EEPROM::BuiltIn(board: board)
|
11
|
-
eeprom = board.eeprom
|
12
|
-
|
13
|
-
# EEPROM size reported by the board.
|
14
|
-
puts "EEPROM Size: #{eeprom.length} bytes"
|
15
|
-
|
16
|
-
# Write values like an array.
|
17
|
-
eeprom[0] = 128
|
18
|
-
eeprom[1] = 127
|
19
|
-
|
20
|
-
# Changes do not save to the board automatically.
|
21
|
-
# Call #save to write to the board, and automatically reload from it.
|
22
|
-
eeprom.save
|
23
|
-
|
24
|
-
# Read values like an array.
|
25
|
-
puts "Address 0 contains: #{eeprom[0]}"
|
26
|
-
|
27
|
-
# Enumerate like an array.
|
28
|
-
eeprom.each_with_index do |byte, address|
|
29
|
-
if address == 1
|
30
|
-
puts "Address #{address} contains #{byte}"
|
31
|
-
end
|
32
|
-
end
|
data/examples/i2c/search.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Example that shows the default I2C bus pins, and addresses of any
|
3
|
-
# devices connected to the bus.
|
4
|
-
#
|
5
|
-
require 'bundler/setup'
|
6
|
-
require 'denko'
|
7
|
-
|
8
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
9
|
-
|
10
|
-
# If board has a map, show the pins to the user.
|
11
|
-
if board.map
|
12
|
-
puts "Detected board: #{board.name}"
|
13
|
-
sda = board.map[:SDA] || board.map[:SDA0]
|
14
|
-
scl = board.map[:SCL] || board.map[:SCL0]
|
15
|
-
puts "Using default I2C interface on pins #{sda} (SDA) and #{scl} (SCL)"
|
16
|
-
else
|
17
|
-
puts "Pin map not available for this board. Using default interface, but SCL and SDA pins unknown"
|
18
|
-
end
|
19
|
-
puts
|
20
|
-
|
21
|
-
# Board's hardware I2C interface on predetermined pins.
|
22
|
-
bus = Denko::I2C::Bus.new(board: board)
|
23
|
-
# Bit-banged I2C on any pins.
|
24
|
-
# bus = Denko::I2C::BitBang.new(board: board, pins: {scl: 8, sda: 9})
|
25
|
-
|
26
|
-
bus.search
|
27
|
-
|
28
|
-
if bus.found_devices.empty?
|
29
|
-
puts "No devices found on I2C bus"
|
30
|
-
else
|
31
|
-
puts "I2C device addresses found:"
|
32
|
-
bus.found_devices.each do |address|
|
33
|
-
# Print as hexadecimal.
|
34
|
-
puts "0x#{address.to_s(16).upcase}"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
puts
|
39
|
-
board.finish_write
|
@@ -1,32 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Walk a single pixel along the length of an APA102 strip and back,
|
3
|
-
# changing color each time it returns to position 0.
|
4
|
-
#
|
5
|
-
require 'bundler/setup'
|
6
|
-
require 'denko'
|
7
|
-
|
8
|
-
RED = [255, 0, 0]
|
9
|
-
GREEN = [0, 255, 0]
|
10
|
-
BLUE = [0, 0, 255]
|
11
|
-
WHITE = [255, 255, 255]
|
12
|
-
COLORS = [RED, GREEN, BLUE, WHITE]
|
13
|
-
PIXELS = 8
|
14
|
-
|
15
|
-
# Move along the strip and back, one pixel at a time.
|
16
|
-
positions = (0..PIXELS-1).to_a + (1..PIXELS-2).to_a.reverse
|
17
|
-
|
18
|
-
# Use the default hardware SPI bus.
|
19
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
20
|
-
bus = Denko::SPI::Bus.new(board: board)
|
21
|
-
strip = Denko::LED::APA102.new(bus: bus, length: PIXELS)
|
22
|
-
|
23
|
-
loop do
|
24
|
-
COLORS.each do |color|
|
25
|
-
positions.each do |index|
|
26
|
-
strip.clear
|
27
|
-
strip[index] = color
|
28
|
-
strip.show
|
29
|
-
sleep 0.025
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
data/examples/led/apa102_fade.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Fade test for APA102 LED strip.
|
3
|
-
#
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'denko'
|
6
|
-
|
7
|
-
RED = [255, 0, 0]
|
8
|
-
GREEN = [0, 255, 0]
|
9
|
-
BLUE = [0, 0, 255]
|
10
|
-
WHITE = [255, 255, 255]
|
11
|
-
COLORS = [RED, GREEN, BLUE, WHITE]
|
12
|
-
PIXELS = 4
|
13
|
-
|
14
|
-
# Get all the brightness values as an array.
|
15
|
-
brightness_steps = (0..31).to_a + (1..30).to_a.reverse
|
16
|
-
|
17
|
-
# Use the default hardware SPI bus.
|
18
|
-
board = Denko::Board.new(Denko::Connection::Serial.new)
|
19
|
-
bus = Denko::SPI::Bus.new(board: board)
|
20
|
-
strip = Denko::LED::APA102.new(bus: bus, length: PIXELS)
|
21
|
-
|
22
|
-
strip[0] = RED
|
23
|
-
strip[1] = GREEN
|
24
|
-
strip[2] = BLUE
|
25
|
-
strip[3] = WHITE
|
26
|
-
|
27
|
-
# Fade all 4 in sync using global brightness control.
|
28
|
-
brightness_steps.each do |value|
|
29
|
-
strip.brightness = value
|
30
|
-
strip.show
|
31
|
-
sleep 0.05
|
32
|
-
end
|
33
|
-
|
34
|
-
# Set 4th pixel back to full brightness white.
|
35
|
-
strip[3] = WHITE + [31]
|
36
|
-
|
37
|
-
# Fade per-pixel, in different directions.
|
38
|
-
brightness_steps.cycle do |value|
|
39
|
-
strip[0] = RED + [value]
|
40
|
-
strip[1] = GREEN + [31 - value]
|
41
|
-
strip[2] = BLUE + [value]
|
42
|
-
strip.show
|
43
|
-
sleep 0.025
|
44
|
-
end
|