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
Funknetzwerk mit Uhr und Wecker - Sketch stoppt bei Funk
01.01.2015, 18:56
Beitrag #1
Funknetzwerk mit Uhr und Wecker - Sketch stoppt bei Funk
Ich habe hier ein Sketch gebastelt, als Basis ist es eine Uhr mit Weck- und Alarmfunktionen... das läuft auch prima...

nun möchte ich den Status des anzuwendenden Lichtprogramms an verschiedene Lampen senden...

allerdings bekomme ich in dem Moment wo ich den (einzeln funktionierenden) Teil zum senden in den Sketch einfüge weder eine Uhrzeit, noch etwas gesendet...

Anbei die Sketche... Vielleicht erkennt einer der Profis hier, wo ich bei zusammensetzen der Sketche einen Fehler mache....

Uhr mit Wecker:
Code:
/* ---Zenrtale Lichtsteuerung basierend auf---
*
*     blinkenclock - multiprupose LED wall clock
*     version 0.1 alpha
*     Copyright by Bjoern Knorr 2013
*
*     http://netaddict.de/blinkenlights:blinkenclock
*
* ---Funktionen---
*    
*     LED Uhr mit 60 Neopixel RGB-LED
*     Einbindung aktuell eines RTC- shields für die Bereitstellung und Speicherung von Datum und Zeit
*     verschiedene Weckfunktion basierend auf TimeAlarms.h
*     verschiedene Lichprogramme werden von zentraler Steuerung via NRF24 an die lokalen Steuerungen gesandt.
*     aktivierung der Lichtprogramme Zeitabhängig
*    
*     Helligekeitssensor paßt LED-Helligkeit an UMgebungslicht an. Bei Nacht bleiben nur Minuten und Stundenzeiger mit minimaler Helligkeit aktiv
*     Rückgabe der aktuellen Lampenhelligkeit via separaten LED- Streifen (eine LED je Lampe)
* */

#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include <Time.h>  
#include <DS1307RTC.h>
#include <TimeAlarms.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
//#include "printf.h"

int sensorPin = A0;  
int sensorValue = 0;

// define something
#define LED_PIN 8 // LED strip pin
#define BUTTON_PIN 6 // push button pin number
#define BUTTON_PIN1 7 // push button pin number
#define ALARM_TIME_MET

Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, LED_PIN, NEO_GRB + NEO_KHZ800);
// Speicher Lichtprogramm
uint8_t light = 0;

// default mode is clock mode
uint8_t mode = 0;

// alert mode is per default green
uint8_t alert = 0;

// submode
uint8_t submode = 1;

// clock option show five minute dots
uint8_t coptionfivemin = 1;

// clock option invert colors
boolean coptioninvert = 1;

// clock option fade seconds
boolean coptionfade = 1;

// multiprupose counter
int counter = 1;

// alert counter
int alertcounter = 1;

// redraw flag
boolean redraw = 0;

// time cache
unsigned long currenttime = 0;
unsigned long lasttime = 0;
unsigned long alerttime = 0;
// last second
uint8_t lastsecond = 0;

// strip color (ambient)
uint32_t color_ambient;

// initialize everything
void setup() {
  Serial.begin(9600);
  setSyncProvider(RTC.get);
  setSyncInterval(1);
  // create the alarms
  Alarm.alarmRepeat(14,50,0,MorningAlarm);  // 8:30am every day
  Alarm.alarmRepeat(20,25,0,EveningAlarm);  // 5:45pm every day
  Alarm.alarmRepeat(dowMonday,5,5,0,WeeklyAlarmMO);  // 8:30:30 every Saturday
  Alarm.alarmRepeat(dowTuesday,5,5,0,WeeklyAlarmDI);
  Alarm.alarmRepeat(dowWednesday,5,5,0,WeeklyAlarmMI);
  Alarm.alarmRepeat(dowThursday,5,5,0,WeeklyAlarmDO);
  Alarm.alarmRepeat(dowFriday,5,5,0,WeeklyAlarmFR);
  Alarm.alarmRepeat(dowSaturday,8,30,0,WeeklyAlarmSA);
  Alarm.alarmRepeat(dowSunday,8,30,0,WeeklyAlarmSO);
  Alarm.alarmRepeat(5,0,0,Lichtprogramm1);
  Alarm.alarmRepeat(6,30,0,Lichtprogramm2);
  Alarm.alarmRepeat(8,30,0,Lichtprogramm3);
  Alarm.alarmRepeat(17,0,0,Lichtprogramm4);
  Alarm.alarmRepeat(20,0,0,Lichtprogramm5);
  Alarm.alarmRepeat(23,0,0,Lichtprogramm6);
  
  Alarm.timerRepeat(50, Repeats);            // timer for every 15 seconds    
  Alarm.timerOnce(10, OnceOnly);             // called once after 10 seconds  
  strip.begin();
  strip.show();
  lasttime = millis();
  currenttime = millis();
  alerttime = millis();
  lastsecond = second();
  color_ambient = strip.Color(0, 180, 255);
  pinMode(A1, INPUT);
  pinMode(BUTTON_PIN, INPUT);
  digitalWrite(BUTTON_PIN, HIGH);
  uint8_t alarmHours = 0, alarmMinutes = 0;  // Holds the current alarm time
  uint8_t tmpHours;
  boolean alarm = false;  // Holds the current state of the alarm
  delay(20);

}

