fredyxx
31.05.2016, 00:21
Hallo,
ich hoffe, ihr empfindet meine Frage nicht als Zumutung.
Ich habe ein etwas kompliziertes Programm aber schon auf das Wesentliche reduziert , um meine Frage zu stellen.
Das ist der (so nicht lauffähige Code) ; meine Anmerkungen dazu sind fett
#include <CustomStepper.h>
CustomStepper stepper_M2(22, 24, 26, 28); // Anschlusspinne der Motortreiber
CustomStepper stepper_M3(32, 34, 36, 38); //
#include <SimpleTimer.h> // einbinden der Library
SimpleTimer timer1; // Benennung der Timer
boolean M1solldrehen = false; // für UP Justierung
boolean M2solldrehen = true; // für UP Justierung
boolean Zeitaus1 = true; // Wird false, wenn Zeit von SimpleTimer 1 abgelaufen ist
int JustPin = 14; // mit digital Eingang 14 wird die jeweilige Motorbewegung gestoppt
int zeitId; // für den SimpleTimer
void setup() {
Serial.begin (250000); // diese Buadrate muss auch in der Konsole (Serieller Monitor) eingestellt sein
while (!Serial);
pinMode (JustPin, INPUT); // wird nur im UP Justierung benötigt
digitalWrite(JustPin, HIGH); //schaltet den PullUp-Widerstand ein
}
void loop() {
Justierung();
// stepper_M2.run();
// stepper_M3.run();
timer1.run();
} //************* ENDE loop
// ************************************** UP Justierung **************************************
void Justierung() {
static boolean Start_war = false;
if (Zeitaus1 == false) {
M1solldrehen == true; wird nach Ablauf des Timers durchlaufen
M2solldrehen == false;
goto M2_Sprung;
}
// 11111111111111111111111
if (digitalRead (JustPin) == HIGH && M1solldrehen == false) {
hier wird Spindelstepper eingeschaltet
}
// 2222222222222222222222222
else if (digitalRead (JustPin) == LOW && M1solldrehen == false) { // Motor 1 justieren
Serial.print (" 163 "); Die Ausgabe erfolgt im Seriellen Monitor ca. 1 s lang und ist "163 0"
Serial.println (Start_war);
// 2a2a2a2a2a2a2a2a2a2a2a2a
if (Start_war == false) {
zeitId = timer1.setInterval(1000, Zeitablauf1); hier wird der Timer gestartet
}
// 2b2b2b2b2b2b2b2b2b2b2b2b2b
else if (Start_war == true) { // Endposition erreicht
Serial.println (" 170 "); hier kommt das Programm nicht hin
}
}
M2_Sprung:
if (stepper_M2.isDone() && M2solldrehen == false && Zeitaus1 == false) { //Motor 2 justieren
Serial.println (" M2_Sprung ");
}
} //************* ENDE UP Justierung
//**************************** UP Zeitablauf1 **************************************
void Zeitablauf1() { // wird ausgeführt, wenn SimpleTimer timer 1 abgelaufen ist
Zeitaus1 = false; //
Serial.println (" 255 ");
} // *********** ENDE UP
void M2_fahren() {
}
Ohne meine fetten Kommentare tut das Programm, was es soll. Die Konsole zeigt dann:
für 1 s
163
0
Zeitaus1 = 1
163
0
Zeitaus1 = 1
163
0
Zeitaus1 = 1
163
nach der Sekunde
163
0
255
Zeitaus1 = 0
255
255
Zeitaus1 = 0
So weit so gut!
Jetzt mein Problem:
Sobald ich diese Zeilen scharf mache:
// stepper_M2.run();
// stepper_M3.run();
funktioniert das so nicht mehr, obwohl ich sonst nichts ändere und alles was mit den Steppern M2 und M3 zu tun hat, gelöscht habe. Auf der Konsole erscheint nur noch :
Zeitaus1 = 1
163
0
und das nur einmal.
Kann es sein, dass die Librarys sich beeinflussen? Was könnte man denn dagegen tun?
Gruß
fredyxx
ich hoffe, ihr empfindet meine Frage nicht als Zumutung.
Ich habe ein etwas kompliziertes Programm aber schon auf das Wesentliche reduziert , um meine Frage zu stellen.
Das ist der (so nicht lauffähige Code) ; meine Anmerkungen dazu sind fett
#include <CustomStepper.h>
CustomStepper stepper_M2(22, 24, 26, 28); // Anschlusspinne der Motortreiber
CustomStepper stepper_M3(32, 34, 36, 38); //
#include <SimpleTimer.h> // einbinden der Library
SimpleTimer timer1; // Benennung der Timer
boolean M1solldrehen = false; // für UP Justierung
boolean M2solldrehen = true; // für UP Justierung
boolean Zeitaus1 = true; // Wird false, wenn Zeit von SimpleTimer 1 abgelaufen ist
int JustPin = 14; // mit digital Eingang 14 wird die jeweilige Motorbewegung gestoppt
int zeitId; // für den SimpleTimer
void setup() {
Serial.begin (250000); // diese Buadrate muss auch in der Konsole (Serieller Monitor) eingestellt sein
while (!Serial);
pinMode (JustPin, INPUT); // wird nur im UP Justierung benötigt
digitalWrite(JustPin, HIGH); //schaltet den PullUp-Widerstand ein
}
void loop() {
Justierung();
// stepper_M2.run();
// stepper_M3.run();
timer1.run();
} //************* ENDE loop
// ************************************** UP Justierung **************************************
void Justierung() {
static boolean Start_war = false;
if (Zeitaus1 == false) {
M1solldrehen == true; wird nach Ablauf des Timers durchlaufen
M2solldrehen == false;
goto M2_Sprung;
}
// 11111111111111111111111
if (digitalRead (JustPin) == HIGH && M1solldrehen == false) {
hier wird Spindelstepper eingeschaltet
}
// 2222222222222222222222222
else if (digitalRead (JustPin) == LOW && M1solldrehen == false) { // Motor 1 justieren
Serial.print (" 163 "); Die Ausgabe erfolgt im Seriellen Monitor ca. 1 s lang und ist "163 0"
Serial.println (Start_war);
// 2a2a2a2a2a2a2a2a2a2a2a2a
if (Start_war == false) {
zeitId = timer1.setInterval(1000, Zeitablauf1); hier wird der Timer gestartet
}
// 2b2b2b2b2b2b2b2b2b2b2b2b2b
else if (Start_war == true) { // Endposition erreicht
Serial.println (" 170 "); hier kommt das Programm nicht hin
}
}
M2_Sprung:
if (stepper_M2.isDone() && M2solldrehen == false && Zeitaus1 == false) { //Motor 2 justieren
Serial.println (" M2_Sprung ");
}
} //************* ENDE UP Justierung
//**************************** UP Zeitablauf1 **************************************
void Zeitablauf1() { // wird ausgeführt, wenn SimpleTimer timer 1 abgelaufen ist
Zeitaus1 = false; //
Serial.println (" 255 ");
} // *********** ENDE UP
void M2_fahren() {
}
Ohne meine fetten Kommentare tut das Programm, was es soll. Die Konsole zeigt dann:
für 1 s
163
0
Zeitaus1 = 1
163
0
Zeitaus1 = 1
163
0
Zeitaus1 = 1
163
nach der Sekunde
163
0
255
Zeitaus1 = 0
255
255
Zeitaus1 = 0
So weit so gut!
Jetzt mein Problem:
Sobald ich diese Zeilen scharf mache:
// stepper_M2.run();
// stepper_M3.run();
funktioniert das so nicht mehr, obwohl ich sonst nichts ändere und alles was mit den Steppern M2 und M3 zu tun hat, gelöscht habe. Auf der Konsole erscheint nur noch :
Zeitaus1 = 1
163
0
und das nur einmal.
Kann es sein, dass die Librarys sich beeinflussen? Was könnte man denn dagegen tun?
Gruß
fredyxx