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
serieller Monitor friert ein oder Programm hängt sich auf
17.06.2015, 18:55
Beitrag #1
serieller Monitor friert ein oder Programm hängt sich auf
Hallo zusammen,

ich habe folgenden Sketch erstellt, der an und für sich auch läuft... allerdings bleibt der serielle Monitor nach Ablauf der Zeit "hold1" stehen, bzw. bleibt das komplette Sketch hängen... Ich kann den Fehler nicht eingrenzen... steh da grad wie der Ochs vorm Tor...

Das ganze läuft auf einem Mega mit einem NRF24...
Code:
#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
#include <Time.h>  
#include <TimeAlarms.h>
#include <NewPing.h>

// starte die Funkverbindung

RF24 radio(48,49);
RF24Network network(radio);
const uint16_t this_node = 0;
const uint16_t other_node = 1;
struct payload_t
{
  unsigned long ms;
  unsigned long counter;
};

// speicher die empfangene Szene

int Scene = 1;

// definiere 2 PIR Sensoren

const int PIR1 = 21;  
const int PIR2 = 22;
int sensorState1 = 0;
int sensorState2 = 0;

// definiere 2 Ultraschallsensoren (nur für die Leseleuchten relevant (?)

#define TRIGGER_PIN1  31  
#define ECHO_PIN1     32
#define MAX_DISTANCE1 320
NewPing sonar1(TRIGGER_PIN1, ECHO_PIN1, MAX_DISTANCE1);

#define TRIGGER_PIN2  33  
#define ECHO_PIN2     34
#define MAX_DISTANCE2 320
NewPing sonar2(TRIGGER_PIN2, ECHO_PIN2, MAX_DISTANCE2);

/* definiere die RGB Kanäle
Kanal 1 = Pflanzen
Kanal 2 = hinten (beim Sofa)
Kanal 3 = vorn (links, falls rechts eigener Kanal gewünscht ist)
Kanal 4 = vorn rechts */

int blau1 = 2;
int rot1 = 3;
int gruen1 = 4;
int br1blau = 15;
int br1rot = 175;
int br1gruen = 175;
int br1blauneu = 0;
int br1rotneu = 0;
int br1gruenneu = 0;
int blau2 = 5;
int rot2 = 6;
int gruen2 = 7;
int br2blau = 15;
int br2rot = 175;
int br2gruen = 175;
int br2blauneu = 0;
int br2rotneu = 0;
int br2gruenneu = 0;
int blau3 = 8;
int rot3 = 9;
int gruen3 = 10;
int br3blau = 15;
int br3rot = 175;
int br3gruen = 175;
int br3blauneu = 0;
int br3rotneu = 0;
int br3gruenneu = 0;
int blau4 = 11;
int rot4 = 12;
int gruen4 = 13;
int br4blau = 15;
int br4rot = 175;
int br4gruen = 175;
int br4blauneu = 0;
int br4rotneu = 0;
int br4gruenneu = 0;

int fadeAmount = 1;
int stepuprot = 15; //ms pro Helligkeitswert heller
int stepdownrot = 20; //ms pro Helligkeitswert dunkler
int stepupblau = 15; //ms pro Helligkeitswert heller
int stepdownblau = 20; //ms pro Helligkeitswert dunkler
int stepupgruen = 15; //ms pro Helligkeitswert heller
int stepdowngruen = 20; //ms pro Helligkeitswert dunkler
long hold1 = 90000; //ms Haltezeit
long hold2 = 9000; //ms Haltezeit
long hold3 = 9000; //ms Haltezeit
long hold4 = 9000; //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(PIR1, INPUT);  
  pinMode(PIR2, INPUT);
  
  pinMode(blau1, OUTPUT);
  pinMode(rot1, OUTPUT);
  pinMode(gruen1, OUTPUT);
  pinMode(blau2, OUTPUT);
  pinMode(rot2, OUTPUT);
  pinMode(gruen2, OUTPUT);
  pinMode(blau3, OUTPUT);
  pinMode(rot3, OUTPUT);
  pinMode(gruen3, OUTPUT);
  pinMode(blau4, OUTPUT);
  pinMode(rot4, OUTPUT);
  pinMode(gruen4, OUTPUT);
}

