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
PIR- High - Low - Wechsel und void
18.03.2015, 14:06
Beitrag #1
PIR- High - Low - Wechsel und void
Hallo zusammen,

ich habe hier ein Sketch für RGB-LEDs gebastelt, wo über ein nrf24- Modul Szenarien als Zahlen von 1 - 17 empfangen werden.
Je nach Szenarien- Vorgabe werden verschiedenen Helligkeiten und Dimm- geschwindigkeiten vorgegeben...
Sobald ein PIR- Sensor ein HIGH- Signal liefert werden die Werte entsprechend eingestellt...

Bis hierhin funktioniert das super...

allerdings möchte ich auch irgendwann wieder alles auf "0" setzen... Hierzu würde ich der Einfachheit halber einfach void Szene0() aufrufen, was das langsame Dimmen auf 0 einleitet.... eigentlich hätte ich auch das Abfallen von HIGH auf LOW gern noch um die "holdtime" verzögert...
aber im Moment hänge ich schon beim Umsetzen vom ersten Schritt...

Ich hoffe irgendjemand hat hier einen entscheidenenden Tipp.... Inzwischen habe ich schon einige graue Haare

Code:
#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
#include <Time.h>        //http://www.arduino.cc/playground/Code/Time
#include <TimeAlarms.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 = 0;

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

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

int Scene = 1;
const int sensorPin = 2;  // sensor pin
int sensorState = 0;
int ledrot = 3;    // output (LED) pin 1
int ledblau = 5;    // output (LED) pin 2
int ledgruen = 6;    // output (LED) pin 3
int fadeAmount = 1;
int brightnessrot = 20;
int brightnessblau = 5;
int brightnessgruen = 18;
int brightnessrotneu = 0;
int brightnessblauneu = 0;
int brightnessgruenneu = 0;
int stepup = 15; //ms pro Helligkeitswert heller
int stepdown = 20; //ms pro Helligkeitswert dunkler
int holdtime = 10000; //ms Haltezeit

void setup(void)
{
  Serial.begin(57600);
  Serial.println("Empfange Szenario");

  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 90, /*node address*/ this_node);
  
  pinMode(sensorPin, INPUT);  
  pinMode(ledrot, OUTPUT);
  pinMode(ledblau, OUTPUT);
  pinMode(ledgruen, OUTPUT);
}

void loop(void)
{
  
analogWrite(ledrot, brightnessrotneu);
analogWrite(ledgruen, brightnessgruenneu);
analogWrite(ledblau, brightnessblauneu);

sensorState = digitalRead(sensorPin);

if (sensorState == LOW)
{
  Szene0();
}

if (sensorState == HIGH)
{

if (brightnessrotneu < brightnessrot)
   {
    brightnessrotneu++ ;
    delay(stepup);
   }  
else if (brightnessrotneu > brightnessrot)
   {
    brightnessrotneu-- ;
   delay(stepdown);
   }
else
   {
     brightnessrotneu = brightnessrot;
   }

if (brightnessgruenneu < brightnessgruen)
   {
    brightnessgruenneu++ ;
    delay(stepup);
   }  
else if (brightnessgruenneu > brightnessgruen)
   {
    brightnessgruenneu-- ;
   delay(stepdown);
   }
else
   {
     brightnessgruenneu = brightnessgruen;
   }
  
if (brightnessblauneu < brightnessblau)
   {
    brightnessblauneu++ ;
    delay(stepup);
   }  
else if (brightnessblauneu > brightnessblau)
   {
    brightnessblauneu-- ;
   delay(stepdown);
   }
else
   {
     brightnessblauneu = brightnessblau;
   }
}

Serial.print(sensorState);
Serial.print(" - ");
Serial.print(brightnessrotneu);
Serial.print(" - ");
Serial.print(brightnessblauneu);
Serial.print(" - ");
Serial.println(brightnessgruenneu);

  
  // Pump the network regularly
  network.update();

  // Is there anything ready for us?
  while ( network.available() )
  {
    // If so, grab it and print it out
    RF24NetworkHeader header;
    payload_t payload;
    network.read(header,&payload,sizeof(payload));
    Serial.print("Szenario- Vorgabe: ");
    Serial.println(payload.counter);
    Scene = payload.counter;
    //Serial.print(" at ");
    //Serial.println(payload.ms);
    //if (Scene =! 0)

    switch (Scene)
    {
      case 0:
      Szene0();
         Serial.println("Start- Scene");
      break;
      
      case 1:
      Szene1();
         Serial.println("Scene 1");
      break;
      
      case 2:
      Szene2();
         Serial.println("Scene 2");
      break;
      
      case 3:
      Szene3();
         Serial.println("Scene 3");
      break;
      
      case 4:
      Szene4();
         Serial.println("Scene 4");
      break;
      
      case 5:
      Szene5();
         Serial.println("Scene 5");
      break;
      
      case 6:
      Szene6();
         Serial.println("Scene 6");
      break;
      
      case 7:
      Szene7();
         Serial.println("Scene 7");
      break;
      
      case 8:
      Szene8();
         Serial.println("Scene 8");
      break;
      
      case 9:
      Szene9();
         Serial.println("Scene 9");
      break;
      
      case 10:
      Szene10();
         Serial.println("Scene 10");
      break;
      
      case 11:
      Szene11();
         Serial.println("Scene 11");
      break;
      
      case 12:
      Szene12();
         Serial.println("Scene 12");
      break;
      
      case 13:
      Szene13();
         Serial.println("Scene 13");
      break;
      
      case 14:
      Szene14();
         Serial.println("Scene 14");
      break;
            
      case 15:
      Szene15();
         Serial.println("Scene 15");
      break;
      
      case 16:
      Szene16();
         Serial.println("Scene 16");
      break;
      
      case 17:
      Szene17();
         Serial.println("Scene 17");
      break;
      
      default:
         Serial.println("keine Scene erkannt");
    }
  }
}

