Ankündigung

Einklappen
Keine Ankündigung bisher.

[Misterhouse] RGB Sequencer

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Misterhouse] RGB Sequencer

    Hallo Jungs,

    ich bin gerade dabei mit DALI zu spielen. RGB ist der nächste logische Schritt. Dafür würde ich gerne einen RGB Sequenzer für MH bauen.

    Funktion stelle ich mir so vor:
    - Tastendruck löst Sequenzer aus
    - MH steuert solange den Regenbogen durch (Farben, Geschwindigkeiten anpassbar) bis wieder auf die Taste gedrückt wird.

    Ergo brauchen wir:
    - drei Gruppenadressen (Taster und drei Dimmkanäle)
    - noch eine beliebig lange Liste von RGB Farbwerten, die dann inkl. Interpolation dazwischen abgefahren werden
    - eine Zeitkonstante, die die Geschwindigkeit bestimmt (für einen kompletten Durchlauf)
    - ein boolean für Loop Ja/Nein

    Hat jemand mit dem MH schon was ähnliches realisiert?

    Wie sehen die Algorithmen aus für das "durchfahren" der Farbwerte.

    Liebe Grüße

    #2
    Hallo Rak,

    schau mal hier: LINK

    unten auf der Seite ist der Quelltext für einen RGB-Fader mit Sonderfunktionen als bascom-basic programm verlinkt.

    Ich habe das Programm in einem ATMEL laufen für meinen Springbrunnen - tuts prima.

    Sollte eigentlich acuh in perl umsetzbar sein.

    Gruß,
    Thorsten

    Kommentar


      #3
      Hab was gefunden. Im wesentlichen kann man das mit dem HSV Farbraum erledigen, nein nicht Hamburger Sportverein .

      Kommentar


        #4
        FileV-RGB-comparison.svg - Wikipedia, the free encyclopedia

        Hab was gefunden. Ist eigentlich ganz logisch. Man kann das mit dem Farbmodel HSV erledigen.

        Kommentar


          #5
          Fertisch . Nicht schön, aber selten.

          Folgende Einträge in der *.mht
          Code:
          EIB6,     10/0/3,               Bad_Rot,     OG_Bad,
          EIB6,     10/0/4,               Bad_Gruen,   OG_Bad,
          EIB6,     10/0/5,               Bad_Blau,    OG_Bad,
          EIB1,     10/0/6,               SequenzerAn,    OG_Bad,
          EIB1,     10/0/7,               Bad_Spiegel,    OG_Bad,
          Sollte Selbsterklärend sein.

          Folgender Perl Code als sequenzer.pl im Code Verzeichnis:
          Code:
          # noloop=start
          my ($current_hue) = 0;
          my ($ro,$go,$bo) = hsv2rgb(0 , 255, 255);
          # noloop=stop
          
          if (!($New_Second % 2) == 0 && state $SequenzerAn eq ON && state $Bad_Spiegel eq ON) {
            my ($r,$g,$b);
            $current_hue += 5;
            if ($current_hue >= 255) { $current_hue = 0; }
            ($r, $g, $b) = hsv2rgb($current_hue, 255, 255);
            $r = int( $r/255*100); $g = int( $g/255*100); $b = int( $b/255*100);
            set $Bad_Rot   $r if ($ro != $r);
            set $Bad_Gruen $g if ($go != $g);
            set $Bad_Blau  $b if ($bo != $b);
            ($ro, $go, $bo) = ($r,$g,$b);
            printf("RGB %3i %3i %3i\n",$r,$g,$b);
          }
          
          if (state_changed $Bad_Spiegel eq OFF) {
            set $Bad_Rot   0; set $Bad_Gruen 0; set $Bad_Blau  0;
            set $SequenzerAn OFF;
            printf("RGB %3i %3i %3i\n",0,0,0);
          } elsif (state_changed $Bad_Spiegel eq ON) {
            set $Bad_Rot   $ro; set $Bad_Gruen $go; set $Bad_Blau  $bo;
            printf("RGB %3i %3i %3i\n",$ro,$go,$bo);
          }
          
          sub hsv2rgb {
            my ($H,$S,$V) = @_;
            my ($R,$G,$B) = (0,0,0);
            my ($var_r, $var_g, $var_b);
          
            $H = $H/255; $S = $S/255; $V = $V/255;
          
            if ( $S == 0 )
            {
               $R = $V * 255; $G = $V * 255; $B = $V * 255;
            }
            else
            {
               my $var_h = $H * 6;
               if ( $var_h == 6 ) { $var_h = 0;}      # H must be < 1
               my $var_i = int( $var_h ) ;         # Or ... $var_i = floor( var_h )
               my $var_1 = $V * ( 1 - $S );
               my $var_2 = $V * ( 1 - $S * ( $var_h - $var_i ) );
               my $var_3 = $V * ( 1 - $S * ( 1 - ( $var_h - $var_i ) ) );
          
               if      ( $var_i == 0 ) { $var_r = $V     ; $var_g = $var_3 ; $var_b = $var_1 ;}
               elsif ( $var_i == 1 ) { $var_r = $var_2 ; $var_g = $V     ; $var_b = $var_1 ;}
               elsif ( $var_i == 2 ) { $var_r = $var_1 ; $var_g = $V     ; $var_b = $var_3 ;}
               elsif ( $var_i == 3 ) { $var_r = $var_1 ; $var_g = $var_2 ; $var_b = $V     ;}
               elsif ( $var_i == 4 ) { $var_r = $var_3 ; $var_g = $var_1 ; $var_b = $V     ;}
               else                  { $var_r = $V     ; $var_g = $var_1 ; $var_b = $var_2 ;}
          
               $R = $var_r * 255;                  # RGB results from 0 to 255
               $G = $var_g * 255;
               $B = $var_b * 255;
            }
            return ($R, $G, $B);
          }
          Die hsv2rgb bekommt man sicherlich für unsere Zwecke noch schlanker hin (Wertebereich 0 bis 100 zB). Dann sinkt der Rechenbedarf. Aber das ist die Kür

          Bedienung ist dann wie folgt:
          Zwei EIB1 Items (SequenzerAn und Bad_Spiegel). Beides als UM auf zwei Taster.

          Bad_Spiegel toggelt das Licht an und aus. Bei an wird der letzte Farbwert wieder eingestellt.

          SequenzerAn auf ON und schon beginnt das Farbenspiel (einmal durch den Farbkreis in 100 Sekunden) bis entweder SequenzerAn wieder auf Off gesetzt wird, oder das Licht ausgeschaltet wird.

          Ich hoffe das reicht als "Beispiel" für ein wenig Perl Code nach dem ich immer gefragt werde.

          Fragen? Fragen!

          Wer hat noch DALI an MH? Was habt ihr so an Funktionen implementiert?

          Kommentar


            #6
            Hi RaK,
            ich habe hier auch ein Dali Gateway.
            Wird im MOment nur zum Dimmen von Leuchtstoffröhren verwendet.
            Was hast Du denn da dranhängen?
            LG
            Klaus

            Kommentar

            Lädt...
            X