[python] [kivy] [raspberry pi] Twee scripts samen voegen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Meta3D
  • Registratie: April 2012
  • Laatst online: 29-10-2022
Hallo, ik heb sinds kort Kivy ontdekt en wil daar de GUI mee weergeven van het programma. Dit werkt goed op zichzelf. de knoppen werken en doen wat ze moeten doen.
dit script (main9.py) werkt met class Myapp(App):

het tweede script (log.py) werkt met een main loop While True:

en ik krijg het maar niet voor elkaar om die 2 scripts in 1 script als 1 programma te laten draaien;
wie kan me daar mee helpen?
ik kom in de knoop met hoe ik de twee loops in elkaar moet zetten zonder dat ze op elkaar moeten wachten :( of elkaar ophouden;

als ik de code samenvoeg en while true-loop in de Myapp(app) plaats dan krijg ik allemaal fout meldingen
en andersom ook

Python: main9.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
...............

class MyApp(App):

    def build(self):
        # Set up the layout:
        layout = GridLayout(cols=5, spacing=30, padding=30, row_default_height=150)

        # Make the background gray:
        # let op de size! 800,600 dit moet zijn 800,480
        with layout.canvas.before:
            Color(.2,.2,.2,1)
            self.rect = Rectangle(size=(800,600), pos=layout.pos)

        # Instantiate the first UI object (the GPIO input indicator):
        #inputDisplay = InputButton(text="Input")

        # Schedule the update of the state of the GPIO input button:
        #Clock.schedule_interval(inputDisplay.update, 1.0/10.0)

        # Create the rest of the UI objects (and bind them to callbacks, if necessary):
        
        beepButton = Button(text="BEEP!")
        beepButton.bind(on_press=press_callback)
        StartButton = Button(text="START")
        StartButton.bind(on_press=press_callback)
        StopButton = Button(text="STOP")
        StopButton.bind(on_press=press_callback)
        OnderbrekingButton = Button(text="Onderbreking")
        OnderbrekingButton.bind(on_press=press_callback)


        wimg = Image(source='logo.png')
        
        # Add the UI elements to the layout:
        layout.add_widget(wimg)
        layout.add_widget(beepButton)
        layout.add_widget(StartButton)
        layout.add_widget(StopButton)
        layout.add_widget(OnderbrekingButton)

        
        return layout
    

if __name__ == '__main__':
        
    MyApp().run()


Python: Log.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/env python2.7  
.................


# Main loop waar de ingangen gepold worden, indien flankdetectie functie-aanroep.
# Opgelet, eerst pin-toestand inlezen in variabele, dan flank van variabele bewaken !!!
while True:
    Pin17=GPIO.input(4)
    
    #Hier word de sesor (4) gepold en bij +flank wordt de IR () functie aangeroepen
    if Pin17:
        if last_state17==0:IR_1(0)
    last_state17=Pin17  
   
    # Every minute geef het aantal producten per minuut weer!
    if(datetime.datetime.now()>next_minute):      
        next_minute=next_minute+datetime.timedelta(minutes=1)
        
        print next_minute                                   #test print to screen
        print "aantal producten per/min",product_Teller_1   #test print to screen
        
        #roep hier de insertDB_PM () aan om de gegevens weg te schrijven naar de
        #local database.
        insertDB_PM()
        product_Teller_1=0  #zet de product_teller weer op 0!
        
    # Haal producten_per_uur op en schrijf dit weg naar de database    
    if(datetime.datetime.now()>next_hour):     
        next_hour=next_hour+datetime.timedelta(hours=1)
        #print next_hour    #test print to screen
        #insertDB_PU()          #NOG NIET ACTIEF tabel bestaat nog niet roep de InserDB_PU functie aan en voer deze uit
        product_per_uur_1 =0  #zet product_per_uur op 0!


Ik krijg het niet voor elkaar om de 2 scripts los van elkaar in hun eigen code window te laten zien dus dan maar even zo , het zijn dus twee scripts in het zelfde code blok gescheiden door **********************

Haa gelukt :) 2 code blokken :) :9

[ Voor 45% gewijzigd door Meta3D op 28-10-2015 07:10 ]


Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:35
Meta-tip: je mag best twee [code]-blokken gebruiken om twee scripts te posten. Die dingen kosten niets. ;)

In plaats van je tweede script in een while-lus te draaien, kun je de body periodiek uit laten voeren. Kivy heeft daar Clock.schedule_interval voor.

Acties:
  • 0 Henk 'm!

  • Meta3D
  • Registratie: April 2012
  • Laatst online: 29-10-2022
(heb het nog eens geprobeerd twee keer een "[code=python]" maar dan staat de ene wel in een code veld en de andere in normal tekst.)

ben nu naar de Clock.schedule_interval functie aan het kijken :)
maar het is me nog niet duidelijk hoe ik nou een while true lus vertaal naar een Clock.schedule hoor.. 8)7