void loop(void)
{
static unsigned long lastHigh1 = 0;  //  <<< INSERT
static unsigned long lastHigh2 = 0;  //  <<< INSERT
static int lastSensorState1 = LOW;  // <<< INSERT
static int lastSensorState2 = LOW;  // <<< INSERT

analogWrite(blau1, br1blauneu);
analogWrite(rot1, br1rotneu);
analogWrite(gruen1, br1gruenneu);
analogWrite(blau2, br2blauneu);
analogWrite(rot2, br2rotneu);
analogWrite(gruen2, br2gruenneu);
analogWrite(blau3, br3blauneu);
analogWrite(rot3, br3rotneu);
analogWrite(gruen3, br3gruenneu);
analogWrite(blau4, br4blauneu);
analogWrite(rot4, br4rotneu);
analogWrite(gruen4, br4gruenneu);

if (br1blauneu < br1blau)
   {
    br1blauneu + br1blauneu++;
    delay(stepupblau);
   }  
else if (br1blauneu > br1blau)
   {
    br1blauneu-- ;
   delay(stepdownblau);
   }
else
   {
     br1blauneu = br1blau;
   }

if (br1rotneu < br1rot)
   {
    br1rotneu++ ;
    delay(stepuprot);
   }  
else if (br1rotneu > br1rot)
   {
    br1rotneu-- ;
   delay(stepdownrot);
   }
else
   {
     br1rotneu = br1rot;
   }

if (br1gruenneu < br1gruen)
   {
    br1gruenneu++ ;
    delay(stepupgruen);
   }  
else if (br1gruenneu > br1gruen)
   {
    br1gruenneu-- ;
   delay(stepdowngruen);
   }
else
   {
     br1gruenneu = br1gruen;
   }
  
  
   if (br2blauneu < br2blau)
   {
    br2blauneu++ ;
    delay(stepupblau);
   }  
else if (br2blauneu > br2blau)
   {
    br2blauneu-- ;
   delay(stepdownblau);
   }
else
   {
     br2blauneu = br2blau;
   }

if (br2rotneu < br2rot)
   {
    br2rotneu++ ;
    delay(stepuprot);
   }  
else if (br2rotneu > br2rot)
   {
    br2rotneu-- ;
   delay(stepdownrot);
   }
else
   {
     br2rotneu = br2rot;
   }

if (br2gruenneu < br2gruen)
   {
    br2gruenneu++ ;
    delay(stepupgruen);
   }  
else if (br2gruenneu > br2gruen)
   {
    br2gruenneu-- ;
   delay(stepdowngruen);
   }
else
   {
     br2gruenneu = br2gruen;
   }

if (br3blauneu < br3blau)
   {
    br3blauneu++ ;
    delay(stepupblau);
   }  
else if (br3blauneu > br3blau)
   {
    br3blauneu-- ;
   delay(stepdownblau);
   }
else
   {
     br3blauneu = br3blau;
   }

if (br3rotneu < br3rot)
   {
    br3rotneu++ ;
    delay(stepuprot);
   }  
else if (br3rotneu > br3rot)
   {
    br3rotneu-- ;
   delay(stepdownrot);
   }
else
   {
     br3rotneu = br3rot;
   }

if (br3gruenneu < br3gruen)
   {
    br3gruenneu++ ;
    delay(stepupgruen);
   }  
else if (br3gruenneu > br3gruen)
   {
    br3gruenneu-- ;
   delay(stepdowngruen);
   }
else
   {
     br3gruenneu = br3gruen;
   }

if (br4blauneu < br4blau)
   {
    br4blauneu++ ;
    delay(stepupblau);
   }  
else if (br4blauneu > br4blau)
   {
    br4blauneu-- ;
   delay(stepdownblau);
   }
else
   {
     br4blauneu = br4blau;
   }

if (br4rotneu < br4rot)
   {
    br4rotneu++ ;
    delay(stepuprot);
   }  
else if (br4rotneu > br4rot)
   {
    br4rotneu-- ;
   delay(stepdownrot);
   }
else
   {
     br4rotneu = br4rot;
   }

if (br4gruenneu < br4gruen)
   {
    br4gruenneu++ ;
    delay(stepupgruen);
   }  
else if (br4gruenneu > br4gruen)
   {
    br4gruenneu-- ;
   delay(stepdowngruen);
   }
else
   {
     br4gruenneu = br4gruen;
   }


Serial.print("Szene: ");
Serial.print(Scene);
Serial.print(" - PIR1: ");
Serial.print(sensorState1);
Serial.print(" - PIR2: ");
Serial.print(sensorState2);
Serial.print(" - Timer: ");
Serial.print(lastHigh1);
Serial.print(" - Kanal 1 b/r/g: ");
Serial.print(br1rotneu);
Serial.print("-");
Serial.print(br1blauneu);
Serial.print("-");
Serial.print(br1gruenneu);
Serial.print(" - Kanal 2 b/r/g: ");
Serial.print(br2rotneu);
Serial.print("-");
Serial.print(br2blauneu);
Serial.print("-");
Serial.print(br2gruenneu);
Serial.print(" - Kanal 3 b/r/g: ");
Serial.print(br3rotneu);
Serial.print("-");
Serial.print(br3blauneu);
Serial.print("-");
Serial.print(br3gruenneu);
Serial.print(" - Kanal 4 b/r/g: ");
Serial.print(br4rotneu);
Serial.print("-");
Serial.print(br4blauneu);
Serial.print("-");
Serial.println(br4gruenneu);


  network.update();

  while ( network.available() )
  {
    RF24NetworkHeader header;
    payload_t payload;
    network.read(header,&payload,sizeof(payload));
    Serial.print("Szenario- Vorgabe: ");
    Serial.println(payload.counter);
    Scene = payload.counter;
  }

sensorState1 = digitalRead(PIR1);
unsigned long now = millis();   // <<< INSERT

//  if (sensorState == LOW)   // <<< DELETE
if (sensorState1 == LOW && now - lastHigh1 > hold1)   // <<< INSERT
{
  Szene0();
}

if (sensorState1 == HIGH)
   lastHigh1 = now;     // <<< INSERT

if (sensorState1 == HIGH && lastSensorState1 == LOW)  // <<< INSERT
{

    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");
        
    }
  }
