INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Delayrandom welcher zeitwert
05.01.2021, 21:29
Beitrag #1
Delayrandom welcher zeitwert
Hallo,
ich hab folgendes Prgramm


Code:
#include <EEPROM.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define KerzenPIN 3, 4  
#define NUMPIXELS 4                         //1-4
#define tasterPin 1                        //Taster an D1 und GND
#define debounce_delay 15                  //Entprellzeit für den Taster in ms

bool tasterState, tasterState_alt;        // Variablendeklaration (global)
uint8_t counter;                          //Zählt wie oft die Taste gedrückt wurde

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUMPIXELS, PIN3, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUMPIXELS, PIN4, NEO_GRB + NEO_KHZ800);
void setup();
Definitionen eprom schalter etc.

void loop();
tasterabfrage 1-4 Läuft soweit so gut.

void kerze();

  int r = 255;
  int g = 96;
  int b = 12;

  for (int x = 0; x < 4; x++)
  {
    int flicker = random(0, 40);
    int r1 = r - flicker;
    int g1 = g - flicker;
    int b1 = b - flicker;
    if (g1 < 0) g1 = 0;
    if (r1 < 0) r1 = 0;
    if (b1 < 0) b1 = 0;
    strip1.setPixelColor(x, r1, g1, b1);
  }
  strip1.show();
  
  delay(random(50, 150));
  for (int i = 0; i < NUMPIXELS; i++) {
    strip1.setPixelColor(i, strip1.Color(0, 0, 0));
  }
  strip1.show();
}

Jetzt würde ich gerne den delay(random50,150); ändern und zwar in Millis nur leider sind für random keine millis angegeben.


Code:
unsigned long anZeit = 5000;                     // Zeit bis Beleuchtung ein
unsigned long ausZeit = 1000;                    // Zeit bis Beleuchtung ein
unsigned long previousMillis = 0;
unsigned long previousMillisan = 0;
unsigned long randomZeit = 5;                    // Zeit bis random
unsigned long previousMillisrandom = 0;

void setup() {

  Serial.begin(9600);
  Serial.println("Setup");

  pinMode(tasterPin, INPUT_PULLUP);

  strip1.begin();
  strip1.show();
  strip2.begin();
  strip2.show();

void loop();
tasterabfrage 1-4 Läuft soweit so gut.

voidkerze();
{
  int r = 255;
  int g = 96;
  int b = 12;

  for (int x = 0; x < 1; x++)
  {
    int flicker = random(0, 40);
    int r1 = r - flicker;
    int g1 = g - flicker;
    int b1 = b - flicker;
    if (g1 < 0) g1 = 0;
    if (r1 < 0) r1 = 0;
    if (b1 < 0) b1 = 0;
    strip1.setPixelColor(x, r1, g1, b1);
  }
  strip1.show();

  unsigned long currentMillisrandom = millis();                  // Millis setzen
  if (currentMillisrandom - previousMillisrandom >= randomZeit) {        // millis berechnen
    previousMillisrandom = currentMillisrandom;
    random(500, 1500);
    for (int i = 0; i < NUMPIXELS; i++) {
      strip1.setPixelColor(i, strip1.Color(0, 0, 0));
    }
  }
  strip1.show();

  unsigned long currentMillisan = millis();                  // Millis setzen
  if (currentMillisan - previousMillisan >= anZeit) {        // millis berechnen
    previousMillisan = currentMillisan;                      // alte neue setzen
    for (int x = 0; x < 2; x++)                              // neopixel 2stück setzen
      strip2.setPixelColor(x, 200, 200, 255);                // Farbe setzen
    strip2.show();                                           // an Pixel übergeben
  }

  unsigned long currentMillis = millis();                       //Millis setzen
  if (currentMillis - previousMillis >= ausZeit) {              //Millis setzen
    previousMillis = currentMillis;                            // alte neue setzen
    {
      for (int i = 0; i < NUMPIXELS; i++) {                     // neopixel 2 stück zurück setzen
        strip2.setPixelColor(i, strip1.Color(0, 0, 0));          // an Pixel übergeben
        strip2.show();
      }
    }
  }
}

}

