Hallo
Ich bastel gerade an einer Steuerung für eine Gartenbahn. An einem Arduino Mega sind mehrere Schieberegister kaskadiert angeschlossen, welche wiederum die Eingänge von vielen L298N Treibern (für die Weichen) ansteuern. Der Mega empfängt über Bluetooth an der Seriellen Schnittstelle Befehle und schiebt dann die entsprechenden Bits in die Register. Soweit so gut. Es ist aber notwendig das nach dem umpolen (L298N) der Strom wieder abgeschaltet werden muss und alles auf LOW geht.
Dafür habe ich das Delay eingesetzt, was ich jedoch gerne durch die Millis Funktion ersetzen will.
Nach mehreren Versuchen hab ich es aufgegeben. Kann mir evtl. jemand unter die Arme greifen?
#include <SerialCommand.h>
#define arduinoLED 13 // Arduino LED on board
SerialCommand sCmd; // The demo SerialCommand object
int shiftPin = 8; //Pin verbunden mit SH_CP des 74HC595
int storePin = 9; //Pin verbunden mit ST_CP des 74HC595
int dataPin = 10; //Pin verbunden mit DS des 74HC595
void setup() {
pinMode(storePin, OUTPUT); // Pins 8,9,10 auf Ausgabe stellen
pinMode(shiftPin, OUTPUT); // Pins 8,9,10 auf Ausgabe stellen
pinMode(dataPin, OUTPUT); // Pins 8,9,10 auf Ausgabe stellen
pinMode(arduinoLED, OUTPUT); // LED auf Ausgabe
digitalWrite(arduinoLED, LOW); // LED aus
Serial.begin(9600);
Serial1.begin(9600);
// Setup callbacks for SerialCommand commands
sCmd.addCommand("PINON_40", LED_on); // Turns LED on
sCmd.addCommand("PINOFF_40", LED_off); // Turns LED off
sCmd.addCommand("w14on", Weiche1_on);
sCmd.addCommand("w14off", Weiche1_off);
Serial1.println("Ready");
}
void loop() {
sCmd.readSerial1(); // We don't do much, just process serial commands
}
void LED_on() {
Serial1.println("LED on");
digitalWrite(arduinoLED, HIGH);
}
void LED_off() {
Serial1.println("LED off");
digitalWrite(arduinoLED, LOW);
}
void Weiche1_on() {
Serial1.println("Weiche1 on");
digitalWrite(storePin, LOW);
shiftOut(dataPin, shiftPin, MSBFIRST, 0); //alle Ausgänge am 2. Register aus
shiftOut(dataPin, shiftPin, MSBFIRST, 1); //Ausgang 1 am ersten Register auf HIGH und Ausgang 2 auf LOW / Motor dreht links
digitalWrite(storePin, HIGH);
delay(2000); [color=red]Das Delay soll raus[/color]
Serial1.println("Weiche1 Strom aus");
digitalWrite(storePin, LOW);
shiftOut(dataPin, shiftPin, MSBFIRST, 0); //alles auf LOW
shiftOut(dataPin, shiftPin, MSBFIRST, 0); //alles auf LOW Motor steht
digitalWrite(storePin, HIGH);
}
void Weiche1_off() {
Serial1.println("Weiche1 off");
digitalWrite(storePin, LOW);
shiftOut(dataPin, shiftPin, MSBFIRST, 0); //alle Ausgänge am 2. Register aus
shiftOut(dataPin, shiftPin, MSBFIRST, 2); //Ausgang 2 am ersten Register auf HIGH und Ausgang 1 auf LOW / Motor dreht rechts
digitalWrite(storePin, HIGH);
delay(2000); [color=red]Das Delay soll raus[/color]
Serial1.println("Weiche1 Strom aus");
digitalWrite(storePin, LOW);
shiftOut(dataPin, shiftPin, MSBFIRST, 0); //alles auf LOW
shiftOut(dataPin, shiftPin, MSBFIRST, 0); //alles auf LOW Motor steht
digitalWrite(storePin, HIGH);
}
Hier mal ein Auszug aus dem Sketch
Grüße
André