lastSensorState1 = sensorState1;   // <<< INSERT
}

void Szene0()
{
  br1rot = 0;
  br1gruen = 0;
  br1blau = 0;
  br2rot = 0;
  br2gruen = 0;
  br2blau = 0;
  br3rot = 0;
  br3gruen = 0;
  br3blau = 0;
  br4rot = 0;
  br4gruen = 0;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 2000;
  hold2 = 2000;
  hold3 = 2000;
  hold4 = 2000;
}

void Szene1()
{
  //neutrales weiß: rot: 255; gruen: 40; blau: 2

  br1rot = 150;
  br1gruen = 130;
  br1blau = 0;
  br2rot = 150;
  br2gruen = 130;
  br2blau = 0;
  br3rot = 150;
  br3gruen = 130;
  br3blau = 0;
  br4rot = 110;
  br4gruen = 80;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 2000;
  hold2 = 2000;
  hold3 = 2000;
  hold4 = 2000;
}

void Szene2()
{
  br1rot = 155;
  br1gruen = 120;
  br1blau = 0;
  br2rot = 110;
  br2gruen = 90;
  br2blau = 0;
  br3rot = 70;
  br3gruen = 50;
  br3blau = 0;
  br4rot = 70;
  br4gruen = 50;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 2000;
  hold2 = 2000;
  hold3 = 2000;
  hold4 = 2000;
}

void Szene3()
{
  br1rot = 1;
  br1gruen = 1;
  br1blau = 0;
  br2rot = 1;
  br2gruen = 1;
  br2blau = 0;
  br3rot = 1;
  br3gruen = 1;
  br3blau = 0;
  br4rot = 1;
  br4gruen = 1;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 2000;
  hold2 = 2000;
  hold3 = 2000;
  hold4 = 2000;
}

void Szene4()
{
  br1rot = 1;
  br1gruen = 1;
  br1blau = 0;
  br2rot = 1;
  br2gruen = 1;
  br2blau = 0;
  br3rot = 1;
  br3gruen = 1;
  br3blau = 0;
  br4rot = 1;
  br4gruen = 1;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 2000;
  hold2 = 2000;
  hold3 = 2000;
  hold4 = 2000;
}