[ Voor 21% gewijzigd door Meta3D op 27-10-2015 15:53 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:35
Meta3D schreef op dinsdag 27 oktober 2015 @ 15:51:
(heb het nog eens geprobeerd twee keer een "[code=python]" maar dan staat de ene wel in een code veld en de andere in normal tekst.)
Heb je elk blok beëindigd met [/code]?

[code=Python,,,foo.py ]
blabla
[/code]

[code=Python,,,bar.py]
blabla
[/code]

... zou gewoon moeten werken, hoor.
ben nu naar de Clock.schedule_interval functie aan het kijken :)
maar het is me nog niet duidelijk hoe ik nou een while true lus vertaal naar een Clock.schedule hoor.. 8)7
Wat je nu binnen de while-loop doet, stop je in een functie. En die functie laat je X keer per seconde uitvoeren met Clock.schedule_interval.

Acties:
  • 0 Henk 'm!

  • Meta3D
  • Registratie: April 2012
  • Laatst online: 29-10-2022
dus zo? while true loop vervangen door functie: pol_now

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def pol_now(dt):
# Main loop waar de ingangen gepold worden, indien flankdetectie functie-aanroep.
# Opgelet, eerst pin-toestand inlezen in variabele, dan flank van variabele bewaken !!!

    Pin17=GPIO.input(4)
    
    #Hier word de sesor (4) gepold en bij +flank wordt de IR () functie aangeroepen
    if Pin17:
        if last_state17==0:IR_1(0)
    last_state17=Pin17  
   
    # Every minute geef het aantal producten per minuut weer!
    if(datetime.datetime.now()>next_minute):      
        next_minute=next_minute+datetime.timedelta(minutes=1)
        
        print next_minute                                   #test print to screen
        print "aantal producten per/min",product_Teller_1   #test print to screen
        
        #roep hier de insertDB_PM () aan om de gegevens weg te schrijven naar de
        #local database.
        insertDB_PM()
        product_Teller_1=0  #zet de product_teller weer op 0!
        
    # Haal producten_per_uur op en schrijf dit weg naar de database    
    if(datetime.datetime.now()>next_hour):     
        next_hour=next_hour+datetime.timedelta(hours=1)
        #print next_hour    #test print to screen
        #insertDB_PU()          #NOG NIET ACTIEF tabel bestaat nog niet roep de InserDB_PU functie aan en voer deze uit
        product_per_uur_1 =0  #zet product_per_uur op 0!


en om hem dan aan te roepen in de Main9.py

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
.........
class MyApp(App):

    def build(self):
        # Set up the layout:
        layout = GridLayout(cols=5, spacing=30, padding=30, row_default_height=150)

        # Make the background gray:
        # let op de size! 800,600 dit moet zijn 800,480
        with layout.canvas.before:
            Color(.2,.2,.2,1)
            self.rect = Rectangle(size=(800,600), pos=layout.pos)

        # Instantiate the first UI object (the GPIO input indicator):
        #inputDisplay = InputButton(text="Input")

        # Schedule the update of the state of the GPIO input button:
        #Clock.schedule_interval(inputDisplay.update, 1.0/10.0)

        # Create the rest of the UI objects (and bind them to callbacks, if necessary):
        
        beepButton = Button(text="BEEP!")
        beepButton.bind(on_press=press_callback)
        StartButton = Button(text="START")
        StartButton.bind(on_press=press_callback)
        StopButton = Button(text="STOP")
        StopButton.bind(on_press=press_callback)
        OnderbrekingButton = Button(text="Onderbreking")
        OnderbrekingButton.bind(on_press=press_callback)


        wimg = Image(source='logo.png')
        
        # Add the UI elements to the layout:
        layout.add_widget(wimg)
        layout.add_widget(beepButton)
        layout.add_widget(StartButton)
        layout.add_widget(StopButton)
        layout.add_widget(OnderbrekingButton)

>>>        Clock.schedule_interval(pol_now, 0.5) # zal zo even gaan kijken of dit werkt<<<<

        return layout
    

if __name__ == '__main__':
        
    MyApp().run()

Acties:
  • +1 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:35
Yep, dat lijkt me de goede aanpak. Probeer het, zou ik zeggen.

Acties:
  • 0 Henk 'm!

  • Meta3D
  • Registratie: April 2012
  • Laatst online: 29-10-2022
.

[ Voor 100% gewijzigd door Meta3D op 28-10-2015 07:06 ]


Acties:
  • 0 Henk 'm!

  • Meta3D
  • Registratie: April 2012
  • Laatst online: 29-10-2022
Soultaker schreef op dinsdag 27 oktober 2015 @ 17:11:
Yep, dat lijkt me de goede aanpak. Probeer het, zou ik zeggen.
Dikke _/-\o_ voor me naar de juiste richting te sturen :9~
het is helemaal opgelost programma "samen.py" werkt nadat ik alle local variabelen heb omgezet naar global :*)
Pagina: 1