Eigene Cocktailmaschine

Du hast eine Idee für ein Projekt?
Benutzeravatar
BlackJack
Moderator
Beiträge: 32199
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Eigene Cocktailmaschine

Beitragvon BlackJack » Mittwoch 17. Mai 2017, 08:44

@Kallinero: Das Vorgehen ist so vielleicht auch nicht wirklich zielführend. Du schreibst 130-Zeilenprogramme die ein komplettes Rezept mit externer Hardware mixen sollen, die aber ziemlich offensichtlich werden lassen, dass Du mit den Sprachmitteln zur Steuerung des Programmflusses noch deutliche Probleme hast. Vielleicht solltest Du das etwas kleinschrittiger angehen. Programme entwickelt man. Also man schreibt nicht ein komplettes Programm runter und testet *dann* erst ob es läuft und ob es das tut was man möchte, sondern man schreibt eine Funktion nach der anderen, und *testet* jede Funktion ob sie auch das tut was man möchte, *bevor* man mit der nächsten weiter macht.

Und gerade am Anfang, mit für Anfänger noch kompliziert aussehenden Schleifen und Bedingungen, macht es Sinn auch die eine oder andere Funktion nicht erst zu testen wenn sie komplett fertig geschrieben ist, sondern ebenfalls einen Teil schreiben und dann prüfen ob der bis dahin auch das tut was man möchte.

Ich bin ja immer noch der Meinung Du solltest Dich mal losgelöst von diesem Programm mit den Python-Grundlagen beschäftigen. Also zum Beispiel das Tutorial in der Python-Dokumentation durcharbeiten. Danach hast Du dann eine solidere Grundlage und kennst die Dir zur Verfügung stehenden Werkzeuge wie Sprachmittel und Datenstrukturen besser.
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. — Brian W. Kernighan
Kallinero
User
Beiträge: 8
Registriert: Montag 8. Mai 2017, 14:44

Re: Eigene Cocktailmaschine

Beitragvon Kallinero » Donnerstag 18. Mai 2017, 17:51