// main loop
void loop(){  
  // timing
  Alarm.delay(1);
  currenttime = millis();
  sensorValue = analogRead(sensorPin);

  // apply the calibration to the sensor reading
  sensorValue = map(sensorValue, 0, 700, 0, 255);

  // in case the sensor value is outside the range seen during calibration
  sensorValue = constrain(sensorValue, 0, 255);
  // functions to be called when an alarm triggers:

  // check for button
  if(digitalRead(BUTTON_PIN) == LOW) {
    mode++;
    if (mode>4) {
      mode = 0;  
    }
    delay(25);
}
  // if enough serial data available, process it
  if(Serial.available()) {
    serialMessage();
  }
  
  // select mode and show blinken pixelz!
  // show clock
  if (mode==0) {
    if(currenttime - lasttime > 45) {
      clockMode();
      redraw = 1;
      lasttime = currenttime;
    }
  }

  // demo mode - show rgb cycle
  else if (mode==1) {
    if(currenttime - lasttime > 50) {
      
        // reset counter
      if (counter >= 256) {
        counter = 0;
      }
    
      for(uint16_t i=0; i< strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + counter) & 255));
      }
      redraw = 1;
      counter++;
      lasttime = currenttime;
    }
  }

  // single color mode
  else if (mode==2) {
    if(currenttime - lasttime > 5) {
      lightPixels(strip.Color(155, 155, 155));
      redraw = 1;
      lasttime = currenttime;
    }
  }
  
  else if (mode==3) {
    if(currenttime - lasttime > 5) {
      lightPixels(strip.Color(55, 155, 155));
      redraw = 1;
      lasttime = currenttime;
    }
  }
  else if (mode==4) {
    if(currenttime - lasttime > 5) {
       {lightPixels(strip.Color(155, 55, 55));
      redraw = 1;
      lasttime = currenttime;
    }
  }
  }
  
  // alert - overrides everything
if(digitalRead(BUTTON_PIN1) == LOW) {
    alert=0;  
    }
  if (alert && (currenttime - alerttime > 20)) {
    if (alertcounter > 59) {
      alertcounter = 0;  
    }
    alertcounter++;
    redraw = 1;
    alerttime = millis();
  }
  if (alert==1) {
    drawCycle(alertcounter, strip.Color(255, 200, 0));
  }
  if (alert==2) {
    drawCycle(alertcounter, strip.Color(200, 255, 0));
  }
    
  // redraw if needed
  if(redraw) {
    strip.show();
    redraw = 0;
  }
}

// clock mode
String get_day_of_week(uint8_t dow){
  
  String dows="  ";
  switch(dow){
   case 0: dows="So"; break;
   case 1: dows="Mo"; break;
   case 2: dows="Di"; break;
   case 3: dows="Mi"; break;
   case 4: dows="Do"; break;
   case 5: dows="Fr"; break;
   case 6: dows="Sa"; break;
  }
  
  return dows;
}

void Lichtprogramm1(){
  Serial.println("Dimme die Lampen schnell auf 100%, langsam und sanft wieder aus");
  light = 1;
}

void Lichtprogramm2(){
  Serial.println("sanftes Dimmen auf 50%, schnell und sanft wieder aus");
  light = 2;
}

void Lichtprogramm3(){
  Serial.println("Dimme die Lampen langsamer auf 100%, langsam und sanft wieder aus");
  light = 3;
}

void Lichtprogramm4(){
  Serial.println("Dimme die Lampen schnell auf 100%,, nach kurzer Zeit wieder aus");
  light = 4;
}

void Lichtprogramm5(){
  Serial.println("Dimme die Lampen sanft auf 80%, nach langer Zeit sanft wieder aus");
  light = 5;
}

void Lichtprogramm6(){
  Serial.println("Dimme die Lampen sanft auf 20% und nach kurzer Zeit sanft wieder aus");
  light = 6;
}

void MorningAlarm(){
  Serial.println("Guten Morgen");
     alert=1;
}

void EveningAlarm(){
  Serial.println("Abendprogramm");
mode=1;  
}

