DCF77 vs adafruit Neopixel kannst du mir helfen?

Hallo
Ich habe einen Arduino Uno und benutze einen Funkuhrempfänger DCF77 und ein LED streifen mit AdafruitNeopixel.
Mein problem:
mit dem beispiel sketch DCF Signal von DCF77

#define BLINKPIN 13
#define DCF77PIN 2

int prevSensorValue=0;

void setup() {
Serial.begin(9600);
pinMode(DCF77PIN, INPUT);
pinMode(13, OUTPUT);
Serial.println("0ms 100ms 200ms 300ms 400ms 500ms 600ms 700ms 800ms 900ms 1000ms 1100ms 1200ms");
}

void loop() {
int sensorValue = digitalRead(DCF77PIN);
if (sensorValue==1 && prevSensorValue==0) { Serial.println(""); }
digitalWrite(BLINKPIN, sensorValue);
Serial.print(sensorValue);
prevSensorValue = sensorValue;
delay(10);
}

kann ich sofort am Arduino Uno das LED (13) on Board zum takt der einkommenden Funksignale blinken sehen.

nun möchte ich dieses blinken auf einem einzelnen LED auf meinem WS2812b-LED-Band mit der Neopixel Adafruit Bibliothek blinken lassen .
meine Idee
if (digitalRead(DCF_PIN)==LOW){pixels.setPixelColor(59, pixels.Color(7,0,0)); }else{ pixels.setPixelColor(59, pixels.Color(0,0,0)); }

Aber das funktioniert nicht.
Die Logic sollte so oder ähnlich sein: wenn LED13 blinkt dann blinkt LED59 aud dem LED Streifen.
haben sie eine Idee wie ich das machen kann ?
Über deine Antwort bin ich wirklich sehr Dankbar und ich wünsche ihnen einen schönen Tag.
Liebe Grüße

@murdoc50

a) lies im Forum how to nach wie man code postest und korrigiere deinen ersten Post (edit)
b) hast du pixels.show() vergessen?
c) poste deinen Code inklusivie deiner Änderung mit Neopixel

Hallo,
eventuell ist 7 ein bisschen wenig und Du siehst es nicht. Versuch mal mit einem wesentlich grösseren Wert.

Versuche doch erst mal eine LED des Streifens mit einem Eingang ein und aus zu schalten. Und pixel.show() nicht vergessen.
Heinz

Other post/duplicate DELETED
Please do NOT cross post / duplicate as it wastes peoples time and efforts to have more than one post for a single topic.

Continued cross posting could result in a time out from the forum.

Could you also take a few moments to Learn How To Use The Forum.

Other general help and troubleshooting advice can be found here.

It will help you get the best out of the forum in the future.

@gpb01 Feel free to replace my comment with one in German.
Thanks.

Hi Perry ... Mmm ... for German you have to contact @UweFederer :wink:

Guglielmo

Oh, sorry! I'm getting older and dafter every day :upside_down_face:
@uwefed please clean up the mess I've made!

Thank you.

1 Like

Hallo Heinz
Danke für deine Antwort !
Ich kann jedes licht auf dem LED Streifen ansteueren bzw. an und aus machen. mit Licht 7 ist es gut zu sehen das funktioniert einwandfrei,

Ich möchte nur wissen wie ich eine Logische verbindung herstellen kann, so das wenn LED 13 vom Arduino Bord aufleuchtet gleichzeitig ein LED auf dem Lichtstreifen angeht ?
Weißt du wie das geht ?
Gruß
Jessica

Hallo noiasca,
bitte entschuldige, ich bin neu.
Ja Pixels.show habe ich an. Ich habe keine probleme mit dem LED Streifen das klappt alles wunderbar, Ich möchte nur eben wenn die LED 13 von dem Board leuchtet, das ich das auf dem Lichtstreifen sehen kann. Weißt du wie ich das machen kann ?

Hier nochmal der Beispiel Sketch namens: DCF Signal vom DCF77 Libari

