DMX Steuerung Selbstbau? Teil 6 Werte auf Weboberfläche anzeigen

Es sollen Fader bereitstehen, um die Helligkeit der einzelnen Kanäle anzuzeigen. Und dann natürlich auch einzustellen. Leider ist es in PHP sehr unkomfortabel mit .hex Dateien zu arbeiten. Deshalb gibt es zuerst ein kleines Programm das die Hex Datei in eine Datei mit ASCII Zeichen umwandelt.

In einer Schleife werden alle Werte in eine Datei geschrieben. Jeder Wert kommt auf eine neue Zeile:

      {
        sprintf(cKBuffer, "%d\n", (unsigned char)Buffer[i]);
        fputs(cKBuffer,fDaten_Datei);
      }

Eine Fehlerbehandlung fehlt hier übrigens. Die kommt später noch.

In PHP wird die Hilfsfunktion aufgerufen:

  echo system('./Einlesen_Konverter');

Die erzeugte Datei wird in ein Array eingelesen und der Zeilenumbruch sofort entfernt:

  $LeseDatei = fopen('Config/KLDaten.dmp',r);
  for($i=0;$i<518;$i++)
  {

    $Wert[$i] = fgets($LeseDatei);
    $Wert[$i] = str_replace("\n", "",$Wert[$i]);

Und nun können die einzelnen Werte als Fader angezeigt werden.

    echo("<input type=\"range\" name=\"Pegel1\" min=\"0\" max=\"255\" step=\"1.0\" ");
    echo("value=\"");
    echo $Wert[$i];
    echo ("\" onchange=\"WriteSingleDMXValue(this.value,");
    echo $i-5;
    echo(")\"> <label> DMX Kanal ");
    echo $i-4;
    echo ("</label>");
    echo '<br>';
    echo "\n";

Da sind noch einige Werte Dabei, die zum Übertragungsprotokoll gehören. Und alle 512 Kanäle braucht man im Normalfall nicht. Deshalb werden hier nur die ersten paar angezeigt:

    if(($i > 4) && ($i < 21))
    {

Jetzt kann man beim Seitenaufruf direkt die eingestellten Werte sehen. Einziger Nachteil, wenn ein anderer Nutzer die Werte ändert, muss man die Seite neu Laden um die Änderung zu sehen. Mit PHP und HTML ist das Dynamisch nicht möglich. Dazu benötigt man Java Script.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


#define ANZAHL_BYTES 518

int main()
{
  //***************************************************
  // Variablen
  //***************************************************
  char Buffer[ANZAHL_BYTES];     //Puffer für Daten
  int i;                         //Zählvariable für Schleife
  FILE *fDaten_Datei;            //Datei Handle für DMX Werte
  unsigned char cKBuffer[10];    //Buffer zum Schreiben der 
                                 //Konvertierten Werte.
                                 //Max 255 Dezimal plus
                                 //Zeilenumbruch

  //***************************************************
  // Code
  //***************************************************
      //***************************************************
      // Hole Daten vom Dateisystem
      //***************************************************
      fDaten_Datei = fopen("/var/www/html/Config/SendeDaten.dmx","r");
      if(fDaten_Datei == 0)
      {
         printf("SendeDaten.dmx fehlt! \n");
      }
      else
      {
        fread(Buffer,ANZAHL_BYTES,1,fDaten_Datei);
        //***************************************************
        // Schließe Datei
        //***************************************************
        fclose(fDaten_Datei);
      }

      //***************************************************
      // Öffne Datei zum Schreiben
      // Und schreibe zeilenweise konvertierte Daten
      //***************************************************
      fDaten_Datei = fopen("/var/www/html/Config/KLDaten.dmp","w+");
      for(i=0;i<ANZAHL_BYTES;i++)
      {
        sprintf(cKBuffer, "%d\n", (unsigned char)Buffer[i]);
        fputs(cKBuffer,fDaten_Datei);
      }


      fclose(fDaten_Datei);



  return(1);
}
<?php
  $Wert[]=518;  
  echo system('./Einlesen_Konverter');

  $LeseDatei = fopen('Config/KLDaten.dmp',r);
  for($i=0;$i<518;$i++)
  {

    $Wert[$i] = fgets($LeseDatei);
    $Wert[$i] = str_replace("\n", "",$Wert[$i]);
    
    if(($i > 4) && ($i < 21))
    {
    echo("<input type=\"range\" name=\"Pegel1\" min=\"0\" max=\"255\" step=\"1.0\" ");
    echo("value=\"");
    echo $Wert[$i];
    echo ("\" onchange=\"WriteSingleDMXValue(this.value,");
    echo $i-5;
    echo(")\"> <label> DMX Kanal ");
    echo $i-4;
    echo ("</label>");
    echo '<br>';
    echo "\n";
    }

  }
?>