void WeeklyAlarmMO(){
  Serial.println("Wecker Montags");
alert=1;  
}
void WeeklyAlarmDI(){
  Serial.println("Wecker Dienstags");
alert=1;  
}
void WeeklyAlarmMI(){
  Serial.println("Wecker Mittwochs");
alert=1;  
}
void WeeklyAlarmDO(){
  Serial.println("Wecker Donnerstags");
alert=1;  
}
void WeeklyAlarmFR(){
  Serial.println("Wecker Freitags");
alert=1;  
}
void WeeklyAlarmSA(){
  Serial.println("Wecker Samstags");
mode=1;  
}
void WeeklyAlarmSO(){
  Serial.println("Wecker Sonntags");
mode=1;  
}

void ExplicitAlarm(){
  Serial.println("Alarm: - this triggers only at the given date and time");      
}

void Repeats(){
  Serial.println("15 second timer");
  clockMode();
}

void OnceOnly(){
  Serial.println("This timer only triggers once");  
}

void clockMode() {
  
  Serial.print(day());
  Serial.print(".");
  Serial.print(month());
  Serial.print(".");
  Serial.print(year());
  Serial.print(" - ");
  Serial.print(hour());
  Serial.print(":");
  Serial.print(minute());
  Serial.print(":");
  Serial.print(second());
  Serial.println();
  
  // Wochentag anzeigen
  switch(weekday()) {
  case 1:
    Serial.println("Sonntag");
    //mySerial.print(" Sonntag  ");
    break;
  case 2:
    Serial.println("Montag");
    //mySerial.print("  Montag  ");
    break;
  case 3:
    Serial.println("Dienstag");
    //mySerial.print(" Dienstag ");
    break;
  case 4:
    Serial.println("Mittwoch");
    //mySerial.print(" Mittwoch ");
    break;
  case 5:
    Serial.println("Donnerstag");
    //mySerial.print("Donnerstag");
    break;
  case 6:
    Serial.println("Freitag");
    //mySerial.print(" Freitag  ");
    break;
  case 7:
    Serial.println("Samstag");
    //mySerial.print(" Samstag  ");
    break;
  }
   time_t t = now();
  uint8_t analoghour = hour(t);
  uint8_t currentsecond = second(t);
  
  if (analoghour > 12) {
    analoghour=(analoghour-12);
  }
  analoghour = analoghour*5+(minute(t)/12);

  lightPixels(strip.Color((255 - sensorValue)/50, (255 - sensorValue)/50, (255 - sensorValue)/50));
  
  if (coptionfivemin) {
    for (uint8_t i=0; i<60; i += 5) {
      strip.setPixelColor(i,strip.Color((255 - sensorValue)/10, (255 - sensorValue)/10, (255 - sensorValue)/15));
    }
  }
  
  strip.setPixelColor(pixelCheck(analoghour-1),strip.Color((255 - sensorValue)/5, (255 - sensorValue)/10, 0));
  strip.setPixelColor(pixelCheck(analoghour),strip.Color((255 - sensorValue), (255 - sensorValue)/2, 1));
  strip.setPixelColor(pixelCheck(analoghour+1),strip.Color((255 - sensorValue)/5, (255 - sensorValue)/10, 0));
  
  strip.setPixelColor(minute(t),strip.Color((255 - sensorValue), (255 - sensorValue)/4, (270 - sensorValue)/15));
  
  strip.setPixelColor(second(t),strip.Color((255 - sensorValue)/2, (255 - sensorValue)/2, 0));
  
  
  // ------ Umschaltbarer Sekundenzeiger Anfang ------
  //if (coptionfade) {
    // reset counter
    //if(counter>25) {
      //counter = 0;
    //}
    //else if (lastsecond != currentsecond) {
      //lastsecond = second();
      //counter = 0;  
    //}
    //strip.setPixelColor(pixelCheck(second(t)+1),strip.Color(counter*10, counter*10, 0));  
    //strip.setPixelColor(second(t),strip.Color(255-(counter*10), 255-(counter*10), 0));
    //counter++;
  //}
  //else {
  //  strip.setPixelColor(second(t),strip.Color((270 - sensorValue)/5, (257 - sensorValue)/5, 0));
  //}
  // ------ Umschaltbarer Sekundenzeiger Ende ------
}

// cycle mode
void drawCycle(int i, uint32_t c)
{
  for(uint8_t ii=5; ii>0; ii--) {
    strip.setPixelColor(pixelCheck(i-ii),c);
  }
}

// show a progress bar - assuming that the input-value is based on 100%
void progressBar(int i) {
  map(i, 0, 100, 0, 59);
  lightPixels(strip.Color(0, 0, 0));
  for (uint8_t ii=0; ii<i; ii++) {
    strip.setPixelColor(ii,strip.Color(5, 0, 5));
  }
}

// light all pixels with given values
void lightPixels(uint32_t c) {
  for (uint8_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i,c);
  }
}

// set the correct pixels
int pixelCheck(int i) {
  if (i>59) {
    i = i - 60;
  }
  if (i<0) {
    i = i +60;
  }
  return i;
}