#define BLINKPIN 13
#define DCF77PIN 2

int prevSensorValue=0;

void setup() {
Serial.begin(9600);
pinMode(DCF77PIN, INPUT);
pinMode(13, OUTPUT);
Serial.println("0ms 100ms 200ms 300ms 400ms 500ms 600ms 700ms 800ms 900ms 1000ms 1100ms 1200ms");
}

void loop() {
int sensorValue = digitalRead(DCF77PIN);
if (sensorValue==1 && prevSensorValue==0) { Serial.println(""); }
digitalWrite(BLINKPIN, sensorValue);
Serial.print(sensorValue);
prevSensorValue = sensorValue;
delay(10);
}

kann ich sofort am Arduino Uno das LED (13) on Board zum takt der einkommenden Funksignale blinken sehen.

nun möchte ich dieses blinken auf einem einzelnen LED auf meinem WS2812b-LED-Band mit der Neopixel Adafruit Bibliothek blinken lassen .
meine Idee
if (digitalRead(DCF_PIN)==LOW){pixels.setPixelColor(59, pixels.Color(7,0,0)); }else{ pixels.setPixelColor(59, pixels.Color(0,0,0)); }

Wie gesagt: DCF77 Funktioniert
DCF Signal wird empfangen.
Uhrzeit wird eingestellt.
Neopixel LED Streifen funktioniert
jetz möchte ich als überwachung ob das Signal eintrifft Optisch auf dem LED Streifen sehen.
Das LED 13 auf dem Arduiono Bord blinkt bei jedem Signal einmal. wenn man die Antenne an den Arduino hält fängt es an zu flakern, weil die Funksignale gestört werden, diese Störung oder eben das saubere Signal soll sichtbar auf dem LED Streifen werden. Ich hoffe ich habs einigermaßen verständlich erklärt ?
Vielen Lieben Dank für Eure Hilfe.
Gruß
Jessica

Keine Ahnung, Meine Idee wäre, eine zusätzliche bool anlegen:

bool lastDCF = false;

Und dann im loop():

  if (digitalRead(DCF_PIN) != lastDCF)
  {
    lastDCF = !lastDCF;
    if (lastDCF)
    {pixels.setPixelColor(59, pixels.Color(7, 0, 0)); }
    else
    { pixels.setPixelColor(59, pixels.Color(0, 0, 0)); }
    pixels.show();
  }

Dankeschön habes gerade ausprobiert, aber es funktioniert leider nicht.
Trotzdem Vielen vielen Dank

Dann zeig doch mal was, auf was aufgebaut werden kann - Deine Schnipsel sind nciht zielführend - und "geht nicht" ist leider keine Aussage.

Hallo
ich habe hier Neopixel und DCF 77 zusammengetan, wenn ich diesen sketch laufen lasse leuchtet LED 1Rot LED2 Grün LED3 Blau und LED 4 soll genauso wie das LED 13 auf dem Arduino blinken.

Auf dem Arduino wird über den DCF77 das Funsignal der Funkuhrübertragung
auf dem Pin 13 (BLINKPIN) angezeigt. Es blinkt pro sekunde entweder 200ms oder 100ms eben so wie das Funksignal per Morsecode ankommt z.B lang kurz kurz lang usw.. .
Dieses Blinken möchte ich auf dem LED Streifen bringen ( z.b. LED 4 )
Ich habe hier auch deinen Code eingefügt und es laufen lassen aber wie gesagt es blinkt nur auf dem Arduino UNO Onboard Pin 13 (BLINKPIN) ?
LG

#include <DCF77.h>  
#include <Adafruit_NeoPixel.h>
#include <TimeLib.h>


#define BLINKPIN 13
#define PIN           12
#define DCF_PIN 2          
#define DCF_INTERRUPT 0
int prevSensorValue=0;
#define NUMPIXELS     4 
#define LED(x,y)  pixels.setPixelColor(x,y)
bool lastDCF = false;

time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT,true);