void Szene5()
{
  br1rot = 1;
  br1gruen = 1;
  br1blau = 0;
  br2rot = 1;
  br2gruen = 1;
  br2blau = 0;
  br3rot = 1;
  br3gruen = 1;
  br3blau = 0;
  br4rot = 1;
  br4gruen = 1;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 2000;
  hold2 = 2000;
  hold3 = 2000;
  hold4 = 2000;
}

void Szene6()
{
  br1rot = 180;
  br1gruen = 160;
  br1blau = 10;
  br2rot = 180;
  br2gruen = 160;
  br2blau = 10;
  br3rot = 180;
  br3gruen = 160;
  br3blau = 10;
  br4rot = 180;
  br4gruen = 160;
  br4blau = 10;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*200;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*170;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*145;
  hold1 = 200000;
  hold2 = 200000;
  hold3 = 200000;
}

void Szene7()
{
  br1rot = 220;
  br1gruen = 190;
  br1blau = 10;
  br2rot = 220;
  br2gruen = 190;
  br2blau = 10;
  br3rot = 220;
  br3gruen = 190;
  br3blau = 10;
  br4rot = 220;
  br4gruen = 190;
  br4blau = 10;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*200;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*170;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*145;
  hold1 = 200000;
  hold2 = 200000;
  hold3 = 200000;
}

void Szene8()
{
  br1rot = 180;
  br1gruen = 160;
  br1blau = 10;
  br2rot = 180;
  br2gruen = 160;
  br2blau = 10;
  br3rot = 180;
  br3gruen = 160;
  br3blau = 10;
  br4rot = 180;
  br4gruen = 160;
  br4blau = 10;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*200;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*170;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*145;
  hold1 = 200000;
  hold2 = 200000;
  hold3 = 200000;
}

void Szene9()
{
  br1rot = 180;
  br1gruen = 160;
  br1blau = 10;
  br2rot = 180;
  br2gruen = 160;
  br2blau = 10;
  br3rot = 180;
  br3gruen = 160;
  br3blau = 10;
  br4rot = 180;
  br4gruen = 160;
  br4blau = 10;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*200;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*170;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*145;
  hold1 = 200000;
  hold2 = 200000;
  hold3 = 200000;
  hold4 = 200000;
}

void Szene10()
{
  br1rot = 12;
  br1gruen = 7;
  br1blau = 0;
  br2rot = 12;
  br2gruen = 7;
  br2blau = 0;
  br3rot = 12;
  br3gruen = 7;
  br3blau = 0;
  br4rot = 12;
  br4gruen = 7;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*80;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*70;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 15000;
  hold2 = 15000;
  hold3 = 15000;
  hold4 = 15000;
}

void Szene11()
{
  br1rot = 60;
  br1gruen = 40;
  br1blau = 0;
  br2rot = 155;
  br2gruen = 120;
  br2blau = 0;
  br3rot = 120;
  br3gruen = 90;
  br3blau = 0;
  br4rot = 90;
  br4gruen = 60;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 12000;
  hold2 = 12000;
  hold3 = 12000;
  hold4 = 12000;
}

void Szene12()
{
  br1rot = 155;
  br1gruen = 110;
  br1blau = 0;
  br2rot = 120;
  br2gruen = 80;
  br2blau = 0;
  br3rot = 90;
  br3gruen = 60;
  br3blau = 0;
  br4rot = 60;
  br4gruen = 40;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 12000;
  hold2 = 12000;
  hold3 = 12000;
  hold4 = 12000;
}

void Szene13()
{
  br1rot = 55;
  br1gruen = 30;
  br1blau = 0;
  br2rot = 55;
  br2gruen = 30;
  br2blau = 0;
  br3rot = 55;
  br3gruen = 30;
  br3blau = 0;
  br4rot = 55;
  br4gruen = 30;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 12000;
  hold2 = 12000;
  hold3 = 12000;
  hold4 = 12000;
}