void serialMessage() {
  if(Serial.available()){
    char sw = Serial.read();
    switch (sw) {

      // set time
    case 'T':
      {
        delay(50);
        time_t pctime = 0;
        while(Serial.available() >=  10 ){      
          for(int i=0; i < 10; i++){  
            char c = Serial.read();    
            Serial.print("x");      
            if( c >= '0' && c <= '9'){  
              pctime = (10 * pctime) + (c - '0');    
            }
          }  
        }
        setTime(pctime);
        RTC.set(pctime);
        Serial.println("OK - Time set");
        break;
      }

      //demo mode (shows rgb cycle)
    case 'D':
      {
        mode = 1;
        Serial.println("OK - Demo mode.");
        break;
      }

      //clock mode (shows time)
    case 'C':
      {
        mode = 0;
        Serial.println("OK - Clock mode.");
        break;
      }

      //music mode (clock shows bouncing colors)
    case 'M':
      {
        mode = 2;
        Serial.println("OK - single collor mode");
        break;
      }

      //ambient mode (clock shows defined color)
    case 'L':
      {
        mode = 3;
        Serial.println("OK - Ambient light mode. Chill!");
        break;
      }

      //alert mode - green alert (clock flashes orange)
    case 'G':
      {
        alert = 0;
        Serial.println("OK - Green Alert.");
        break;
      }

      //alert mode - orange alert (clock flashes orange)
    case 'O':
      {
        alert = 1;
        Serial.println("OK - Orange Alert.");
        break;
      }

      //alert mode - red alert (clock flashes red)
    case 'R':
      {
        alert = 2;
        Serial.println("OK - Red Alert - Shields up! Arm the phasers!");
        break;
      }
      
       //clock option five minute dots
    case '5':
      {
        if (coptionfivemin) {
          coptionfivemin = 0;  
        }
        else {
          coptionfivemin = 1;  
        }
        Serial.println("OK - Tongled clock five minute dots.");
        break;
      }
      
       //clock option fade seconds
    case 'F':
      {
        if (coptionfade) {
          coptionfade = 0;  
        }
        else {
          coptionfade = 1;  
        }
        Serial.println("OK - Tongled clock fade mode.");
        break;
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
  else if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

Uhr mit Funk

Code:
/* ---Zenrtale Lichtsteuerung basierend auf---
*
*     blinkenclock - multiprupose LED wall clock
*     version 0.1 alpha
*     Copyright by Bjoern Knorr 2013
*
*     http://netaddict.de/blinkenlights:blinkenclock
*
* ---Funktionen---
*    
*     LED Uhr mit 60 Neopixel RGB-LED
*     Einbindung aktuell eines RTC- shields für die Bereitstellung und Speicherung von Datum und Zeit
*     verschiedene Weckfunktion basierend auf TimeAlarms.h
*     verschiedene Lichprogramme werden von zentraler Steuerung via NRF24 an die lokalen Steuerungen gesandt.
*     aktivierung der Lichtprogramme Zeitabhängig
*    
*     Helligekeitssensor paßt LED-Helligkeit an UMgebungslicht an. Bei Nacht bleiben nur Minuten und Stundenzeiger mit minimaler Helligkeit aktiv
*     Rückgabe der aktuellen Lampenhelligkeit via separaten LED- Streifen (eine LED je Lampe)
* */

#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include <Time.h>  
#include <DS1307RTC.h>
#include <TimeAlarms.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <RF24Network.h>

int sensorPin = A0;  
int sensorValue = 0;

// nRF24L01(+) radio attached using Getting Started board
RF24 radio(9,10);

// Network uses that radio
RF24Network network(radio);

// Address of our node
const uint16_t this_node = 0;

// Address of the other node
const uint16_t other_node = 1;

// How often to send 'hello world to the other unit
const unsigned long interval = 2000; //ms

// When did we last send?
unsigned long last_sent;

// How many have we sent already
unsigned long packets_sent;

// Structure of our payload
struct payload_t
{
  unsigned long ms;
  unsigned long counter;
};


// define something
#define LED_PIN 8 // LED strip pin
#define BUTTON_PIN 6 // push button pin number
#define BUTTON_PIN1 7 // push button pin number
#define ALARM_TIME_MET

Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, LED_PIN, NEO_GRB + NEO_KHZ800);

// Speicher Lichtmodus
uint8_t light = 0;

// default mode is clock mode
uint8_t mode = 0;

// alert mode is per default green
uint8_t alert = 0;

// submode
uint8_t submode = 1;

// clock option show five minute dots
uint8_t coptionfivemin = 1;

// clock option invert colors
boolean coptioninvert = 1;

// clock option fade seconds
boolean coptionfade = 1;

// multiprupose counter
int counter = 1;

// alert counter
int alertcounter = 1;

// redraw flag
boolean redraw = 0;

// time cache
unsigned long currenttime = 0;
unsigned long lasttime = 0;
unsigned long alerttime = 0;
// last second
uint8_t lastsecond = 0;

// strip color (ambient)
uint32_t color_ambient;

// initialize everything
void setup() {
  Serial.begin(57600);
  Serial.println("RF24Network/examples/helloworld_tx/");
  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 90, /*node address*/ this_node);
  setSyncProvider(RTC.get);
  setSyncInterval(1);
  // create the alarms
  Alarm.alarmRepeat(14,50,0,MorningAlarm);  // 8:30am every day
  Alarm.alarmRepeat(20,25,0,EveningAlarm);  // 5:45pm every day
  Alarm.alarmRepeat(dowMonday,5,5,0,WeeklyAlarmMO);  // 8:30:30 every Saturday
  Alarm.alarmRepeat(dowTuesday,5,5,0,WeeklyAlarmDI);
  Alarm.alarmRepeat(dowWednesday,5,5,0,WeeklyAlarmMI);
  Alarm.alarmRepeat(dowThursday,5,5,0,WeeklyAlarmDO);
  Alarm.alarmRepeat(dowFriday,5,5,0,WeeklyAlarmFR);
  Alarm.alarmRepeat(dowSaturday,8,30,0,WeeklyAlarmSA);
  Alarm.alarmRepeat(dowSunday,8,30,0,WeeklyAlarmSO);
  Alarm.alarmRepeat(5,0,0,Lichtprogramm1);
  Alarm.alarmRepeat(6,30,0,Lichtprogramm2);
  Alarm.alarmRepeat(8,30,0,Lichtprogramm3);
  Alarm.alarmRepeat(17,0,0,Lichtprogramm4);
  Alarm.alarmRepeat(20,0,0,Lichtprogramm5);
  Alarm.alarmRepeat(23,0,0,Lichtprogramm6);
  
  Alarm.timerRepeat(50, Repeats);            // timer for every 15 seconds    
  Alarm.timerOnce(10, OnceOnly);             // called once after 10 seconds  
  strip.begin();
  strip.show();
  lasttime = millis();
  currenttime = millis();
  alerttime = millis();
  lastsecond = second();
  color_ambient = strip.Color(0, 180, 255);
  pinMode(A1, INPUT);
  pinMode(BUTTON_PIN, INPUT);
  digitalWrite(BUTTON_PIN, HIGH);
  uint8_t alarmHours = 0, alarmMinutes = 0;  // Holds the current alarm time
  uint8_t tmpHours;
  boolean alarm = false;  // Holds the current state of the alarm
  delay(20);

}

// main loop
void loop()
{  

  
  // timing
  Alarm.delay(1);
  currenttime = millis();
  sensorValue = analogRead(sensorPin);

  // apply the calibration to the sensor reading
  sensorValue = map(sensorValue, 0, 700, 0, 255);

  // in case the sensor value is outside the range seen during calibration
  sensorValue = constrain(sensorValue, 0, 255);
  // functions to be called when an alarm triggers:

  // check for button
  if(digitalRead(BUTTON_PIN) == LOW) {
    mode++;
    if (mode>4) {
      mode = 0;  
    }
    delay(2);
}
  // if enough serial data available, process it
  if(Serial.available()) {
    serialMessage();
  }
  
  // select mode and show blinken pixelz!
  // show clock
  if (mode==0) {
    if(currenttime - lasttime > 45) {
      clockMode();
      redraw = 1;
      lasttime = currenttime;
    }
  }

  // demo mode - show rgb cycle
  else if (mode==1) {
    if(currenttime - lasttime > 50) {
      
        // reset counter
      if (counter >= 256) {
        counter = 0;
      }
    
      for(uint16_t i=0; i< strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + counter) & 255));
      }
      redraw = 1;
      counter++;
      lasttime = currenttime;
    }
  }

  // single color mode
  else if (mode==2) {
    if(currenttime - lasttime > 5) {
      lightPixels(strip.Color(155, 155, 155));
      redraw = 1;
      lasttime = currenttime;
    }
  }
  
  else if (mode==3) {
    if(currenttime - lasttime > 5) {
      lightPixels(strip.Color(55, 155, 155));
      redraw = 1;
      lasttime = currenttime;
    }
  }
  else if (mode==4) {
    if(currenttime - lasttime > 5) {
       {lightPixels(strip.Color(155, 55, 55));
      redraw = 1;
      lasttime = currenttime;
    }
     }
  }
  
  // alert - overrides everything
