[Projekt] INTERVAL

Bin gerade etwas am rumspielen

Das geht und macht auf allen 8 LED die Flackereffekte wie gewünscht:

#include <INTERVAL.h>

byte LED[] = {2, 3, 4, 5, 6, 7, 8, 9};

unsigned long dauer[8] = {300, 0, 0, 0, 0, 0, 0, 0};

unsigned long zufall[] = {300, 250, 100, 200, 1500, 300, 400, 1500};
void setup()
{
  Serial.begin(115200);
  for (byte x = 0; x < 8; x++)
    pinMode(LED[x], OUTPUT);
  Serial.println("started");
}

void loop()
{
  byte x = 0;

  INTERVAL(dauer[x])
  {
    dauer[x] = random(zufall[x]) % 43 * 9;
    digitalWrite(LED[x], !digitalRead(LED[x]));
    Serial.println(dauer[x]);
  }

  x++;
  INTERVAL(dauer[x])
  {
    dauer[x] = random(zufall[x]) % 43 * 9;
    digitalWrite(LED[x], !digitalRead(LED[x]));
    Serial.println(dauer[x]);
  }

  x++;
  INTERVAL(dauer[x])
  {
    dauer[x] = random(zufall[x]) % 43 * 9;
    digitalWrite(LED[x], !digitalRead(LED[x]));
    Serial.println(dauer[x]);
  }

  x++;
  INTERVAL(dauer[x])
  {
    dauer[x] = random(zufall[x]) % 43 * 9;
    digitalWrite(LED[x], !digitalRead(LED[x]));
    Serial.println(dauer[x]);
  }

  x++;
  INTERVAL(dauer[x])
  {
    dauer[x] = random(zufall[x]) % 43 * 9;
    digitalWrite(LED[x], !digitalRead(LED[x]));
    Serial.println(dauer[x]);
  }

  x++;
  INTERVAL(dauer[x])
  {
    dauer[x] = random(zufall[x]) % 43 * 9;
    digitalWrite(LED[x], !digitalRead(LED[x]));
    Serial.println(dauer[x]);
  }

  x++;
  INTERVAL(dauer[x])
  {
    dauer[x] = random(zufall[x]) % 43 * 9;
    digitalWrite(LED[x], !digitalRead(LED[x]));
    Serial.println(dauer[x]);
  }

  x++;
  INTERVAL(dauer[x])
  {
    dauer[x] = random(zufall[x]) % 43 * 9;
    digitalWrite(LED[x], !digitalRead(LED[x]));
    Serial.println(dauer[x]);
  }


}

Und das hier, wo ich dachte, das macht das gleiche, läuft viel langsamer, ist nix mit flackern.

#include <INTERVAL.h>

byte LED[] = {2, 3, 4, 5, 6, 7, 8, 9};

unsigned long dauer[8] = {300, 0, 0, 0, 0, 0, 0, 0};

unsigned long zufall[] = {300, 250, 100, 200, 1500, 300, 400, 1500};
void setup()
{
  Serial.begin(115200);
  for (byte x = 0; x < 8; x++)
    pinMode(LED[x], OUTPUT);
  Serial.println("started");
}

void loop()
{
  for (byte x = 0; x < 8; x++)
  {
    INTERVAL(dauer[x])
    {
      dauer[x] = random(zufall[x]) % 43 * 9;
      digitalWrite(LED[x], !digitalRead(LED[x]));
      Serial.println(dauer[x]);
    }
  }
}

An was kann das liegen?

Oder war das mehr als Idee gedacht?

  static unsigned long lastHit = -1L*(dauer);
war als Ersatz für die Zeile

   static unsigned long lastHit = 0;

in der Makro definition in INTERVAL.h gedacht, sorry.

INTERVAL(dauer) { ... } kann dann nach Belieben, mit dem leicht veränderten Verhalten verwendet werden


Die Klammer um (dauer) in der Makro-Definitionszeile oben hat übrigens ihren Grund. Dann geht nämlich sogar eine Verwendung wie

#define minimum 500
....
INTERVAL(minimum+random(1000)) {...}

nur, wenn ich die negative previous in die h reinschreibe, gilt das ja für alle INTERVAL Routinen in ALLEN Sketchen. Da ist die Übergabe als 2. Parameter doch universeller.

Ich finde, man sollte sich schon entscheiden, was man will, wenn man schon so ein tolles einfaches Makro verwendet.
( Und intuitiver ist eigentlich die Funktion "mach es gleich, und dann erst nach dauer wieder", finde ich nachdem ich es mir überlegt habe :wink: )

Ansonsten gibt es komplexe Blink-Systeme wie Sand ( äh, Leuchtfeuer-Landkarten ... ) am Meer.

"mach es gleich, und dann erst nach dauer wieder"

genau. und gleich muss ja nicht sofort sein, deswegen die Startverzögerung. Um zunächst mal zB. Temperaturen einlesen, etc, und dann erst die erste Ausführung.

ElEspanol:
"mach es gleich, und dann erst nach dauer wieder"

genau. und gleich muss ja nicht sofort sein, deswegen die Startverzögerung. Um zunächst mal zB. Temperaturen einlesen, etc, und dann erst die erste Ausführung.

Ich glaube, da ist man dann schon im Bereich eines "endlichen Automaten".

Schon, aber eben nur einfacher. Eine Routine, u.U. sogar nur in einer einzigen Zeile, und haben fertig. Einfach genial. Und taugt sogar zum Funkelfeuer beim Leuchtturm.

Ich nutze diese Library oft und gerne. Vielen Dank! Ist die irgendwo auf Github und Co zu finden? Damit wäre es einfacher, sie z.B. als dependency von PlatformIO-Projekten einzubinden. Eine Lizenz ist ja leider auch nicht dabei ...

