New Cable, debounce
This commit is contained in:
+46
-7
@@ -1,21 +1,32 @@
|
||||
# ButtonCtl
|
||||
|
||||

|
||||
|
||||
### Dependencies
|
||||
|
||||
- RPi python3-rpi.gpio
|
||||
|
||||
```sh
|
||||
sudo apt install python3-rpi-gpio
|
||||
```
|
||||
|
||||
- OpenSSH client
|
||||
|
||||
```sh
|
||||
sudo apt install openssh
|
||||
```
|
||||
|
||||
- circuitpython libraries for neopixel
|
||||
|
||||
```sh
|
||||
pip3 install adafruit-circuitpython-neopixel
|
||||
```
|
||||
|
||||
- SPI
|
||||
Enable SPI in raspi bootloader for GPIO10
|
||||
|
||||
### Install
|
||||
|
||||
```sh
|
||||
cd buttonctl/1og
|
||||
./service.sh # create systemd .service file
|
||||
@@ -23,25 +34,51 @@ sudo systemctl enable --now buttond # start and autostart at boot
|
||||
```
|
||||
|
||||
### Wiring
|
||||
- pin 23: left button input (pull-down)
|
||||
|
||||
- pin 23: left/aerie button input (pull-down)
|
||||
- pin 24: center button input (pull-down)
|
||||
- pin 22: right button input (pull-down)
|
||||
- pin 18: neopixel data
|
||||
- pin 22: right/cellar button input (pull-down)
|
||||
- pin 12: neopixel data
|
||||
- pin 4: (pull-down)
|
||||
|
||||
#### 6-pin socket
|
||||
|
||||
**GPIO**
|
||||
|
||||
| | Notch | |
|
||||
|------|-------|----|
|
||||
| 23 | 24 | 12 |
|
||||
| 3.3V | GND | 22 |
|
||||
|
||||
**KiCAD**
|
||||
|
||||
| | Notch | |
|
||||
|---|-------|---|
|
||||
| 5 | 3 | 1 |
|
||||
| 6 | 4 | 2 |
|
||||
|
||||
**UV Klemme**
|
||||
|
||||
| | Notch | |
|
||||
|------------------------------------------------------------|---------------------------------------------------------------|-----------------------------------------------------------|
|
||||
| <span style="background: green; color: white;">grün</span> | <span style="background: brown; color: white;">braun</span> | <span style="background: blue; color: white;">blau</span> |
|
||||
| <span style="background: red;">rot</span> | <span style="background: black; color: white;">schwarz</span> | <span style="background: yellow">gelb</span> |
|
||||
|
||||