if(digitalRead(BUTTON_PIN1) == LOW) {
    alert=0;  
    }
  if (alert && (currenttime - alerttime > 20)) {
    if (alertcounter > 59) {
      alertcounter = 0;  
    }
    alertcounter++;
    redraw = 1;
    alerttime = millis();
  }
  if (alert==1) {
    drawCycle(alertcounter, strip.Color(255, 200, 0));
  }
  if (alert==2) {
    drawCycle(alertcounter, strip.Color(200, 255, 0));
  }
    
  // redraw if needed
  if(redraw) {
    strip.show();
    redraw = 0;
  }
}

// clock mode
String get_day_of_week(uint8_t dow){
  
  String dows="  ";
  switch(dow){
   case 0: dows="So"; break;
   case 1: dows="Mo"; break;
   case 2: dows="Di"; break;
   case 3: dows="Mi"; break;
   case 4: dows="Do"; break;
   case 5: dows="Fr"; break;
   case 6: dows="Sa"; break;
  
  
  return dows;
    // Pump the network regularly
  network.update();

  // If it's time to send a message, send it!
  unsigned long now = millis();
  if ( now - last_sent >= interval  )
  {
    last_sent = now;

    Serial.print("Sending...");
    payload_t payload = { millis(), packets_sent++ };
    RF24NetworkHeader header(/*to node*/ other_node);
    bool ok = network.write(header,&payload,sizeof(payload));
    if (ok)
      Serial.println("ok.");
    else
      Serial.println("failed.");
  }
  }
}