Nein, bisher nicht nicht.

Hallo,

ist es nicht eher so das alles was im Forum auftaucht sowieso frei ist von jeder Lizenzpolitik? Also jeder damit tun und lassen kann was er möchte. Wenn es unter GPL3 Lizenz steht, dann heißt das ja "nichts weiter", dass du deinen Code ebenfalls unter GPL3 stellen musst wenn du Teile verwendest die "unter GPL3" stehen. Bei privater Verwendung interessiert das niemanden aber spätestens wenn du damit Geld verdienen möchtest.

Doc_Arduino:
ist es nicht eher so das alles was im Forum auftaucht sowieso frei ist von jeder Lizenzpolitik?

Keine Ahnung. Steht das in den Forenbedingungen? Wenn ja, hält es einer AGB-Prüfung stand?
Normalerweis eist es so, dass Sachen, die keine Lizenz dabei haben, überhaupt nicht weitergegeben werden dürfen.

Wenn es unter GPL3 Lizenz steht, dann heißt das ja "nichts weiter", dass du deinen Code ebenfalls unter GPL3 stellen musst wenn du Teile verwendest die "unter GPL3" stehen. Bei privater Verwendung interessiert das niemanden aber spätestens wenn du damit Geld verdienen möchtest.

Ne, aber ich stelle meine Sachen gerne open source auf github (üblicherweise unter Apache Lizenz). Da will ich ungerne unlizensierten Code einfach einfügen.
Am Besten wäre halt ein Git-Repository als Dependency, PlatformIO läd das dann ja sogar automatisch.

Hallo,

nach der Logik wäre das halbe Internet mit seinen Foren, Blogs und weiß der Geier illegal.

Doc_Arduino:
das halbe Internet mit seinen Foren, Blogs und weiß der Geier illegal.

Ach, ist es das etwa nicht?

Doc_Arduino:
Hallo,

nach der Logik wäre das halbe Internet mit seinen Foren, Blogs und weiß der Geier illegal.

Das ist keine "Logik", sondern die Rechtslage.

ElEspanol:
Ach, ist es das etwa nicht?

Wir reden nicht von Hostern und zugehörigen Foren.

ElCaron:
Das ist keine "Logik", sondern die Rechtslage.

Wenn ich hier eine Frage stelle weil ich ein Problem mit dem programmieren habe und ein anderer hilft mir und gibt mir ein Stück funktionierenden Code, einfach so, dann darf ich den nicht verwenden? Entschuldigung, der Logik kann nicht folgen. Dann dürfte mir ja niemand helfen und niemals ein Stück Code geben. Das wäre ja absolut Praxis fern.

Wenn ich hier im Forum Code bzw. Libs poste, dann kann die grundsätzlich jeder frei verwenden. Wenn ich das nicht möchte, dann würde ich erst gar nichts veröffentlichen. Wenn ich das mit GPL3 Lizenz veröffentlichen würde wäre aus meiner Sicht der einzigste Unterschied das ich den Nutzer dazu zwinge auch seinen Code zu veröffentlichen und jedem frei zur Verfügung stellen zu müssen. Im Privatbereich nicht umsetzbar bzw. durchsetzbar. Gilt rein praktisch nur für Firmen o.ä. die mit fremden GPL3 Code Geld verdienen wollen. Wenn die jedoch ihren Quellcode nie veröffentlichen kann es auch niemand prüfen.

Doc_Arduino:
Wenn die jedoch ihren Quellcode nie veröffentlichen kann es auch niemand prüfen.

Doch, auch da hat es schon erfolgreiche Klagen wegen GPL-Violation gegeben. Ich habe nur keine Lust das wieder raus zu suchen.

Gruß Tommy

Hallo,

ich glaube ich weiß was du meinst. Das hing jedoch anders zusammen. Da hatte jemand aus dem Linuxlager gegen Firmen geklagt weil die die GPL3 Lizenz nicht eingehalten haben.

Was ich meinte ist, wenn ich ein Produkt verkaufe und den Code dazu nie veröffentliche, wer will dann überhaupt wissen wie das programmiert ist. Zum veröffentlichen kann mich niemand zwingen. Wenn ich den Code aber veröffentliche und dann kommt raus der ist geklaut, ja dann habe ich ein Problem.

Man kann auch aus dem Kompilat bestimmte Strukturen erkennen.

Gruß Tommy

Drei Punkte:

  • Urheberrecht
  • Patent
  • Lizenz

In diesem Punkt "INTERVAL" kann ich dazu sagen, dass ich jedem die Nutzung erlaube.
Für jeden legalen Zweck.

Ich bitte darum, es nicht in Waffen einzusetzen.

Selber habe ich diese Art Makros im Mikrocontroller Forum gefunden.
Allerdings für einen gänzlich anderen Zweck.
Vollständig durchdrungen und auf das "Nachtwächter" Problem angewendet.

Von daher, betrachte ich mich als Urheber.
Bis die Gerichte was anderes sagen.

Irgendeine besondere Erfindungshöhe kann ich nicht sehen, also kommt kein Patent in Frage.


Ansonsten, möchte ich mich für die Zufriedenheitsbekundungen bedanken.
Danke!

Schön, wenn ihr was damit anfangen könnt!

Hi

Patent geht auch nur, solange der Kram nicht veröffentlicht wurde - meines Wissen nach - also wärst Du Damit 'etwas' spät.

... auch wäre Es doch blöd, ein nicht gerade billiges Patent zu erwirken und dann den Kram quasi zu verschenken ... also vll. nicht blöd - aber äußerst unwirtschaftlich.

MfG