|
||||
|
||||
- led strip:
|
||||
```
|
||||
(25-36) (13-24) (1-12)
|
||||
AERIE KELLER
|
||||
|
||||
(counter-clockwise)
|
||||
```
|
||||
(1-12) (13-24) (25-36)
|
||||
AERIE KELLER
|
||||
|
||||
(counter-clockwise, top is first)
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Open Door
|
||||
|
||||
<span style="color:red">◼</span>
|
||||
<span style="color:black">◼</span>
|
||||
<span style="color:red">◼</span>
|
||||
@@ -62,6 +99,7 @@ sudo systemctl enable --now buttond # start and autostart at boot
|
||||
<span style="color:red">◼</span>
|
||||
|
||||
### Abort
|
||||
|
||||
<span style="color:red">◼</span>
|
||||
<span style="color:black">◼</span>
|
||||
<span style="color:red">◼</span>
|
||||
@@ -77,6 +115,7 @@ sudo systemctl enable --now buttond # start and autostart at boot
|
||||
<span style="color:red">◼</span>
|
||||
|
||||
### No-Op
|
||||
|
||||
<span style="color:red">◼</span>
|
||||
<span style="color:black">◼</span>
|
||||
<span style="color:red">◼</span>
|
||||
|
||||
+16
-16
@@ -122,14 +122,10 @@ class StateMenu:
|
||||
self.next_state = None
|
||||
self.reset_state()
|
||||
|
||||
self.mqtt = FoodoorMQTT(["oben", "unten"])
|
||||
self.mqtt.message_cbs.append(lambda *_: self.draw())
|
||||
self.mqtt.connect()
|
||||
|
||||
self.strip = neopixel.NeoPixel(board.D18, 36, brightness=0.5, pixel_order=neopixel.GRB, auto_write=False)
|
||||
self.strip_cellar = SubStrip(self.strip, pixel=list(range(12)))
|
||||
self.strip = neopixel.NeoPixel(board.D12, 36, brightness=0.5, pixel_order=neopixel.GRB, auto_write=False)
|
||||
self.strip_aerie = SubStrip(self.strip, pixel=list(range(12)))
|
||||
self.strip_center = SubStrip(self.strip, pixel=list(range(12, 24)))
|
||||
self.strip_aerie = SubStrip(self.strip, pixel=list(range(24, 36)))
|
||||
self.strip_cellar = SubStrip(self.strip, pixel=list(range(24, 36)))
|
||||
|
||||
self.strip_loop = SubStrip(self.strip, [
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8,
|
||||
@@ -143,6 +139,10 @@ class StateMenu:
|
||||
"aerie": Door("10.42.1.28", "open", "close"),
|
||||
}
|
||||
|
||||
self.mqtt = FoodoorMQTT(["oben", "unten"])
|
||||
self.mqtt.message_cbs.append(lambda *_: self.draw())
|
||||
self.mqtt.connect()
|
||||
|
||||
def reset_state(self):
|
||||
self.state = StateMenu.SHOW_STATE
|
||||
self.change_target = None
|
||||
@@ -260,24 +260,24 @@ def main():
|
||||
btn_aerie.switch_to_input(digitalio.Pull.DOWN)
|
||||
|
||||
menu = StateMenu()
|
||||
btn_locked = False # For waiting while a button is still pressed
|
||||
btn_locked = 0 # For waiting while a button is still pressed
|
||||
|
||||
try:
|
||||
while True:
|
||||
if not btn_cellar.value:
|
||||
if btn_cellar.value:
|
||||
if not btn_locked:
|
||||
menu.button_pressed("cellar")
|
||||
btn_locked = True
|
||||
elif not btn_center.value:
|
||||
btn_locked = 10
|
||||
elif btn_center.value:
|
||||
if not btn_locked:
|
||||
menu.button_pressed("center")
|
||||
btn_locked = True
|
||||
elif not btn_aerie.value:
|
||||
btn_locked = 10
|
||||
elif btn_aerie.value:
|
||||
if not btn_locked:
|
||||
menu.button_pressed("aerie")
|
||||
btn_locked = True
|
||||
else:
|
||||
btn_locked = False
|
||||
btn_locked = 10
|
||||
elif btn_locked:
|
||||
btn_locked -= 1
|
||||
|
||||
menu.tick()
|
||||
time.sleep(.01)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 408 KiB |
@@ -0,0 +1,93 @@
|
||||
title: Power Pi
|
||||
board: rpi4
|
||||
|
||||
devices:
|
||||
- name: S0
|
||||
pins:
|
||||
- { name: S0-, role: GND }
|
||||
- { name: S0+, role: gpio }
|
||||
|
||||
- name: Buttons
|
||||
pins:
|
||||
- { name: Cellar, role: gpio }
|
||||
- { name: Center, role: gpio }
|
||||
- { name: Aerie, role: gpio }
|
||||
- { name: WS2812, role: gpio }
|
||||
- { name: Power, role: 5V }
|
||||
- { name: Ground, role: GND }
|
||||
|
||||
- name: I2C Repeater
|
||||
pins:
|
||||
- { name: 5V, role: 5V }
|
||||
- { name: 3V3, role: 3V3 }
|
||||
- { name: Ground, role: GND }
|
||||
- { name: SDA, role: I2C_SDA }
|
||||
- { name: SCL, role: I2C_SCL }
|
||||
- { name: GPIO17, role: gpio }
|
||||
|
||||
connections:
|
||||
- board_pin: 15 # 22
|
||||
device: Buttons
|
||||
device_pin: Cellar
|
||||
color: yellow
|
||||
- board_pin: 18 # 24
|
||||
device: Buttons
|
||||
device_pin: Center
|
||||
color: brown
|
||||
- board_pin: 16 # 23
|
||||
device: Buttons
|
||||
device_pin: Aerie
|
||||
color: green
|
||||
|
||||
- board_pin: 19 # 10
|
||||
device: Buttons
|
||||
device_pin: WS2812
|
||||
color: blue
|
||||
|
||||
- board_pin_role: GND
|
||||
device: Buttons
|
||||
device_pin: Ground
|
||||
color: black
|
||||
- board_pin_role: 5V
|
||||
device: Buttons
|
||||
device_pin: Power
|
||||
color: red
|
||||
|
||||
- board_pin_role: 5V
|
||||
device: I2C Repeater
|
||||
device_pin: 5V
|
||||
color: red
|
||||
- board_pin_role: 3V3
|
||||
device: I2C Repeater
|
||||
device_pin: 3V3
|
||||
color: orange
|
||||
- board_pin_role: GND
|
||||
device: I2C Repeater
|
||||
device_pin: Ground
|
||||
color: black
|
||||
|
||||
- board_pin: 3 # 2
|
||||
device: I2C Repeater
|
||||
device_pin: SDA
|
||||
color: green
|
||||
- board_pin: 5 # 3
|
||||
device: I2C Repeater
|
||||
device_pin: SCL
|
||||
color: gray
|
||||
- board_pin: 11 # 17
|
||||
device: I2C Repeater
|
||||
device_pin: GPIO17
|
||||
color: pink
|
||||
|
||||
- board_pin: 12 # 18
|
||||
device: S0
|
||||
device_pin: S0+
|
||||
color: yellow
|
||||
components:
|
||||
- type: resistor
|
||||
value: 10kΩ
|
||||
position: .9
|
||||
- board_pin_role: GND
|
||||
device: S0
|
||||
device_pin: S0-
|
||||
color: black
|
||||
Reference in New Issue
Block a user