jetzt hab ich versucht das delayrandom um zuschreiben auf millis haken an der sache
1. bei randomZeit mit einem Wert 1 oder grösser leuchten die LED`s im 2. Strip nicht mehr voll auch ist das Intervall nicht wie gewünscht 4000 warten 1000 ein (millis). Das ganze läuft ehr sporadisch oder jedes 2te x blinken die LED(strip2) voll.
ich finde den denk fehler nicht. könnte mir eventuell jemand helfen ? einwandfrei funktionieren tut es mit delay die LED leuchten voll auf..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2021, 22:02 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2021 22:03 von Tommy56.)
Beitrag #2
RE: Delayrandom welcher zeitwert
Code:
if (millis() - last >= intervall)
Da kannst Du intervall mit random verändern.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2021, 22:49 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2021 23:05 von senseman.)
Beitrag #3
RE: Delayrandom welcher zeitwert
Deine Aussage ist mir leider gerade nicht ganz klar.

Ich habe die zeile delay(random150, 1500));
jetzt frage ich mich wo ist bei delay die zeitangabe. Eigentlich werden doch nur die obere und untere zufallszahl vorgegeben.
Schreibe ich das Prog jetzt um
Code:
{

  int r = 255;
  int g = 96;
  int b = 12;

  for (int x = 0; x < 1; x++)
  {
    int flicker = random(0, 40);
    int r1 = r - flicker;
    int g1 = g - flicker;
    int b1 = b - flicker;
    if (g1 < 0) g1 = 0;
    if (r1 < 0) r1 = 0;
    if (b1 < 0) b1 = 0;
    strip1.setPixelColor(x, r1, g1, b1);
  }
  strip1.show();
  
// unsigned long currentMillisrandom = millis();                  // Millis setzen
  if (millis() - currentMillisrandom >= randomZeit) {        // millis berechnen
    random(500, 1500);
    for (int i = 0; i < NUMPIXELS; i++) {
      strip1.setPixelColor(i, strip1.Color(0, 0, 0));
    }
  }
  delay(random(50, 150));
  for (int i = 0; i < NUMPIXELS; i++) {
    strip1.setPixelColor(i, strip1.Color(0, 0, 0));
  }
  strip1.show();
  unsigned long currentMillisan = millis();
  if (currentMillisan - previousMillisan >= anZeit) {
    previousMillisan = currentMillisan;
    
    for (int x = 0; x < 2; x++)
      strip2.setPixelColor(x, 200, 200, 255);
    strip2.show();
  }

  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= ausZeit) {
    previousMillis = currentMillis;
    {
      for (int i = 0; i < NUMPIXELS; i++) {
        strip2.setPixelColor(i, strip1.Color(0, 0, 0));
        strip2.show();
      }
    }
  }
}
Dann hab ich auf Strip 2 ein zufalls geblinke. die randomzeit hab ich mit Wert 5 definiert.
Code:
unsigned long randomZeit = 5;

Jetzt wird Strip2 ebenfalls zufällig gewählt (an/aus) Strip2 sollte aber 4sec aus 1 sec an sein. Wo hab ich jetzt den denkfehler mit delay gehts Sad.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2021, 00:34
Beitrag #4
RE: Delayrandom welcher zeitwert
(05.01.2021 22:49)senseman schrieb:  ...
Ich habe die zeile delay(random150, 1500));
jetzt frage ich mich wo ist bei delay die zeitangabe. Eigentlich werden doch nur die obere und untere zufallszahl vorgegeben.
....

Deine Frage klärt sich bei der Arduino Code Reference...
Diese Reference sollte man immer auf dem Schirm haben *tippgebe*
lgbk


An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollte dann liest euch bitte diese Anleitung durch.

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2021, 10:42
Beitrag #5
RE: Delayrandom welcher zeitwert
(05.01.2021 22:49)senseman schrieb:  Wo hab ich jetzt den denkfehler mit delay gehts Sad.
Du verwendest millis() falsch. Schau Dir noch mal BlinkWithoutDelay an und verstehe es.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2021, 16:01
Beitrag #6
RE: Delayrandom welcher zeitwert
(06.01.2021 00:34)Bitklopfer schrieb:  
(05.01.2021 22:49)senseman schrieb:  ...
Ich habe die zeile delay(random150, 1500));
jetzt frage ich mich wo ist bei delay die zeitangabe. Eigentlich werden doch nur die obere und untere zufallszahl vorgegeben.
....

Deine Frage klärt sich bei der Arduino Code Reference...
Diese Reference sollte man immer auf dem Schirm haben *tippgebe*
lgbk

Ja was soll mir jetzt die referenz sagen ? Ich versteh nicht was delay(random150, 1500)); aussagt delay ist mir klar wenn in klammern ein wert gesetzt dann sind das die millis wie sieht es denn dann bei random aus, das ist doch eigentlich eine Zufallszahl. dann wäre die Zufallszahl millis 150 / 1500 ? Verstehe ich das so richtig ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2021, 16:11
Beitrag #7
RE: Delayrandom welcher zeitwert
(06.01.2021 16:01)senseman schrieb:  Ja was soll mir jetzt die referenz sagen ?
Zum Beispiel, was die Funktion random(150, 1500) macht und was die beiden Parameter bedeuten. Lesen musst Du schon selbst.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2021, 20:50
Beitrag #8
RE: Delayrandom welcher zeitwert
Danke ich habs gelesen & geschrieben wie ich es verstehe. Da wäre es nett mal zu sagen ob ich damit richtig liege. nämlich das die zeit im Zeitfenster bei 150-1500 liegt also min & max wert durch zufall mit dem befehl random.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino Taster - Welcher Fehler? lil.chem 4 1.010 10.02.2020 22:39
Letzter Beitrag: Franz54
Brick Welcher FTP Client um mehrere Dateien auf den Server zu schieben. derAllgaeuer 26 8.807 19.08.2017 21:27
Letzter Beitrag: Bitklopfer
  Arduino Due lib <Scheduler.h> : ggf. welcher IRQ ? HaWe 0 1.828 17.10.2014 10:22
Letzter Beitrag: HaWe

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste