An open API service indexing awesome lists of open source software.

https://github.com/josverl/techniek_lamp


https://github.com/josverl/techniek_lamp

Last synced: about 2 months ago
JSON representation

Awesome Lists containing this project

README

          

# Documentatie voor `main.py`

## Hoe de tafellamp te gebruiken en in te stellen

De tafellamp biedt een reeks functies waarmee gebruikers de helderheid en kleur kunnen aanpassen, evenals de mogelijkheid om aangepaste kleuren op te slaan. Hieronder vindt u een overzicht van hoe u de lamp kunt gebruiken:

1. **Helderheid instellen**:
- De helderheid van de lamp kan worden aangepast met behulp van een draaiknop (rotary encoder).
- Door de knop te draaien, kunt u de helderheid instellen tussen 0 (uit) en 254 (maximale helderheid).

2. **Kleur instellen**:
- De kleur van de lamp kan worden ingesteld met behulp van RGB-waarden (rood, groen, blauw) of via vooraf ingestelde kleurprofielen.
door op de knop te klikken wisselt de instelling tussen de volgende modi:
- **Dimmen**: Hiermee kunt u de helderheid van de lamp aanpassen.
- **Rood**: Regel de rode kleur.
- **Groen**: regel de groene kleur.
- **Blauw**: regel de blauwe kleur.
Om te volgen welke kleur wordt ingesteld, wordt de huidige kleur weergegeven de 1e led.

3. **Dubbelklik - Kleuren opslaan**:
- Gebruikers kunnen aangepaste kleuren opslaan door the dubbelklikken.

4. **Lange klik - Terug naar opgeslagen kleur**:
- Een lange druk op de knop zet de lamp terug naar de opgeslagen standaardinstellingen.

# Developer documentation

## Overzicht van `main.py`

Het `main.py` bestand bevat de hoofdlogica voor de asynchroon aangestuurde tafellamp. Het project is gebouwd met MicroPython en gebruikt async/await patronen voor gelijktijdige verwerking van gebruikersinvoer en lamp-uitgangen.

### Architectuur

Het systeem is georganiseerd rond de `aLight` klasse, die alle lamp-functionaliteit beheert:

#### Hardware Setup
- **Encoder**: Rotary encoder op pinnen 4 en 6 voor waarde-aanpassing
- **Button**: Drukknop op pin 28 voor toestandswijzigingen
- **NeoPixels**:
- `np1`: Enkele pixel op pin 16 (hoofdverlichting)
- `np2`: 10-pixel strip op pin 29 (status-indicatie)
- **Ground pinnen**: Pin 5 en 26 gebruikt als ground voor encoder en knop

#### State Management
Het systeem gebruikt vier toestanden gedefinieerd in de `State` klasse:
- `DIM` (0): Helderheid aanpassen
- `RED` (1): Rode kleurcomponent aanpassen
- `GREEN` (2): Groene kleurcomponent aanpassen
- `BLUE` (3): Blauwe kleurcomponent aanpassen

#### Async Event Handling
Het systeem gebruikt event-driven programmering met de volgende handlers:
- `handle_button_press()`: Schakelt tussen toestanden bij korte druk
- `handle_button_double()`: Slaat huidige instellingen op bij dubbelklik
- `handle_button_long()`: Reset naar opgeslagen standaarden bij lange druk
- `handle_button_release()`: Verwerkt knop-loslaten events

#### Data Persistence
- Instellingen worden opgeslagen in `defaults.json`
- `load_defaults()`: Laadt opgeslagen helderheid en kleur bij opstarten
- `save_defaults()`: Slaat huidige instellingen op naar bestand

#### LED Control
- `set_neopixel()`: Berekent en toepast RGB-waarden op basis van helderheid
- `update_leds()`: Updates LED-staat gebaseerd op encoder-positie en huidige modus
- `set_encoder_state()`: Configureert encoder-waarde en status-LED per toestand

#### Memory Management
- `housekeeping()`: Draait elke 30 seconden garbage collection
- Dynamische garbage collection threshold aanpassing

### Belangrijke Features
- **Asynchrone verwerking**: Alle I/O en gebruikersinteractie is non-blocking
- **Visual feedback**: Status-LED toont huidige aanpassingsmodus
- **Foutafhandeling**: Globale exception handler voor debugging
- **REPL ondersteuning**: `aiorepl` voor interactieve debugging tijdens runtime

### Dependencies

Het project heeft verschillende dependencies die geïnstalleerd moeten worden voor correct functioneren:

#### Core MicroPython Libraries
- `asyncio`: Standaard MicroPython library voor asynchrone programmering
- `json`: Voor het lezen/schrijven van configuratie bestanden
- `gc`: Garbage collection en memory management
- `machine`: Hardware interface (Pin, etc.)
- `neopixel`: LED strip control library

#### External Libraries (via mip)
Deze libraries worden geïnstalleerd via de `mip.ps1` script:

- **`primitives.encoder`**: Asynchrone rotary encoder driver
- Bron: `github:peterhinch/micropython-async/v3/primitives`
- Gebruikt voor het afhandelen van encoder rotatie events

- **`primitives.pushbutton`**: Asynchrone pushbutton driver
- Bron: `github:peterhinch/micropython-async/v3/primitives`
- Ondersteunt press, double-click, long-press en release events

- **`aiorepl`**: Asynchrone REPL ondersteuning
- Bron: `aiorepl` via mip
- Maakt debugging mogelijk tijdens runtime zonder het hoofdprogramma te onderbreken

- **`typing`**: Type hints ondersteuning voor MicroPython
- Bron: `github:josverl/micropython-stubs/mip/typing.mpy`
- Verbetert code leesbaarheid en IDE ondersteuning

#### Installation
Alle dependencies kunnen geïnstalleerd worden door het uitvoeren van het `mip.ps1` script:
```powershell
.\mip.ps1
```

Dit script installeert ook de firmware en alle benodigde libraries automatisch.

#### Hardware Dependencies
- **PIMORONI_TINY2040**: MicroPython compatible board
- **Rotary Encoder**: Voor gebruikersinvoer
- **Push Button**: Voor mode switching
- **NeoPixel strips/pixels**: Voor LED output

# 3d model