Buggfix Plus
Aktuellt datum och tid: 03.02 2020-06-01

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 6 inlägg ] 
Författare Meddelande
InläggPostat: 00.35 2020-05-21 

Blev medlem: 13.05 2010-06-10
Inlägg: 515
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
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() 
   


Upp
 Profil  
 
InläggPostat: 04.49 2020-05-21 

Blev medlem: 15.44 2005-08-23
Inlägg: 1327
Ort: Uppsala
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: [Expandera/Minimera] [Hämta] (example.py)
  1. from machine import Pin, I2C
  2. import SSD1306
  3. import time
  4.  
  5. stage = 1
  6. DEBOUNCE_TIME = 0.5
  7.  
  8. i2c = I2C(-1, scl=Pin(22), sda=Pin(21))
  9. oled = SSD1306.SSD1306_I2C(128, 64, i2c, 0x3c)
  10. button = Pin(23, Pin.IN, Pin.PULL_UP)
  11.  
  12. def button_is_pressed():
  13.     first_reading = button.value()
  14.     time.sleep(DEBOUNCE_TIME)
  15.     second_reading = button.value()
  16.  
  17.     return (not first_reading and second_reading)
  18.  
  19. def display_stage(current_stage):
  20.     message = f"steg {current_stage}!"
  21.  
  22.     print(message)
  23.     oled.fill(1)
  24.     oled.invert(1)
  25.     oled.text(message, 0, 3, 0)
  26.     oled.show()
  27.  
  28. while True:
  29.     display_stage(stage)
  30.  
  31.     # Wait here until the button is pressed.
  32.     while (button_is_pressed() == False):
  33.         pass
  34.  
  35.     if stage == 1:
  36.         stage = 2
  37.     else:
  38.         stage = 1


Upp
 Profil  
 
InläggPostat: 09.23 2020-05-21 

Blev medlem: 13.05 2010-06-10
Inlägg: 515
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).


Upp
 Profil  
 
InläggPostat: 21.20 2020-05-21 
Användarvisningsbild

Blev medlem: 06.56 2009-03-28
Inlägg: 8855
Ort: Göteborg
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.


Upp
 Profil  
 
InläggPostat: 00.22 2020-05-22 

Blev medlem: 13.05 2010-06-10
Inlägg: 515
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.


Upp
 Profil  
 
InläggPostat: 23.23 2020-05-22 

Blev medlem: 21.06 2011-01-29
Inlägg: 1005
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.

Citera:
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.


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 6 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 4 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010