Hi zusammen
Ich bin gerade ein wenig ratlos: folgender Sketch, den ich stückchenweise aufgebaut habe und bei dem ich mich nun an die finale Zusammensetzung aller Programm-Komponenten machen wollte, zeigt auf einmal ein komisches Verhalten:
- das Setup wird nicht verlassen, sondern immer wieder neu gestartet
- die Loop-Hauptschleife wird nicht erreicht
Das Ganze soll auf einem Nano (Mega328P) laufen.
Angeschlossen ist zu Testzwecken im Moment nichts, nur Nano am PC .
hier der Sketch:
const byte HALL[2] = { 3, 2}; // Hallsensoren an Interrupt-Pins
volatile unsigned long RPM_Count[2]; // Hallsense-Count
volatile unsigned long RPM_T2[2]; // Timer2 für RPM - hall detection
unsigned long RPM_T1[2]; // Timer1 für RPM
unsigned int RPM[0]; // Drehzahl U/min
const byte PUMP[2] = { 9, 10}; // PWM-Pins (Timer 0) für Pumpen (via D4184)
const byte VALVE[2] = { 7, 8}; // Ventile zum Ablassen (HIGH = geschlossen)
const byte LED[2] = { 6, 5}; // Output-Pins für LEDs (FR120N)
const byte CTRL[2] = { A0, A1}; // Control-Pins für START/DRAIN
const byte LEVEL[2] = { A5, A4}; // Pins für Pegelschalter
byte index;
byte pumpval[2]; // PWM-Variablen für die Pumpen
unsigned int rpmupdate = 250; // alle X ms neue RPM bestimmen
unsigned long rpmupdatetimer;
void setup() {
Serial.begin(9600);
Serial.println("SETUP...");
// Setup Inputs & Outputs
TCCR1B = TCCR1B & 0b11111000 | 0x01; // PWM-Frequenz für Timer1
for (index = 0; index < 2; index++) {
pinMode(HALL[index], INPUT);
pinMode(CTRL[index], INPUT_PULLUP);
pinMode(LEVEL[index], INPUT_PULLUP);
pinMode(PUMP[index], OUTPUT);
digitalWrite(PUMP[index], LOW);
pinMode(VALVE[index], OUTPUT);
digitalWrite(VALVE[index], LOW);
pinMode(LED[index], OUTPUT);
digitalWrite(LED[index], LOW);
}
attachInterrupt(digitalPinToInterrupt(HALL[0]), RPM_Meter_A, FALLING); // Interrupt0 bei fallender Flanke auf Pin3
attachInterrupt(digitalPinToInterrupt(HALL[1]), RPM_Meter_B, FALLING); // Interrupt0 bei fallender Flanke auf Pin2
rpmupdatetimer = millis();
Serial.println("START...");
}
void loop() {
getRpm();
for (index = 0; index < 2; index++) {
if (RPM[index] > 100) {
digitalWrite(LED[index], HIGH);
} else {
digitalWrite(LED[index], LOW);
}
}
}
void getRpm() {
// ermittle Drehzahlen U/min
if ((millis()-rpmupdatetimer) > rpmupdate) {
for (index = 0; index < 2; index++) {
if (RPM_T2[index] > RPM_T1[index]) {
RPM[index] = (unsigned)(long)(30000 * RPM_Count[index] / (RPM_T2[index] - RPM_T1[index]));
RPM_T1[index] = RPM_T2[index];
RPM_Count[index] = 0;
}
else {
RPM[index] = 0;
}
Serial.print ("Drehzahl[");
Serial.print (index);
Serial.print ("]: ");
Serial.print (RPM[index]);
Serial.print (" U/min");
Serial.print ("\t");
}
Serial.println();
rpmupdatetimer = millis();
}
}
void RPM_Meter_A () {
RPM_Count[0]++;
RPM_T2[0] = millis();
}
void RPM_Meter_B () {
RPM_Count[1]++;
RPM_T2[1] = millis();
}
und die Fehlermeldung vom Compiler:
Der Sketch verwendet 3062 Bytes (9%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 273 Bytes (13%) des dynamischen Speichers, 1775 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
habe ich meine Pins falsch deklariert? Habe ich dadurch Speicherprobleme bekommen?
Irgendein blöder Fauxpas, den ich übersehe?