kodhjälp micropython toknybörjare en knapp och oled display

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

kodhjälp micropython toknybörjare en knapp och oled display

Inlägg av tokfan »

Hej!
Är helt ny på python och rätt kass på C programmering med.
Jag labbar med en oled display och knapp och försöker göra så displayen skiftar mellan att skriva "steg 1" och "steg 2" när
jag trycker på knappen.
Det fungerar halvbra. Skiftar ibland och stannar ibland på samma steg flera knapptryckningar i rad.
Vad är felet?

Det borde väl gå att göra en variabel i slutet på första if-satsen typ: var = 1 och sedan starta nästa "steg 2" med
if var=1:
gör såhär när knappen trycks igen
var = 0

Ja ni ser att jag är helt lost och antar att vissa saker i koden kanske inte ens gör någon nytta.
Någon som har lust att berätta hur jag gör detta på ett smidigt vis eller vart jag kan hitta bra info?

hittar bara basic projekt på sparkfuns hemsida om hur man använder gpio, adc osv men inget hur man styr upp syntax och andra saker som i detta exempel.

Kod: Markera allt

import machine
from machine import Pin,I2C
import SSD1306
import time


 
i2c = I2C(-1,scl=Pin(22),sda=Pin(21))
oled=SSD1306.SSD1306_I2C(128,64,i2c,0x3c)

button = machine.Pin(23, machine.Pin.IN, machine.Pin.PULL_UP)
while True:
    
    first = button.value()
    time.sleep(0.5)
    second = button.value()
    
    if not first and second:
        print('steg 1!')
        oled.fill(1)
        oled.invert(1)
        oled.text("steg 1!",0,3,0)
        oled.show()
        
        
        
    
    fir = button.value()
    time.sleep(0.5)
    sec = button.value()
    
    if not fir and sec:
      print('steg 2!')
      oled.fill(1)
      oled.invert(1)
      oled.text("steg 2!",0,3,0)
      oled.show()  
    
Zkronk
Inlägg: 1423
Blev medlem: 23 augusti 2005, 16:44:36
Ort: Uppsala

Re: kodhjälp micropython toknybörjare en knapp och oled dis

Inlägg av Zkronk »

Något i den här stilen kanske skulle kunna fungera?
Dock är koden helt o-testad, så jag lämnar inga garantier :vissla:

Kod: Markera allt

from machine import Pin, I2C
import SSD1306
import time

stage = 1
DEBOUNCE_TIME = 0.5

i2c = I2C(-1, scl=Pin(22), sda=Pin(21))
oled = SSD1306.SSD1306_I2C(128, 64, i2c, 0x3c)
button = Pin(23, Pin.IN, Pin.PULL_UP)

def button_is_pressed():
    first_reading = button.value()
    time.sleep(DEBOUNCE_TIME)
    second_reading = button.value()

    return (not first_reading and second_reading)

def display_stage(current_stage):
    message = f"steg {current_stage}!"

    print(message)
    oled.fill(1)
    oled.invert(1)
    oled.text(message, 0, 3, 0)
    oled.show()

while True:
    display_stage(stage)

    # Wait here until the button is pressed.
    while (button_is_pressed() == False):
        pass

    if stage == 1:
        stage = 2
    else:
        stage = 1
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: kodhjälp micropython toknybörjare en knapp och oled dis

Inlägg av tokfan »

Tusen tack!
Precis vad jag behövde!
Har inte testat än men koden ger hur som helst en bättre överblick över hur man lägger upp allt.
Klurade på rad 20 vad f står för f"steg?

En annan fråga: kan man ladda in massa filer i processorn som typ funktioner.py
och sedan bara skriva i main.py: import funktioner?
(som man gör med #include i C-programmering).
Användarvisningsbild
swesysmgr
Inlägg: 14159
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: kodhjälp micropython toknybörjare en knapp och oled dis

Inlägg av swesysmgr »

f-prefixet är formatted string, den sätter in variabler omgivna av klammerparenteser i texten innan den skrivs ut. Är man van vid printf i C så är det ungefär samma tänk tycker jag.
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: kodhjälp micropython toknybörjare en knapp och oled dis

Inlägg av tokfan »

Tackar! Då är jag med.
Mina första små testprojekt kommer ju bestå av delarna i din kod i olika kombinationer och modifieringar tills jag känner att jag blir säkrare. Sedan får man utveckla därifrån.
Mr Andersson
Inlägg: 1397
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: kodhjälp micropython toknybörjare en knapp och oled dis

Inlägg av Mr Andersson »

Lite udda sätt att läsa knapptryck i mitt tycke.
Vad händer om användaren trycker ner knappen innan första läsningen?
Vad händer om användaren trycker ner knappen mindre än 0,5s mellan första och andra läsningen?
Vad händer om användaren trycker ner knappen efter andra läsningen och håller kvar mer än 0,5s?

I alla tre fall kommer du missa ett knapptryck.

Jag skulle hellre rekommendera ett flankinterrupt för att detektera nertrycket, och bara ha debounce på uppsläppet.
En annan fråga: kan man ladda in massa filer i processorn som typ funktioner.py
och sedan bara skriva i main.py: import funktioner?
(som man gör med #include i C-programmering).
Ja det kan du göra.
Skriv svar