jurs:
Grob umschrieben könnte es sein:
- RAM-Speichermangel (zuviel RAM beim Programmieren verschwendet)
- Fehler in der Programmlogik (z.B. Endlosschleifen, falscher Gebrauch von Interrupts, falsche Endbedingungen)
Das es am RAM-Speichermangel liegt, denke ich weniger, ist ja nicht all zu viel verschwendet und Endlosschleifen oder ähnliches habe ich auch keine
Code:
#include <VirtualWire.h> //zur Funkübertragung(433MHz)
#include <EEPROM.h> //zum Ansprechen des EEPROM's
#undef int
#undef abs
#undef double
#undef float
#undef round
const byte led[3]={8,9,10}; //LED Pins
const byte Taster=7; //Adressen-Setup-Pin
const byte b[5]={0,1,2,3,4}; //intAddr im EEPROM zur Zustandsetzung
const byte set_adresse=250;
const byte adresse_alle=255; //Master-Gruppen Adresse
int adresse=0; //
int akt_byte[4]={0,0,0,0}; //Enthält die save_byte Daten von {1 2 3 4}
byte anzahl_prog=0; //ACHTUNG: Anzahl der Programme muss angegeben sein!
//--------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------Setup-------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------
void setup()
{
Serial.begin(9600);
// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for RX Link Module
vw_setup(2000); // Bits per sec
vw_set_rx_pin(5); // We will be receiving on pin 5 i.e the RX pin from the module connects to this pin.
vw_rx_start(); // Start the receiver
pinMode(Taster,INPUT); //Adresse_Setup_Pin als Input
for(int i=1;i<5;i++){
akt_byte[i-1]=EEPROM.read(b[i]);
}
adresse=EEPROM.read(b[0]);
if(EEPROM.read(b[1])<11){ //EEPROM Abfrage nach einem verwendeten Programm
analogWrite(led[0],0); //LED Reset damit keine Zustände verbleiben
analogWrite(led[1],0);
analogWrite(led[2],0);
}
else
{
analogWrite(led[0],akt_byte[1]); //Falls nicht wird der letzte LED Zustand verwendet
analogWrite(led[1],akt_byte[2]);
analogWrite(led[2],akt_byte[3]);
}
Serial.print("Aktuelles Paket: "); //Aktuelles Paket wird ausgeben
for(int i=0;i<5;i++){
Serial.print(EEPROM.read(b[i]));
if(i<4){Serial.print(".");}
}
Serial.println("");
Serial.print(micros()); //Setupzeit wird ausgegeben
Serial.println(" micro Sekunden fuer das Setup");
}
//--------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------Unterprogramme----------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------neue Nachicht-----------------------------------------------------------------
void newmail()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)){ //Paket angekommen?
Serial.println("\ninc bytes");
if(buf[0]==adresse||buf[0]==adresse_alle){ //Einzelbefehl oder Masterbefehl
Serial.print("Paket erhalten: ");
for (int i = 1; i < 5; i++){
akt_byte[i-1]=buf[i];
EEPROM.write(b[i],buf[i]); //speichert den RGB-Wert in den EEPROM
Serial.print(akt_byte[i-1]);
if(i<4){Serial.print(".");}
}
if(akt_byte[0]<11){ //Programmbefehl
Serial.print("\nProgramm ");
Serial.println(akt_byte[0]);
fader=0; //Fader Reset
fader_rev=0;
fader_z=0;
Provar=0;
analogWrite(led[0],0);
analogWrite(led[1],0);
analogWrite(led[2],0);
}
else
{
analogWrite(led[0], akt_byte[1]);
analogWrite(led[1], akt_byte[2]);
analogWrite(led[2], akt_byte[3]);
}
}
}
}
//--------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------Hauptprogramm-----------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
newmail();
//programm001(); //Programm aktiv?
//programm002();
//programm003();
//programm004();
//programm005();
//programm006();
//programm007();
//programm008();
//programm009();
//programm010();
//--------------------------------------------Setup_Adresse-----------------------------------------------------------------
if (digitalRead(Taster)==HIGH){ //Adressen-Setup-Taste betätigt?
Serial.println("AdressenSetup");
analogWrite(led[0],100); //Optisches Signal: alle LEDs an
analogWrite(led[1],100);
analogWrite(led[2],100);
wait:
if (vw_get_message(buf, &buflen)){ //Letztes Byte des Pakets auslesen
if(buf[0]==set_adresse){
adresse=buf[4]; //und als neue Adresse speichern
EEPROM.write(b[0],adresse);
Serial.print("neue Adresse: ");
Serial.println(adresse);
for(int i=0;i<5;i++){ //Optisches Signal: blinkende LEDs
analogWrite(led[0],0);
analogWrite(led[1],0);
analogWrite(led[2],0);
delay(30);
analogWrite(led[0],255);
analogWrite(led[1],255);
analogWrite(led[2],255);
delay(80);
}
goto ende;
}
}
goto wait;
ende:
analogWrite(led[0],0); //Abschluss: alle LEDs aus
analogWrite(led[1],0);
analogWrite(led[2],0);
}
}