So, ja nach lagem suchen hab ich auch den elif-Fehler entdeckt. Nach ein bisschen modifizieren hat alles funktioniert ... tadaa. Ich bin auch schon sehr weit gekommen mit dem Cocktailfinder, meiner Suchfunktion. Sie arbeitet eig auch schon so wie ich will. Ich kann mir ganze Rezepte suchen und ausgeben lassen, nur das einzige Problem ist, ich bekomme die beiden Funktionen Cocktailfinder() und mixen() nicht im Einklang. Selbst wenn ich aus ihnen eine Funktion mache und die Variablen nicht übergebe funktioniert das ganze nicht. Jetzt ist die Frage, ich fänd es natürlich sinnvoller wenn alles in zwei Funktionen funktioniert. Wie übergebe ich die Werte der einen Funktion der anderen ? Ich habe jetzt schon ein paar Sachen ausprobiert und gegooglt, erreiche aber nie das gewünschte Ziel.

  1. import sys
  2. import RPi.GPIO as GPIO
  3. import time
  4.  
  5.  
  6. oSaft = 0               #Bedingung
  7. grenadine = 0
  8. zitronensaft = 0
  9. tequila = 0
  10. wodka = 0
  11. blueCoracao = 0
  12. maracujasaft = 0
  13. ananassaft = 0
  14.  
  15. oSaft_ventil = 2                #Ventile zugeordnet
  16. grenadine_ventil = 3
  17. zitronensaft_ventil = 4
  18. tequila_ventil = 5
  19. wodka_ventil = 6
  20. blueCoracao_ventil = 17
  21. maracujasaft_ventil =18
  22. ananassaft_ventil = 19
  23.  
  24. GPIO.setmode(GPIO.BCM)          #gleiche Bezeichnung wie rasp
  25.  
  26. GPIO.setwarnings(False)
  27.  
  28. GPIO.setup(oSaft_ventil,GPIO.OUT)       #Initiualisierung der GPIOs
  29. GPIO.setup(grenadine_ventil,GPIO.OUT)
  30. GPIO.setup(zitronensaft_ventil,GPIO.OUT)
  31. GPIO.setup(tequila_ventil,GPIO.OUT)
  32. GPIO.setup(wodka_ventil,GPIO.OUT)
  33. GPIO.setup(blueCoracao_ventil,GPIO.OUT)
  34. GPIO.setup(maracujasaft_ventil,GPIO.OUT)
  35. GPIO.setup(ananassaft_ventil,GPIO.OUT)
  36.  
  37. GPIO.output(oSaft_ventil,True)              #Alle Ventile schließen
  38. GPIO.output(grenadine_ventil,True)
  39. GPIO.output(zitronensaft_ventil,True)
  40. GPIO.output(tequila_ventil,True)
  41. GPIO.output(wodka_ventil,True)
  42. GPIO.output(blueCoracao_ventil,True)
  43. GPIO.output(maracujasaft_ventil,True)
  44. GPIO.output(ananassaft_ventil,True)
  45.  
  46.  
  47. #Datein-Lesemethode:
  48.  
  49. def cocktailfinder():
  50.  
  51.     oSaft = 0               #Bedingung
  52.     grenadine = 0
  53.     zitronensaft = 0
  54.     tequila = 0
  55.     wodka = 0
  56.     blueCoracao = 0
  57.     maracujasaft = 0
  58.     ananassaft = 0
  59.  
  60.     zeile = 0
  61.  
  62.     gewaehlterCocktail = "Tequila Sunrise"
  63.    
  64.     cocktailliste = open("cocktailliste.txt","r")
  65.  
  66.     for line in cocktailliste:
  67.         zeile = zeile + 1
  68.         gefundenerCocktail = line.rstrip()
  69.    
  70.         if gefundenerCocktail == gewaehlterCocktail:
  71.             print(gewaehlterCocktail)
  72.             for line in cocktailliste:
  73.                 zeile = zeile + 1
  74.                 zutat = line.rstrip()
  75.                          
  76.                 if zutat == "O-Saft":
  77.                     for line in cocktailliste:
  78.                         zeile = zeile + 1
  79.                         oSaft = int(line.rstrip())
  80.                         break
  81.                 if zutat == "Grenadine":
  82.                     for line in cocktailliste:
  83.                         zeile = zeile + 1
  84.                         grenadine = int(line.rstrip())
  85.                         break
  86.                 if zutat == "Zitronensaft":
  87.                     for line in cocktailliste:
  88.                         zeile = zeile + 1
  89.                         zitronensaft = int(line.rstrip())
  90.                         break
  91.                 if zutat == "Tequila":
  92.                     for line in cocktailliste:
  93.                         zeile = zeile + 1
  94.                         tequila = int(line.rstrip())
  95.                         break
  96.                 if zutat == "Wodka":
  97.                     for line in cocktailliste:
  98.                         zeile = zeile + 1
  99.                         wodka = int(line.rstrip())
  100.                         break
  101.                 if zutat == "Blue Coracao":
  102.                     for line in cocktailliste:
  103.                         zeile = zeile + 1
  104.                         blueCoracao = int(line.rstrip())
  105.                         break
  106.                 if zutat == "Maracujasaft":
  107.                     for line in cocktailliste:
  108.                         zeile = zeile + 1
  109.                         maracujasaft = int(line.rstrip())
  110.                         break
  111.                 if zutat == "Ananassaft":
  112.                     for line in cocktailliste:
  113.                         zeile = zeile + 1
  114.                         ananassaft = int(line.rstrip())
  115.                         break
  116.                 if zutat == "Ende":
  117.                     break
  118.  
  119.     print(oSaft)
  120.     print(grenadine)
  121.     print(zitronensaft)
  122.     print(tequila)
  123.     print(wodka)
  124.     print(blueCoracao)
  125.     print(maracujasaft)
  126.     print(ananassaft)
  127.    
  128. def mixen():
  129.        
  130.     if oSaft != 0:                  #Ventile öffenen
  131.         GPIO.output(oSaft_ventil,False)
  132.     if grenadine != 0:
  133.         GPIO.output(grenadine_ventil,False)
  134.     if zitronensaft != 0:
  135.         GPIO.output(zitronensaft_ventil,False)
  136.     if tequila != 0:
  137.         GPIO.output(tequila_ventil,False)
  138.     if wodka != 0:
  139.         GPIO.output(wodka_ventil,False)
  140.     if blueCoracao != 0:
  141.         GPIO.output(blueCoracao_ventil,False)
  142.     if maracujasaft != 0:
  143.         GPIO.output(maracujasaft_ventil,False)
  144.     if ananassaft != 0:
  145.         GPIO.output(ananassaft_ventil,False)
  146.    
  147.     for i in range(25):             #Ventile schließen
  148.         if i == oSaft:
  149.             GPIO.output(oSaft_ventil,True)
  150.         if i == grenadine:
  151.             GPIO.output(grenadine_ventil,True)
  152.         if i == zitronensaft:
  153.             GPIO.output(zitronensaft_ventil,True)
  154.         if i == tequila:
  155.             GPIO.output(tequila_ventil,True)
  156.         if i == wodka:
  157.             GPIO.output(wodka_ventil,True)
  158.         if i == blueCoracao:
  159.             GPIO.output(blueCoracao_ventil,True)
  160.         if i == maracujasaft:
  161.             GPIO.output(maracujasaft_ventil,True)
  162.         if i == ananassaft:
  163.             GPIO.output(ananassaft_ventil,True)
  164.  
  165.         time.sleep(.1)
  166.  
  167. def main():
  168.     mixen()
  169. main()


Für alle Interessierten meine Cocktailliste.txt

Code: Alles auswählen

Tequila Sunrise
O-Saft
16
Grenadine
3
Zitronensaft
2
Tequila
9
Sirius3
User
Beiträge: 5836
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Eigene Cocktailmaschine

Beitragvon Sirius3 » Donnerstag 18. Mai 2017, 20:36

Statt etlicher Variablen für die verschiedenen Bestandteile, solltest Du passende Datenstrukturen verwenden, also Wörterbücher. Eines für die Pins, eines für die Mengen. Dann sind die Parameter und Rückgabewerte, die noch bei Deinen Funktionen fehlen, ganz einfach. cocktailfinder wird nie aufgerufen.
Benutzeravatar
Kebap
User
Beiträge: 320
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Re: Eigene Cocktailmaschine

Beitragvon Kebap » Freitag 19. Mai 2017, 09:14

Kallinero hat geschrieben:Wie übergebe ich die Werte der einen Funktion der anderen ? Ich habe jetzt schon ein paar Sachen ausprobiert und gegooglt, erreiche aber nie das gewünschte Ziel.

Welche Sachen hast du denn ausprobiert?

Wieso googlst du solche Grundlagen, anstatt einfach Blackjacks Vorschlag zu folgen, und das Tutorial zu lesen?
MorgenGrauen: 1 Welt, >12 Gilden, >85 Abenteuer, >1000 Waffen und Rüstungen,
>2500 NPC, >16000 Räume, >170 freiwillige Programmierer, einfach Text, seit 1992.

Zurück zu „Ideen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder