// Selbsttest//
// Pinbelegung//
// analog 0 = PIR, analog 1 = Fotodiode, analog 2 = Thermistor //
// digital 13 = Led, digital 12 = Vibrationsmotor, digital 2-6 = Transceiver //
void setup (){
pinMode (13, OUTPUT);
pinMode (12, OUTPUT);
// analog Pins brauchen nicht defineirt zu werden, da immer Output //
}
void loop () {
int sensorpin = 0; // Sensorpin der ausgelesen wird //
int sensorwert = 0; // Sensorwert der ausgelesen wird //
int sensorcut = 0; // Filter-Wert der vom Sensorwert abgezogen wird um Rauschen zu unterdrücken //
int sensormulti = 0; // Filter-Multiplikator zur Verstärkung //
int sensorteiler = 0; // Filter-Aufteilungswert um auf ein Byte - 0-255 - fürs funken zu kommen //
int sensor0 = 0; // Speichervariable für Sensor Pin 0 //
int sensor1 = 0; // Speichervariable für Sensor Pin 1 //
int sensor2 = 0; // Speichervariable für Sensor Pin 2 //
// Sensor 0, PIR der PIR sendet nur 0 oder 683/684, kann auch an einen digital Eingang, die werden aber knapp //
sensorpin = 0; // der PIR ist an analog 0 //
sensorcut = 0; // braucht keine Filter //
sensormulti = 0; // braucht keinen Filter //
sensorteiler = 10; // dann kommt ca 6 raus //
sensor0 = Sensorlies(sensorpin, sensorcut, sensormulti, sensorteiler); // Funktion Sensorlies aufrufen //
// Sensor 1, Fotodiode Werte zwischen 30(dunkel) und 1000 (Taschenlampe direkt) //
sensorpin = 1; // der Fotodiode ist an analog 1 //
sensorcut = 0; // rauscht nicht //
sensormulti = 0; // braucht keine Verstärkung //
sensorteiler = 10; // ergibt Werte von 3-100 //
sensor1 = Sensorlies(sensorpin, sensorcut, sensormulti, sensorteiler); // Funktion Sensorlies aufrufen //
// Sensor 2, Thermistor Werte zwischen 477(Eiswürfel) 340 (ca 20°) 240 (ca 37°) //
sensorpin = 2; // der Thermistor ist an analog 2 //
sensorcut = 0; // rauscht nicht //
sensormulti = 0; // braucht keine Verstärkung //
sensorteiler = 10; // ergibt Werte von 48-24 //
sensor2 = Sensorlies(sensorpin, sensorcut, sensormulti, sensorteiler); // Funktion Sensorlies aufrufen //
}
// Funktion Sensorlies //
int Sensorlies(int sensorpin, int sensorcut, int sensormulti, int sensorteiler){
int sensorwert = digitalRead (sensorpin); // sensorwert wurde schon global definiert, ob das geht ? //
int sensorclean = ((sensorwert - sensorcut) * sensormulti) / sensorteiler; // Filter auf sensowert anweden //
return sensorclean; // sensorclean zurückgeben //
}
es gab ein paar schreibfehler und du hattest in der funktions-deklaration von Sensorlies vergessen, den datentyp der eingangsvariablen anzugeben. variablen, die innerhalb einer funktion definiert werden, sind local. definierst du ausserhalb von setup() bzw. loop(), dann ist die variable global. das verwenden von "#define name wert" ist eine compiler direktive und die ersetzung erfolgt waehrend des compilierens. das hat den gleichen effekt, also wuerdest du von hand anstelle des names ueberall selbst den wert reinschreiben. ich verwende es haeufig fuer konstanten, die ich je nach anwendung anpasse und die firmware neu compiliere. waehrend das programm laeuft, kann das dann nicht mehr geaendert werden.