Pico C Problem - Müllabholung

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Negropo
    Smart Home'r
    • 10.10.2015
    • 90

    #1

    Pico C Problem - Müllabholung

    Hallo zusammen,

    ich hoffe hier sind ein paar Pico C-Cracks vertreten, die mir weiterhelfen können. Ich habe mir ein Pico C-Programm geschrieben um meine Müllabholungen die ich aus dem Google-Kalender via VI auslese auszuwerten und mir zu sagen welcher Müll demnächst abgeholt wird. Leider funktioniert das Programm nur beim ersten mal und dann wird es nicht mehr aktualisiert. Ich vermute mal, dass die Input-Werte nicht aktualisiert werden, weil sie nicht in der Schleife enthalten sind. Wenn ich diese jedoch dort einbastle funktioniert das ganze nicht mehr. Also hier nun der Code um den es geht:

    Code:
    // write program here in PicoC
    int f1 = getinput (0);
    int f2 = getinput (1);
    int f3 = getinput (2);
    int f4 = getinput (3);
    int Papier = 0;
    int Haus = 0;
    int Gelb = 0;
    int Bio = 0;
    while(TRUE)
    {
    if (f1 < 0) {Papier = 6;}
    else {Papier = f1;}
    
    if (f2 < 0) {Haus = 6;}
    else {Haus = f2;}
    
    if (f3 < 0) {Gelb = 6;}
    else {Gelb = f3;}
    
    if (f4 < 0) {Bio = 6;}
    else {Bio = f4;}
    
    if ((Papier == -1) && (Haus == -1) && (Gelb == -1) && (Bio == -1))
    {setoutput(0,0);}
    
    if ((Papier < Haus) && (Papier < Gelb) && (Papier < Bio))
    {setoutput(0,1);}
    
    if ((Haus < Papier) && (Haus < Gelb) && (Haus < Bio))
    {setoutput(0,2);}
    
    if ((Gelb < Papier) && (Gelb < Haus) && (Gelb < Bio))
    {setoutput(0,3);}
    
    if ((Gelb == Bio) && (Gelb < Papier) && (Gelb < Haus))
    {setoutput(0,3);}
    
    if ((Bio < Papier) && (Bio < Haus) && (Bio < Gelb))
    {setoutput(0,4);}
    
    sleeps(60);
    }
    Vielleicht kann mir ja jemand bitte helfen. Danke!

    Gruß Negropo
  • svethi
    Lebende Foren Legende
    • 25.08.2015
    • 6320

    #2
    Genau richtig, Du musst in der Schleife die Daten neu laden. Dafür kannst Du sogar abfragen ob sich etwas geändert hat und bräuchst auch nur dann alles neu berechnen. Ich vermute mal ganz stark, dass Du die getinputs so wie sie außerhalb der Schleife sind, in die Schleife gepackt hast. Das geht natürlich nicht, da Du dann bei jedem Durchlauf die Variable neu anlegen würdest. Dafür müsstest Du sie aber mindestens vorher freigeben.
    Außerhalb der Schleife int Varname in der Schleife Varname = getinput...
    Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

    Kommentar

    • Negropo
      Smart Home'r
      • 10.10.2015
      • 90

      #3
      Hallo Svethi,

      danke für die schnelle Antwort. Ich habe den Code jetzt wie folgt angepasst:

      Code:
      // write program here in PicoC
      int f1;
      int f2;
      int f3;
      int f4;
      int Papier = 0;
      int Haus = 0;
      int Gelb = 0;
      int Bio = 0;
      while(TRUE)
      {
      f1 = getinput (0);
      f2 = getinput (1);
      f3 = getinput (2);
      f4 = getinput (3);
      
      ...
      Leider funktioniert das nicht, da wird kein Wert ausgegeben.

      Gruß Negropo

      Kommentar

      • svethi
        Lebende Foren Legende
        • 25.08.2015
        • 6320

        #4
        Bisher wurde vor dem Abfragen der Werte immer überprüft ob es was Neues gibt und dann erst abgefragt. Habe nie probiert ob es Probleme gibt, wenn man das nicht tut. Dann ist die Rückgabe von getinput ein float. Solltest Du daher auch so deklarieren. Ansonsten sehe ich jetzt keinen Fehler.
        Es ist im Allgemeinen immer gut sich Beispielscripte von Loxone anzusehen. Dann wären einige Dinge klar gewesen.
        Und dann mach mal das Leerzeichen zwischen getinput und der Klammer weg. Das sieht ja schlimm aus :-)
        Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

        Kommentar

        • Negropo
          Smart Home'r
          • 10.10.2015
          • 90

          #5
          Meinst du so?
          Code:
          // write program here in PicoC
          float f1;
          float f2;
          float f3;
          float f4;
          int Papier = 0;
          int Haus = 0;
          int Gelb = 0;
          int Bio = 0;
          while(TRUE)
          {
          f1 = getinput(0);
          f2 = getinput(1);
          f3 = getinput(2);
          f4 = getinput(3);

          Kommentar

          • svethi
            Lebende Foren Legende
            • 25.08.2015
            • 6320

            #6
            Du willst mir bestimmt jetzt sagen, dass es so noch immer nicht geht. Hast ja auch noch immer nicht das getinputevent drin. Sieh Dir die Beispiele von Loxone an un mach es so
            Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

            Kommentar

            • Negropo
              Smart Home'r
              • 10.10.2015
              • 90

              #7
              Ich glaube ich habe es jetzt, zumindest sind erste Tests vielversprechend. Folgendermaßen habe ich es gelöst:

              Code:
              // write program here in PicoC
              float f1,f2,f3,f4;
              float Papier,Haus,Gelb,Bio;
              while(TRUE)
              {
              f1=getinput(0);
              f2=getinput(1);
              f3=getinput(2);
              f4=getinput(3);
              if (f1<0) {Papier=6;}
              else {Papier=f1;}
              
              if (f2<0) {Haus=6;}
              else {Haus=f2;}
              
              if (f3<0) {Gelb=6;}
              else {Gelb=f3;}
              
              if (f4<0) {Bio=6;}
              else {Bio=f4;}
              
              if ((Papier==6) && (Haus==6) && (Gelb==6) && (Bio==6))
              {setoutput(0,0);}
              
              if ((Papier<Haus) && (Papier<Gelb) && (Papier<Bio))
              {setoutput(0,1);}
              
              if ((Haus<Papier) && (Haus<Gelb) && (Haus<Bio))
              {setoutput(0,2);}
              
              if ((Gelb<Papier) && (Gelb<Haus) && (Gelb<Bio))
              {setoutput(0,3);}
              
              if ((Gelb==Bio) && (Gelb<Papier) && (Gelb<Haus))
              {setoutput(0,3);}
              
              if ((Bio<Papier) && (Bio<Haus) && (Bio<Gelb))
              {setoutput(0,4);}
              
              sleeps(60);
              }
              Mal schauen ob es funktioniert. Morgen Mittag weiß ich mehr.

              Vielen Dank und Gruß

              Negropo

              Kommentar

              Lädt...