Hallo,
bin irgendwie vernagelt ... es ist ein Fehler drin, das ist klar, aber ich entdecke ihn nicht.
Die fehlerhafte Routine:
void setup() {
// put your setup code here, to run once:
setup_servoFan();
pinMode(PORTNUMMER, OUTPUT);
}
void changeFan(int nummer)
{
if(fanOnOff[nummer][0] < 126)
{
servoFanOnOff(nummer,true);
fanOnOff[nummer][0]++;
LEDOn++;
}
else
{
if(fanOnOff[nummer][0]>255)
{
fanOnOff[nummer][0] = 0;
servoFanOnOff(nummer,true);
}
else
{
fanOnOff[nummer][0]++;
servoFanOnOff(nummer,false);
}
}
}
void servoFanOnOff(int fan_number, bool OnOff)
{
if(OnOff)
{
digitalWrite(fan_number, HIGH);
}
else
{
digitalWrite(fan_number, LOW);
}
}
void loop() {
// put your main code here, to run repeatedly:
//switchAllFans();
if(LEDOn > 0)
{
//changeFan(0);
servoFanOnOff(fanOnOff[0][1],true);
digitalWrite(fanOnOff[1][1], HIGH);
digitalWrite(fanOnOff[2][1], HIGH);
digitalWrite(PORTNUMMER, HIGH);
LEDOn++;
}
else
{
changeFan(0);
//servoFanOnOff(fanOnOff[0][1],false);
digitalWrite(SERVO1_PIN, LOW);
digitalWrite(SERVO2_PIN, LOW);
digitalWrite(PORTNUMMER, LOW);
LEDOn++;
}
if(LEDOn > 2000)
{
LEDOn = -2000;
}
// delay(400);
}
Zur Erklärung: Das Ding soll den Servo-Ausgang des RAMPS-Boards (für einen 3D-Drucker) ansteuern, um dort eine PWM-Steuerung zu realisieren. Dies ist nur ein Test-Programm, um das ganze eben auszuprobieren.
Was passiert? Die beiden Ausgänge 1 und 2 (also die Mittleren) blinken, wie sie sollen. Der 3-er ist nicht in der Liste, also aus. Der 1-er springt an und bleibt an.
Das Ganze liegt eindeutig an 'changeFan'. die anderen Funktionen arbeiten korrekt. Aber ich finde den Grund nicht.
fanOnOff ist ein globales Array, das sowohl die Zähler als auch die Pinnummer des Ausgangs enthält. Es ist korrekt initialisiert, da man es in 'servoFanOnOff' durchaus benutzen kann. Eigentlich soll unter fanOnOff[][0] der Zähler mit einer Vorgabe verglichen werden, die in einer anderen, globalen Variablen steht Die ist in der Marlin-Software (dem kompletten Steuerprogramm des 3D-Druckers) bereits drin. Ich habe sie hier auch definiert, aber benutze sie nicht, weil es eben nicht klappt. Zuviel drumrum stört dann nur. Wenn ich es an's Laufen kriege, wird die wieder einbezogen.
Wo mache ich den Fehler?
Tschüß und Danke
Manni