Hilfe bei Programmablauf (µPython LED Pendel)

OP #6122714
Lesenswert?
• ▲
▼
Nabend

Nachdem mein erster Thread in eine Pythonmachbarkeitsstudie ausgeartet 
ist,
von der ich nun wirklich nichts verstehe, fange ich hier von vorne an:


Ich habe: einen ESP8266 mit Micropython, einen Beschleunigungssensor 
(MPU6050) und ein paar WS2812 LEDs.
Der Aufbau pendelt an dem USB Kabel.

Ich möchte: die LEDs so ansteuern, dass sie, je nach Position des 
Pendels, eine andere Farbe haben. Das Pendel soll nicht immer gleich 
lang sein und nicht immer gleich hoch ausschlagen.

Mein Ansatz: Wendepunkte des Pendels erkennen, dazwischen die Zeit 
messen, Zeit durch die Anzahl der Schritte des Farbverlaufes teilen, 
wenn diese Zeit verstrichen ist, den Wert des Farbverlaufen um eins 
erhöhen. Dass bis zum anderen Wendepunkt, welcher erkannt wird und das 
Spiel geht von vorne los.

Was funktioniert: Sensor auslesen und Werte glätten, LEDs ansteuern, 
Wendepunkte des Pendels (Hoch- und Tiefpunkt von GyZ) erkennen und die 
Zeit dazwischen messen. Also alles was ich brauche im Einzelnen.

Mein Problem: Ich verzettele mich in Funktionen die Funktionen aufrufen.
1
from machine import I2C, Pin
2
import time
3
import utime
4
import mpu6050
5
import math
6
import machine, neopixel
7

8
np = neopixel.NeoPixel(machine.Pin(13), 16)
9
i2c = I2C(scl=Pin(5), sda=Pin(4))
10
accel = mpu6050.accel(i2c)
11

12

13
# HSV values in [0..1]  returns (r, g, b) values from 0 to 255
14
def hsv_to_rgb(h, s, v):
15
    h_i = int((h*6))
16
    f = h*6 - h_i
17
    p = v * (1 - s)
18
    q = v * (1 - f*s)
19
    t = v * (1 - (1 - f) * s)
20

21
    if h_i==0: r, g, b = v, t, p
22
    elif h_i==1: r, g, b = q, v, p
23
    elif h_i==2: r, g, b = p, v, t
24
    elif h_i==3: r, g, b = p, q, v
25
    elif h_i==4: r, g, b = t, p, v
26
    elif h_i==5: r, g, b = v, p, q
27
    else: r, g, b = 0, 0, 0
28
    return (int(r*255), int(g*255), int(b*255))
29

30
## LEDs mir HSV Wert einschalten
31
def LED_an(hsv_value):
32
    hsv_value = hsv_value / 100
33
    for j in range(0, 2):
34
        np[j] = hsv_to_rgb(hsv_value, 0.9, 0.21) 
35
    np.write()
36

37
## LEDs mit HSV aufrufen und anschließend HSV erhöhen
38
hsv = 0
39
schritt = 1
40
def led_verlauf():
41
    global hsv
42
    LED_an(hsv)
43
    #print(hsv)
44
    hsv += schritt
45
    if hsv > 100: hsv = 0
46

47
## Zeitmessung
48
zeit2 = 0
49
zeit1 = 0 
50
def zeitmessung():
51
    global zeit1, zeit2
52
    zeit1 = utime.ticks_ms() - zeit2
53
    #print(zeit1)
54
    zeit2 = utime.ticks_ms()
55

56

57
## Zeitmessung für LED Update
58
after_now = utime.ticks_ms()
59
zeitschritt = zeit1 / 100
60
def LED_zeit():
61
    global after_now, zeitschritt
62
    now = utime.ticks_ms()
63
    if utime.ticks_diff(now, after_now) > zeitschritt:
64
        led_verlauf()
65
        print(zeit1)
66
        after_now = now
67
        
68
        
69
## Vars for LOOP
70
state = 1
71
wert_alt = 0 
72

73
## START
74
print("Start")
75

76

77
## THE LOOP
78
while True: 
79
    wert_neu = accel.get_smoothed_values().get("GyZ")
80
    #print(wert_neu)
81
    
82
    
83
    if wert_neu > 0:
84
        if wert_alt < wert_neu and state == 0:
85
            wert_alt = wert_neu
86
            print(state)
87
            state = 1
88
            hsv = 0
89
            zeitmessung()
90

91

92
    if wert_neu < 0:
93
        if wert_alt > wert_neu and state == 1:
94
            wert_alt = wert_neu
95
            print(state)
96
            state = 0
97
            hsv = 0
98
            zeitmessung()
99

100

101
    LED_zeit()

Könnt Ihr mir da raus helfen, indem ihr mich auf einen anderen Weg 
bringt?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.