void Lichtprogramm1(){
  Serial.println("Dimme die Lampen schnell auf 100%, langsam und sanft wieder aus");
  light = 1;
}

void Lichtprogramm2(){
  Serial.println("sanftes Dimmen auf 50%, schnell und sanft wieder aus");
  light = 2;
}

void Lichtprogramm3(){
  Serial.println("Dimme die Lampen langsamer auf 100%, langsam und sanft wieder aus");
  light = 3;
}

void Lichtprogramm4(){
  Serial.println("Dimme die Lampen schnell auf 100%,, nach kurzer Zeit wieder aus");
  light = 4;
}

void Lichtprogramm5(){
  Serial.println("Dimme die Lampen sanft auf 80%, nach langer Zeit sanft wieder aus");
  light = 5;
}

void Lichtprogramm6(){
  Serial.println("Dimme die Lampen sanft auf 20% und nach kurzer Zeit sanft wieder aus");
  light = 6;
}

void MorningAlarm(){
  Serial.println("Guten Morgen");
     alert=1;
}

void EveningAlarm(){
  Serial.println("Abendprogramm");
mode=1;  
}

void WeeklyAlarmMO(){
  Serial.println("Wecker Montags");
alert=1;  
}
void WeeklyAlarmDI(){
  Serial.println("Wecker Dienstags");
alert=1;  
}
void WeeklyAlarmMI(){
  Serial.println("Wecker Mittwochs");
alert=1;  
}
void WeeklyAlarmDO(){
  Serial.println("Wecker Donnerstags");
alert=1;  
}
void WeeklyAlarmFR(){
  Serial.println("Wecker Freitags");
alert=1;  
}
void WeeklyAlarmSA(){
  Serial.println("Wecker Samstags");
mode=1;  
}
void WeeklyAlarmSO(){
  Serial.println("Wecker Sonntags");
mode=1;  
}

void ExplicitAlarm(){
  Serial.println("Alarm: - this triggers only at the given date and time");      
}

void Repeats(){
  Serial.println("15 second timer");
  clockMode();
}

void OnceOnly(){
  Serial.println("This timer only triggers once");  
}

void clockMode() {
  
  Serial.print(day());
  Serial.print(".");
  Serial.print(month());
  Serial.print(".");
  Serial.print(year());
  Serial.print(" - ");
  Serial.print(hour());
  Serial.print(":");
  Serial.print(minute());
  Serial.print(":");
  Serial.print(second());
  Serial.println();
  
  // Wochentag anzeigen
  switch(weekday()) {
  case 1:
    Serial.println("Sonntag");
    //mySerial.print(" Sonntag  ");
    break;
  case 2:
    Serial.println("Montag");
    //mySerial.print("  Montag  ");
    break;
  case 3:
    Serial.println("Dienstag");
    //mySerial.print(" Dienstag ");
    break;
  case 4:
    Serial.println("Mittwoch");
    //mySerial.print(" Mittwoch ");
    break;
  case 5:
    Serial.println("Donnerstag");
    //mySerial.print("Donnerstag");
    break;
  case 6:
    Serial.println("Freitag");
    //mySerial.print(" Freitag  ");
    break;
  case 7:
    Serial.println("Samstag");
    //mySerial.print(" Samstag  ");
    break;
  }
   time_t t = now();
  uint8_t analoghour = hour(t);
  uint8_t currentsecond = second(t);
  
  if (analoghour > 12) {
    analoghour=(analoghour-12);
  }
  analoghour = analoghour*5+(minute(t)/12);

  lightPixels(strip.Color((255 - sensorValue)/50, (255 - sensorValue)/50, (255 - sensorValue)/50));
  
  if (coptionfivemin) {
    for (uint8_t i=0; i<60; i += 5) {
      strip.setPixelColor(i,strip.Color((255 - sensorValue)/10, (255 - sensorValue)/10, (255 - sensorValue)/15));
    }
  }
  
  strip.setPixelColor(pixelCheck(analoghour-1),strip.Color((255 - sensorValue)/5, (255 - sensorValue)/10, 0));
  strip.setPixelColor(pixelCheck(analoghour),strip.Color((255 - sensorValue), (255 - sensorValue)/2, 1));
  strip.setPixelColor(pixelCheck(analoghour+1),strip.Color((255 - sensorValue)/5, (255 - sensorValue)/10, 0));
  
  strip.setPixelColor(minute(t),strip.Color((255 - sensorValue), (255 - sensorValue)/4, (270 - sensorValue)/15));
  
  strip.setPixelColor(second(t),strip.Color((255 - sensorValue)/2, (255 - sensorValue)/2, 0));

}