void Szene14()
{
  br1rot = 100;
  br1gruen = 0;
  br1blau = 100;
  br2rot = 100;
  br2gruen = 0;
  br2blau = 100;
  br3rot = 100;
  br3gruen = 0;
  br3blau = 100;
  br4rot = 100;
  br4gruen = 0;
  br4blau = 100;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 15000;
  hold2 = 15000;
  hold3 = 15000;
  hold4 = 15000;
}

void Szene15()
{
  br1rot = 0;
  br1gruen = 120;
  br1blau = 0;
  br2rot = 0;
  br2gruen = 120;
  br2blau = 0;
  br3rot = 0;
  br3gruen = 120;
  br3blau = 0;
  br4rot = 0;
  br4gruen = 120;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 20000;
  hold2 = 20000;
  hold3 = 20000;
  hold4 = 20000;
}

void Szene16()
{
  br1rot = 120;
  br1gruen = 0;
  br1blau = 0;
  br2rot = 120;
  br2gruen = 0;
  br2blau = 0;
  br3rot = 120;
  br3gruen = 0;
  br3blau = 0;
  br4rot = 120;
  br4gruen = 0;
  br4blau = 0;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 20000;
  hold2 = 20000;
  hold3 = 20000;
  hold4 = 20000;
}

void Szene17()
{
  br1rot = 0;
  br1gruen = 0;
  br1blau = 120;
  br2rot = 0;
  br2gruen = 0;
  br2blau = 120;
  br3rot = 0;
  br3gruen = 0;
  br3blau = 120;
  br4rot = 0;
  br4gruen = 0;
  br4blau = 120;
  stepuprot = (255/br1rot)*10;
  stepdownrot = (255/br1rot)*50;
  stepupgruen = (255/br1gruen)*11;
  stepdowngruen = (255/br1gruen)*48;
  stepupblau = (255/br1blau)*12;
  stepdownblau = (255/br1blau)*45;
  hold1 = 20000;
  hold2 = 20000;
  hold3 = 20000;
  hold4 = 20000;
}

Ich wäre echt dankbar, wenn mir hier jemand einen kleinen Stubs in die richtige Richtung geben kann....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.06.2015, 07:00
Beitrag #2
RE: serieller Monitor friert ein oder Programm hängt sich auf
Mal eine generelle Frage zu meiner Programmstruktur... Vielleicht bin ich da zu wenig experimentierfreudig... aber könnte ich den Aufbau generell wie folgt machen?
Code:
- initialisieren der Libaries

- void steup()

- void loop()
  - Abfrage der Sensoren
  - Abfrage der Funkverbindung
    - if Schleife um bei bestimmten Randbedingungen:
      - void (fade out) aufrufen
      else
       - case Schleife
          - void (Zustand 1)
          - void (Zustand 2)
            ....
       - Ende case Schlefe
    - Ende if Schleife
- Ende void loop()

void Zustand 1()
   - Setze LED-Werte und Zeiten
   - void (fade in)
ende

void Zustand 2()
   - Setze LED-Werte und Zeiten
   - void (fade in)
ende

void (fade in)
   - Zähle Helligkeitswerte bis zum Zielwert
      -  if Schleife  (Zielwert erreicht)
          void (halten)
      - ende if Schleife
ende

void halten()
   - halte Helligkeit entsprechend vorgegebener Zeit
     - if Schleife (Zeit abgelaufen?)
        void (fade out)
    - ende if Schleife
ende

void fade out ()
   - Zähle Helligkeitswert bis auf 0
ende

also das nur mal als ganz prinzipiellen Aufbau...

Ich bin mir nicht sicher, ob das hoch und runterzählen, was ja mehrere Durchläufe diese Programmanschnittes erfordert aus der void loop ausgelagert werden kann...
Oder muss das immer in der loop bleiben???
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.06.2015, 19:34
Beitrag #3
RE: serieller Monitor friert ein oder Programm hängt sich auf
(18.06.2015 07:00)MaHaI976 schrieb:  Mal eine generelle Frage zu meiner Programmstruktur... Vielleicht bin ich da zu wenig experimentierfreudig... aber könnte ich den Aufbau generell wie folgt machen?
Code:
- initialisieren der Libaries

- void steup()