void Szene0()
{
  brightnessrot = 0;
  brightnessgruen = 0;
  brightnessblau = 0;
  stepup = 15;
  stepdown = 30;
  holdtime = 2000;
}

void Szene1()
{
  brightnessrot = 35;
  brightnessgruen = 35;
  brightnessblau = 35;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene2()
{
  brightnessrot = 255;
  brightnessgruen = 255;
  brightnessblau = 255;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene3()
{
  brightnessrot = 15;
  brightnessgruen = 15;
  brightnessblau = 15;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene4()
{
  brightnessrot = 80;
  brightnessgruen = 80;
  brightnessblau = 80;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene5()
{
  brightnessrot = 10;
  brightnessgruen = 10;
  brightnessblau = 10;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene6()
{
  brightnessrot = 255;
  brightnessgruen = 255;
  brightnessblau = 255;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene7()
{
  brightnessrot = 200;
  brightnessgruen = 200;
  brightnessblau = 200;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene8()
{
  brightnessrot = 100;
  brightnessgruen = 100;
  brightnessblau = 100;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene9()
{
  brightnessrot = 30;
  brightnessgruen = 30;
  brightnessblau = 30;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene10()
{
  brightnessrot = 1;
  brightnessgruen = 1;
  brightnessblau = 1;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene11()
{
  brightnessrot = 55;
  brightnessgruen = 55;
  brightnessblau = 255;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene12()
{
  brightnessrot = 55;
  brightnessgruen = 255;
  brightnessblau = 55;
  stepup = 10;
  stepdown = 20;
  holdtime = 20000;
}

void Szene13()
{
  brightnessrot = 255;
  brightnessgruen = 55;
  brightnessblau = 55;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene14()
{
  brightnessrot = 255;
  brightnessgruen = 255;
  brightnessblau = 255;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene15()
{
  brightnessrot = 255;
  brightnessgruen = 255;
  brightnessblau = 255;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene16()
{
  brightnessrot = 200;
  brightnessgruen = 200;
  brightnessblau = 200;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Szene17()
{
  brightnessrot = 100;
  brightnessgruen = 100;
  brightnessblau = 100;
  stepup = 15;
  stepdown = 30;
  holdtime = 20000;
}

void Scene0()
{
  brightnessrot = 0;
  brightnessgruen = 0;
  brightnessblau = 0;
  stepup = 15;
  stepdown = 30;
  holdtime = 200000;
}

// vim:ai:cin:sts=2 sw=2 ft=cpp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 14:36
Beitrag #2
RE: PIR- High - Low - Wechsel und void
Hi,
das liegt daran, dass Dein Program nur dann ueberhaupt was macht, wenn der PIR-Pin auf HIGH ist. Vielleicht solltest Du das so umstellen, dass das "umdimmen" immer stattfindet. Die "SzeneN"-Aufrufe sollten dann einfach nur erfolgen, wenn der PIR-Pin eine aufsteigende Flanke hat. "Scene" ist ja sowieso schon eine globale Variable...
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 14:44
Beitrag #3
RE: PIR- High - Low - Wechsel und void
hi Thorsten, mein "Gefühl" sagt das Gleiche.... aber ich steh seit 2 Tagen total auf dem Schlauch.... hab das basierend auf dem "hello world" für den nrf24 immer mehr erwetert.... zwischendrin versucht die dealys zu ersetzen und inzwischen nicht mehr so ganz den Überblick....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 14:47
Beitrag #4
RE: PIR- High - Low - Wechsel und void
Hi,
ja, und, was haelt Dich davon ab, das so zu machen?
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 15:18 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2015 15:19 von MaHa1976.)
Beitrag #5
RE: PIR- High - Low - Wechsel und void
wenn ich die delays ersetzt zählt er wahnsinnig schnell hoch.....

aber es läuft ja mit delay.... never change a runing system... es sind ja auch sehr kurze delays... somit nicht wirklich störend....

sooooo..... wenn ich drüber nachdenke.... (ich sitze grad nicht am Rechner), müßten die Fadibgabläufe aus der PIR if Schleife raus....
und die PIR if Schleife müßte dann die switch-case Sektion einfassen.... bei HIGh müßte dann die momette Abfrage durchlaufen werden, bei LOW dann nur Szene0() aufgerufen werden...

richtig?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 15:36
Beitrag #6
RE: PIR- High - Low - Wechsel und void
Ich meinte ja auch gar nicht die delays, das ist momentan nicht Dein Problem.

Bei dem Rest bin ich mir nicht ganz sicher, ob wir dasselbe meinen, aber ich glaube schon.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 15:45
Beitrag #7
RE: PIR- High - Low - Wechsel und void
ich probiere es nachher mal..... aber wie kann HIGH flexibel verlängern? Um die "holdtime".... da fehlt mir noch jeder Ansatz....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.03.2015, 16:06
Beitrag #8
RE: PIR- High - Low - Wechsel und void
Warum willst Du "HIGH verlaengern"???

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  I²C vom NANO zum PI Probleme mit High/Low Bit Tobias1984 4 329 29.02.2016 00:00
Letzter Beitrag: hotsystems
  EMP setzt Input-PIN kurzzeitig auf HIGH holo 6 448 24.02.2016 19:25
Letzter Beitrag: Carlo
  OUTPUT bleibt HIGH und timer stopt nicht. Atwist 4 530 08.01.2016 11:02
Letzter Beitrag: Atwist
  Ir Signal bei High gronph 7 802 01.11.2015 18:49
Letzter Beitrag: gronph
  mit #ifdef Taster high-aktiv / low-aktiv ?? DL1AKP 11 1.347 24.06.2015 12:50
Letzter Beitrag: HaWe
  auslagern von Funktion aus der void loop? MaHaI976 19 2.871 22.06.2015 20:38
Letzter Beitrag: MaHaI976
  HIGH statt LOW bergfrei 26 4.917 27.05.2015 15:32
Letzter Beitrag: HaWe
  void Setup startet nicht skyfly71 2 889 15.11.2014 20:51
Letzter Beitrag: JoeDorm
  Stop Befehl während einer Void - Loop lezz89 13 12.686 17.01.2014 19:40
Letzter Beitrag: demokrit
  Lüfter mit LM35 über HIGH & LOW statt PWM Problem bhvfotos 0 1.178 09.11.2013 12:53
Letzter Beitrag: bhvfotos

Gehe zu:


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