// cycle mode
void drawCycle(int i, uint32_t c)
{
  for(uint8_t ii=5; ii>0; ii--) {
    strip.setPixelColor(pixelCheck(i-ii),c);
  }
}

// show a progress bar - assuming that the input-value is based on 100%
void progressBar(int i) {
  map(i, 0, 100, 0, 59);
  lightPixels(strip.Color(0, 0, 0));
  for (uint8_t ii=0; ii<i; ii++) {
    strip.setPixelColor(ii,strip.Color(5, 0, 5));
  }
}

// light all pixels with given values
void lightPixels(uint32_t c) {
  for (uint8_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i,c);
  }
}

// set the correct pixels
int pixelCheck(int i) {
  if (i>59) {
    i = i - 60;
  }
  if (i<0) {
    i = i +60;
  }
  return i;
}

void serialMessage() {
  if(Serial.available()){
    char sw = Serial.read();
    switch (sw) {

      // set time
    case 'T':
      {
        delay(50);
        time_t pctime = 0;
        while(Serial.available() >=  10 ){      
          for(int i=0; i < 10; i++){  
            char c = Serial.read();    
            Serial.print("x");      
            if( c >= '0' && c <= '9'){  
              pctime = (10 * pctime) + (c - '0');    
            }
          }  
        }
        setTime(pctime);
        RTC.set(pctime);
        Serial.println("OK - Time set");
        break;
      }

      //demo mode (shows rgb cycle)
    case 'D':
      {
        mode = 1;
        Serial.println("OK - Demo mode.");
        break;
      }

      //clock mode (shows time)
    case 'C':
      {
        mode = 0;
        Serial.println("OK - Clock mode.");
        break;
      }

      //music mode (clock shows bouncing colors)
    case 'M':
      {
        mode = 2;
        Serial.println("OK - single collor mode");
        break;
      }

      //ambient mode (clock shows defined color)
    case 'L':
      {
        mode = 3;
        Serial.println("OK - Ambient light mode. Chill!");
        break;
      }

      //alert mode - green alert (clock flashes orange)
    case 'G':
      {
        alert = 0;
        Serial.println("OK - Green Alert.");
        break;
      }

      //alert mode - orange alert (clock flashes orange)
    case 'O':
      {
        alert = 1;
        Serial.println("OK - Orange Alert.");
        break;
      }

      //alert mode - red alert (clock flashes red)
    case 'R':
      {
        alert = 2;
        Serial.println("OK - Red Alert - Shields up! Arm the phasers!");
        break;
      }
      
       //clock option five minute dots
    case '5':
      {
        if (coptionfivemin) {
          coptionfivemin = 0;  
        }
        else {
          coptionfivemin = 1;  
        }
        Serial.println("OK - Tongled clock five minute dots.");
        break;
      }
      
       //clock option fade seconds
    case 'F':
      {
        if (coptionfade) {
          coptionfade = 0;  
        }
        else {
          coptionfade = 1;  
        }
        Serial.println("OK - Tongled clock fade mode.");
        break;
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
  else if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

der einzelne Code zum Senden:
Code:
/*
Copyright (C) 2012 James Coliz, Jr. <maniacbug@ymail.com>

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation.
*/

/**
* Simplest possible example of using RF24Network
*
* TRANSMITTER NODE
* Every 2 seconds, send a payload to the receiver node.
*/

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>

// nRF24L01(+) radio attached using Getting Started board
RF24 radio(9,10);

// Network uses that radio
RF24Network network(radio);

// Address of our node
const uint16_t this_node = 1;

// Address of the other node
const uint16_t other_node = 0;

// How often to send 'hello world to the other unit
const unsigned long interval = 2000; //ms

// When did we last send?
unsigned long last_sent;

// How many have we sent already
unsigned long packets_sent;

// Structure of our payload
struct payload_t
{
  unsigned long ms;
  unsigned long counter;
};

void setup(void)
{
  Serial.begin(57600);
  Serial.println("RF24Network/examples/helloworld_tx/");

  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 90, /*node address*/ this_node);
}

void loop(void)
{
  // Pump the network regularly
  network.update();

  // If it's time to send a message, send it!
  unsigned long now = millis();
  if ( now - last_sent >= interval  )
  {
    last_sent = now;

    Serial.print("Sending...");
    payload_t payload = { millis(), packets_sent++ };
    RF24NetworkHeader header(/*to node*/ other_node);
    bool ok = network.write(header,&payload,sizeof(payload));
    if (ok)
      Serial.println("ok.");
    else
      Serial.println("failed.");
  }
}
// vim:ai:cin:sts=2 sw=2 ft=cpp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.01.2015, 05:33
Beitrag #2
RE: Funknetzwerk mit Uhr und Wecker - Sketch stoppt bei Funk
Jetzt bin ich zumindest schon so weit, dass ich weiß, dass es an den beiden Zeilen hier in Kombination mit den Bibliotheken liegt....
lasse ich diese beiden Zeilen oder die Bilbliotheken für das Funknetzwerk weg ist die Uhrfunktion noch in Ordnung....

hat jemand eine Idee? Wenn es an der Bibliothek selbst liegen würde, würde das Problem ja sofort auftreten, wenn ich die Bibliothek eingefügt habe, oder?

// nRF24L01(+) radio attached using Getting Started board
RF24 radio(9,10);

// Network uses that radio
RF24Network network(radio);
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.01.2015, 12:15
Beitrag #3
RE: Funknetzwerk mit Uhr und Wecker - Sketch stoppt bei Funk
Hallo MaHa,

ich würde mal vermuten, dass es daran liegt, dass du einen Long-Wertz sendest.
Wenn ich die RadioNetwork-Lib richtig verstanden habe, kann diese nur char bzw. char[] senden.
Guckst du hier: http://stackoverflow.com/questions/18170...on-arduino .
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.01.2015, 12:50
Beitrag #4
RE: Funknetzwerk mit Uhr und Wecker - Sketch stoppt bei Funk
Hallo MaHa,

wenn du diese RF24-Library verwendest, brauchst du die Funktionen der <RF24Network.h> nicht zwingend.
In den Examples der verlinkten Library sind Beispiele auf denen du aufbauen kannst um das was du vor hast realisieren zu können.
Es geht dir ja nur darum per Funk ein paar Zahlen hin und her zu schicken? Und so wie es aussieht hast du auch nur zwei Funkteilnehmer.

Bei mir läuft die RF24-Library (ohne <RF24Network.h>) problemlos mit der Time-Library zusammen. Und ich habe teilweise bis zu 5 Funkstationen in Betrieb.

Die nRF24L01-Module sind aber u.U. auch recht anspruchsvoll was die Stromversorgung angeht. Wenn es nicht schon gemacht ist, löte direkt an die Module zwischen VCC und GND einen Elko mit 10µF oder 22µF und parallel dazu einen 100nF Kondensator.

Viele Grüße
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.01.2015, 19:43
Beitrag #5
RE: Funknetzwerk mit Uhr und Wecker - Sketch stoppt bei Funk
Hey, danke für die Tipps... es sollen insgesamt gut 10 Empfänger einen Wert von einem Sender bekommen...

Mit den Beispielsketchen laufen die Module gut und funken auch einige Meter... die Spannung solltebalso stabil genug sein... aber ichbkann ja vorsorglich einen Elko einlöten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Sketch vom Arduino Board Herunterladen Sarius 2 343 27.07.2016 15:26
Letzter Beitrag: Sarius
  Sketch konnte nicht angelegt werden Sarius 2 237 16.07.2016 15:59
Letzter Beitrag: Sarius
  SHT21 in Sketch integrieren PrinzEisenherz1 6 589 06.04.2016 14:38
Letzter Beitrag: PrinzEisenherz1
Question Arduino Pro Micro verlangt keyboard.h im sketch weinema 0 308 01.03.2016 19:04
Letzter Beitrag: weinema
  Sketch läßt sich nicht hochladen - not in sync Stephan_56 20 1.772 17.01.2016 23:00
Letzter Beitrag: Bitklopfer
  Sketch VOM Mega IN die IDE holen? torsten_156 9 704 05.01.2016 15:41
Letzter Beitrag: René Hitz
  LED-Fade Sketch Hilgi 6 746 14.12.2015 11:00
Letzter Beitrag: Hilgi
  8x7 Segment LED Anzeige / Sketch verändern w1ck3d 3 639 23.11.2015 17:56
Letzter Beitrag: hotsystems
  Sensorwerte unplausibel bei Funknetzwerk - Variablenzuordnung??? MaHaI976 5 413 10.10.2015 21:59
Letzter Beitrag: MaHaI976
  Suche sketch mit der Abfrage von 2 oder mehr PIR's Tozupi 1 462 05.10.2015 20:55
Letzter Beitrag: hotsystems

Gehe zu:


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