- void loop()
  - Abfrage der Sensoren
  - Abfrage der Funkverbindung
    - if Schleife um bei bestimmten Randbedingungen:
      - void (fade out) aufrufen
      else
       - case Schleife
          - void (Zustand 1)
          - void (Zustand 2)
            ....
       - Ende case Schlefe
    - Ende if Schleife
- Ende void loop()

void Zustand 1()
   - Setze LED-Werte und Zeiten
   - void (fade in)
ende

void Zustand 2()
   - Setze LED-Werte und Zeiten
   - void (fade in)
ende

void (fade in)
   - Zähle Helligkeitswerte bis zum Zielwert
      -  if Schleife  (Zielwert erreicht)
          void (halten)
      - ende if Schleife
ende

void halten()
   - halte Helligkeit entsprechend vorgegebener Zeit
     - if Schleife (Zeit abgelaufen?)
        void (fade out)
    - ende if Schleife
ende

void fade out ()
   - Zähle Helligkeitswert bis auf 0
ende

also das nur mal als ganz prinzipiellen Aufbau...

Ich bin mir nicht sicher, ob das hoch und runterzählen, was ja mehrere Durchläufe diese Programmanschnittes erfordert aus der void loop ausgelagert werden kann...
Oder muss das immer in der loop bleiben???

Hi,

nur mal so einen Tip am Rande. Ich habe auch eine ganze Weile mit dem
Arduino-C "gekämpft". Ich kann programmieren und weiß, daß man eine ganze Menge machen kann. Es ist oft hilfreich, ein variables Debugging mit einzubauen, damit man sehen kann, wann was gemacht wird. Es hilft einem auch zu verstehen, wie alles zusammen hängt und um Deine Frage zu beantworten -JA-, das Auslagern gleichartiger Abläufe in eine Funktion oder Subroutine macht auf jeden Fall Sinn, sonst schreibt man sich die Finger wund oder der Code wird zu groß oder/und unübersichtlich.

Variables Debugging heißt : Per Code ein und auszuschalten, wenn man es braucht. Vielleicht sogar mit einem Tastendruck. Verbraucht ein bischen Speicherplatz, erspart einem aber eine Menge graue Haare.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.06.2015, 13:45
Beitrag #4
RE: serieller Monitor friert ein oder Programm hängt sich auf
Ich habe an einigen Stellen immer ein paar seriell prints eingefügt, um sehen zu können was läuft...

bisher bin ich auch gut mit meinen ganzen Steuerungen zurecht gekommen- nur nehmen die langsam Dimmensionen an, wo ich klarer Strukturieren muss.... ;-)

Ich werde mal nach dieser Struktur ein Sketch erstellen und testen... bin mal gespannt... :-D
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 Zumo, Felerhaftes Programm (2) Werner Lage 2 292 18.09.2017 06:51
Letzter Beitrag: Werner Lage
  Bluetooth vom Pc zum Arduino mit HC-06 oder HC-05 ? comfan 0 274 15.09.2017 08:25
Letzter Beitrag: comfan
  Arduino Zumo, Felerhaftes Programm ? Werner Lage 1 242 20.06.2017 13:57
Letzter Beitrag: Tommy56
  TFT Monitor und Grafiken Thor Wallhall 10 553 16.05.2017 18:15
Letzter Beitrag: Thor Wallhall
  Arduino UNO hat sich Aufgehängt?? huber5093 24 1.699 28.04.2017 19:58
Letzter Beitrag: Tommy56
  serial monitor, Ausgabe übereinander möglich?? silversurfer123 4 327 18.04.2017 19:19
Letzter Beitrag: silversurfer123
Rainbow Programm mit Tastr unterbrechen Schwinge117 12 711 02.03.2017 21:17
Letzter Beitrag: Tommy56
  Programm Elegoo Smart Robot kit Thorsten_S 3 716 29.01.2017 17:40
Letzter Beitrag: Micha06
  Arduino Läst sich nicht Programmieren Micha06 4 529 29.01.2017 17:27
Letzter Beitrag: Micha06
  Arduino hängt beim Upload deranda 14 1.379 20.01.2017 16:14
Letzter Beitrag: renid55

Gehe zu:


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