Adafruit_NeoPixel pixels = 
Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(9600);
  pinMode(DCF_PIN, INPUT);
  pinMode(13, OUTPUT);
  Serial.println("0ms       100ms     200ms     300ms     400ms     500ms     600ms     700ms     800ms     900ms     1000ms    1100ms    1200ms");
DCF.Start();
pixels.begin(); // Initialize NeoPixel library.
bool lastDCF = false;
}

void loop() 
{
pixels.setPixelColor(1, pixels.Color(30,0,0));// Marker
pixels.setPixelColor(2, pixels.Color(0,30,0));// Marker
pixels.setPixelColor(3, pixels.Color(0,0,30));// Marker
   
int sensorValue = digitalRead(DCF_PIN);
if (sensorValue==1 && prevSensorValue==0) { Serial.println("");   }
digitalWrite(BLINKPIN, sensorValue);
Serial.print(sensorValue);   
prevSensorValue = sensorValue;
delay(10);

 if (digitalRead(DCF_PIN) != lastDCF)
  {
    lastDCF = !lastDCF;
    if (lastDCF)
    {pixels.setPixelColor(4, pixels.Color(7, 0, 0)); }
    else
    { pixels.setPixelColor(4, pixels.Color(0, 0, 0)); }
    pixels.show();}
  
pixels.show(); // showtime 
}

Es ist keine gute Idee immer wieder die Daten auf den LED Streifen zu senden.
Im Sketch hast Du ja bereits eine Kanten- Erkennung um auf die serielle Schnittstelle zu senden.

Pixels.show sendet die Daten auf den LED Streifen. Es muß jedesmal aufgerufen werden wenn sich was auf dem Streifen ändern soll.

Du mußt nicht nur den L-H Übergang kontrollieren sondern auch den L-H Übergang um prevSensorValue wieder auf LOW zu setzen. Ansonsten funktioniert das nur einmal.

Ist das der vollständige Sketch oder nur ein Teil?
Zeigst Du uns wie Du versucht hast die WS2812 anzusteuern?

DCF77 ist ziemlich empfindlich gegenüber allem möglichen Störungen. Darum ist DCF77 nur sinnvoll um eine RTC zu setzen und nicht als Uhr.

Grüße Uwe

Unkommentiert, ungetestet, kompiliert Fehler- und Warnungsfrei.
Mein erster Schuß.

#include <DCF77.h>
#include <Adafruit_NeoPixel.h>
#include <TimeLib.h>

const byte PIN = 12;
const byte DCF_PIN = 2;
const byte DCF_INTERRUPT = 0;
int prevSensorValue = 0;
#define NUMPIXELS     4
#define LED(x,y)  pixels.setPixelColor(x,y)

time_t time;
DCF77 DCF = DCF77(DCF_PIN, DCF_INTERRUPT, true);

Adafruit_NeoPixel pixels =
  Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup()
{
  Serial.begin(9600);
  pinMode(DCF_PIN, INPUT);
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.println("0ms       100ms     200ms     300ms     400ms     500ms     600ms     700ms     800ms     900ms     1000ms    1100ms    1200ms");
  DCF.Start();
  pixels.begin(); // Initialize NeoPixel library.
}

void loop()
{
  pixels.setPixelColor(1, pixels.Color(30, 0, 0)); // Marker
  pixels.setPixelColor(2, pixels.Color(0, 30, 0)); // Marker
  pixels.setPixelColor(3, pixels.Color(0, 0, 30)); // Marker
  int sensorValue = digitalRead(DCF_PIN);
  if (sensorValue == 1 && prevSensorValue == 0)
  {
    Serial.println("");
  }
  digitalWrite(LED_BUILTIN, sensorValue);
  Serial.print(sensorValue);
  if (prevSensorValue != sensorValue)
  {
    prevSensorValue = sensorValue;
    pixels.setPixelColor(4, pixels.Color(70 * sensorValue, 0, 0));
  }
  pixels.show(); // showtime
}

Hallo Uwe

#include <DCF77.h>  
#include <Adafruit_NeoPixel.h>
#include <TimeLib.h>


#define BLINKPIN 13
#define PIN           12
#define DCF_PIN 2          
#define DCF_INTERRUPT 0
int prevSensorValue=0;
#define NUMPIXELS     4 
#define LED(x,y)  pixels.setPixelColor(x,y)
bool lastDCF = false;

time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT,true);

Adafruit_NeoPixel pixels = 
Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(9600);
  pinMode(DCF_PIN, INPUT);
  pinMode(13, OUTPUT);
  Serial.println("0ms       100ms     200ms     300ms     400ms     500ms     600ms     700ms     800ms     900ms     1000ms    1100ms    1200ms");
DCF.Start();
pixels.begin(); // Initialize NeoPixel library.
bool lastDCF = false;
}

void loop() 
{
pixels.setPixelColor(1, pixels.Color(30,0,0));// Marker
pixels.setPixelColor(2, pixels.Color(0,30,0));// Marker
pixels.setPixelColor(3, pixels.Color(0,0,30));// Marker
   
int sensorValue = digitalRead(DCF_PIN);
if (sensorValue==1 && prevSensorValue==0) { Serial.println("");   }
digitalWrite(BLINKPIN, sensorValue);
Serial.print(sensorValue);   
prevSensorValue = sensorValue;
delay(10);

 if (digitalRead(DCF_PIN) != lastDCF)
  {
    lastDCF = !lastDCF;
    if (lastDCF)
    {pixels.setPixelColor(4, pixels.Color(7, 0, 0)); }
    else
    { pixels.setPixelColor(4, pixels.Color(0, 0, 0)); }
    pixels.show();}
  
pixels.show(); // showtime 
}

ich habe hier Neopixel und DCF 77 zusammengetan, wenn ich diesen sketch laufen lasse leuchtet LED 1Rot LED2 Grün LED3 Blau und LED 4 soll genauso wie das LED 13 auf dem Arduino blinken.

Auf dem Arduino wird über den DCF77 das Funsignal der Funkuhrübertragung
auf dem Pin 13 (BLINKPIN) angezeigt. Es blinkt pro sekunde entweder 200ms oder 100ms eben so wie das Funksignal per Morsecode ankommt z.B lang kurz kurz lang usw.. .
Dieses Blinken möchte ich auf dem LED Streifen bringen ( z.b. LED 4 )
Ich habe hier auch deinen Code eingefügt und es laufen lassen aber wie gesagt es blinkt nur auf dem Arduino UNO Onboard Pin 13 (BLINKPIN) ?

DCF77 Funktioniert
DCF Signal wird störfrei empfangen, weil ich sehen kann wie der andere Beispiel sketch die
Uhrzeit exakt eingestellt.
Neopixel LED Streifen funktioniert
pixels.show();} ganz am ende vom Loop

LG

dann sollst du aber auch auf LED 13 abfragen und nicht auf DCF_PIN

if (digitalRead(BLINKPIN ) != lastDCF)

und setzte mal testweise nicht 7 sondern 255

 {pixels.setPixelColor(4, pixels.Color(255, 0, 0)); }

Sollte er nicht blinken, dann ersetze:

durch

  if (prevSensorValue != sensorValue)
  {
    if (prevSensorValue == 0 || sensorValue == 0)
    {pixels.setPixelColor(4, pixels.Color(70 * sensorValue, 0, 0));}
    prevSensorValue = sensorValue;
  }

zweiter Schuß :wink:

Klappt nicht. Ich habe deinen Faktor 70 auch mit 100 200 1000 2000 und 0,1 ausprobiert aber es blinkt leider nicht ?

wenn ich von Pin 13 auf GRND den Strom Messe sind da pro sekunde von 0V bis 4,8V Max drauf
LG

Danke [my_xy_projekt]

ich habe auch noch den Faktor 100 200 500 1000 2000 und 0,1 probiert aber es blinkt nicht.?