Ich hab zwei Probleme:
Erstes Problem ist wie schon oben geschrieben, wenn ich ein neues Programm in den Arduino lade oder wenn ich ihn neu starte, gibt er Signale auf die Pins, die ich nirgends so eingestellt habe. Das zeigt sich zum Beispiel dadurch, dass irgendwelche LEDs blinken oder Motoren einfach angehen. Kann mir jemand erklären wieso das geschieht? Bzw. muss ich irgendetwas ergänzen? Ich pack euch meinen setup Schritt und die globalen Var mal noch mit rein.
Mein zweites Problem ist, dass wenn ich die Verbindung zum Rechner trenne, nachdem ich alles hochgeladen habe, Macht der Arduino wieder nicht mehr was er soll und fängt wahllos an Sachen zu steuern... Wieso??
Hier der Setup Code:
#include <Servo.h>
#include <Stepper.h>
#define STEPS 32
Servo servo1;
Servo servo2;
Servo servo3;
Stepper stepper(STEPS, 8, 10, 9, 11);
int LEDs = 13;
int Luefter = 12;
int Taster_1 = A0;
int Taster_2 = A1;
int Magnet = 2;
int hilf_1 = 0;
int hilf_2 = 0;
int servo_pin1 = 6;
int servo_pin2 = 5;
int servo_pin3 = 3;
int pos1 = 0; //Mittleres Gelenk
int pos2 = 180; //Unterstes Gelenk
int pos3 = 90; //Drehen der Lego Figur
int steps = 0;
const int Groesse=10;
char zeichen[Groesse];
int Zahl = 0;
int Grad = 0;
void setup() {
 // put your setup code here, to run once:
 servo1.attach(servo_pin1);
 servo2.attach(servo_pin2);
 servo3.attach(servo_pin3);
 stepper.setSpeed(1000);
 pinMode(LEDs, OUTPUT);
 pinMode(Luefter, OUTPUT);
 pinMode(Taster_1, INPUT_PULLUP);
 pinMode(Taster_2, INPUT_PULLUP);
 pinMode(Magnet, OUTPUT);
Â
 Serial.begin(9600);
 Serial.println("");
 Serial.println("--- Willkommen bei Robotersteuerung von Bob! ---");
 Serial.println("");
 delay(2000);
 Serial.println("+------------------------------------------------------+");
 Serial.println("|--> Gebe eine Zahl ein um eine Aktion auszuwählen. <--|");
 Serial.println("+------------------------------------------------------+");
 Serial.println(" 1 = Mittleres Gelenk auswählen");
 Serial.println(" 2 = unterstes Gelenk auswählen");
 Serial.println(" 3 = Figur oben drehen");
 Serial.println(" 4 = Basis drehen");
 Serial.println(" 5 = LEDs an/aus machen");
 Serial.println(" 6 = Lüfter an/aus machen");
 Serial.println(" 7 = Zustände ausgeben lassen");
 Serial.println(" 8 = Bob vor den Lüfter fahren");
 Serial.println(" 9 = Bob TANZT");
 Serial.println("");
 servo1.write(pos1);
 servo2.write(pos2);
 servo3.write(pos3);
 digitalWrite(LEDs, false);
 digitalWrite(Luefter, false);
 digitalWrite(Magnet, false);
Â
 Â
 }
 digitalWrite(LEDs, false);
 digitalWrite(Luefter, false);
 digitalWrite(Magnet, false);
 pinMode(LEDs, OUTPUT);
 pinMode(Luefter, OUTPUT);
 pinMode(Magnet, OUTPUT);
Oh gut zu wissen... Ich hatte irendwo das wohl falsch aufgeschnappt.
Also wir haben ein Teil Erfolg erreicht. Die Servos fahren nicht mehr irgendwelche Positionen an die sie nicht sollten. GUT! Jedoch flacken die LEDs noch immer rum und der DC-Motor fängt auch trotzdem das laufen an bis das Programm komplett rüber gespielt ist.
#include <Servo.h>
#include <Stepper.h>
#define STEPS 32
Servo servo1;
Servo servo2;
Servo servo3;
Stepper stepper(STEPS, 8, 10, 9, 11);
int LEDs = 13;
int Luefter = 12;
int Taster_1 = A0;
int Taster_2 = A1;
int Magnet = 2;
int hilf_1 = 0;
int hilf_2 = 0;
int servo_pin1 = 6;
int servo_pin2 = 5;
int servo_pin3 = 3;
int pos1 = 0; //Mittleres Gelenk
int pos2 = 180; //Unterstes Gelenk
int pos3 = 90; //Drehen der Lego Figur
int steps = 0;
const int Groesse = 10;
char zeichen[Groesse];
int Zahl = 0;
int Grad = 0;
void setup() {
 digitalWrite(LEDs, LOW);
 digitalWrite(Luefter, LOW);
 digitalWrite(Magnet, LOW);
 pinMode(LEDs, OUTPUT);
 pinMode(Luefter, OUTPUT);
 pinMode(Taster_1, INPUT_PULLUP);
 pinMode(Taster_2, INPUT_PULLUP);
 pinMode(Magnet, OUTPUT);
 digitalWrite(LEDs, LOW);
 digitalWrite(Luefter, LOW);
 digitalWrite(Magnet, LOW);
 Serial.begin(230400);
 Serial.println(F("Start...."));
 unsigned long startmillis = millis(); // in einer früheren Version standen hier 3 l
 while (millis() - startmillis < 5000) // Zeit in millisekunden
 {
  Serial.print(digitalRead(LEDs));
  Serial.print("\t");
  Serial.print(digitalRead(Luefter));
  Serial.print("\t");
  Serial.println(digitalRead(Magnet));
  digitalWrite(LEDs, LOW);
  digitalWrite(Luefter, LOW);
  digitalWrite(Magnet, LOW);
 }
 Serial.println(F("StartPause vorbei..."));
 Serial.println("--- Willkommen bei Robotersteuerung von Bob! ---");
 Serial.println("");
 delay(2000);
 Serial.println("+------------------------------------------------------+");
 Serial.println("|--> Gebe eine Zahl ein um eine Aktion auszuwählen. <--|");
 Serial.println("+------------------------------------------------------+");
 Serial.println(" 1 = Mittleres Gelenk auswählen");
 Serial.println(" 2 = unterstes Gelenk auswählen");
 Serial.println(" 3 = Figur oben drehen");
 Serial.println(" 4 = Basis drehen");
 Serial.println(" 5 = LEDs an/aus machen");
 Serial.println(" 6 = Lüfter an/aus machen");
 Serial.println(" 7 = Zustände ausgeben lassen");
 Serial.println(" 8 = Bob vor den Lüfter fahren");
 Serial.println(" 9 = Bob TANZT");
 Serial.println("");
 servo1.attach(servo_pin1);
 servo2.attach(servo_pin2);
 servo3.attach(servo_pin3);
 stepper.setSpeed(1000);
 servo1.write(pos1);
 servo2.write(pos2);
 servo3.write(pos3);
}
void loop()
{}
Den code einspielen.
Der serMon beginnt jetzt mit Achtung!: 230400
Ok ich denk auch ich weiß warum die Servos jetzt nichts machen.
Es scheint so also würde das Programm nicht aus der while Schleife rauskommen die du eingesetzt hast. Die Ausgabe auf dem Serial ist :
Start....
$:⸮7⸮o0қ⸮⸮4⸮⸮ۛ⸮ ⸮lcZS⸮⸮⸮=⸮r⸮0X&
sventhimsen:
Ausgabe auf dem Serial ist :
Start....
$:⸮7⸮o0қ⸮⸮4⸮⸮ۛ⸮ ⸮lcZS⸮⸮⸮=⸮r⸮0X&
Nein, die Ausgabe ist schnuppe.
Naja, nicht wirklich. der kommt aus der while schon raus, weil die Zeit als Abbruchbedingung drin ist.
Nimm meinen letzten Code.
Bitte unten im seriellen Monitor unbedingt die Baudrate einstellen, die ich vorgebe! Sonst kommt nur Müll raus - das setup als solches funktioniert aber trotzdem.
sventhimsen:
Ok hab das Problem gefunden.
Mein Serial war falsch eingestellt mit der Baurate. Jetzt bekomm ich die selbe Ausgabe wie du.
0 0 0
...
0 0 0
NAA!!
Ich will die ganze Ausgabe sehen!
Lückenlos.
In Codetags!
Und eine Aussage ob in den - von mir eingestellten 5 Sekunden - sich irgendwas ergiesst oder ob es still bleibt.
sventhimsen:
Wie tu ich die Ausgabe in Codetags schreiben?
Weil wenn ich es so hochlade stürzt die Seite ab.
Die hat heute wirklich wieder erhebliche Probleme... Du bist nicht allein..
Also:
Nimm Deinen Editor auf Deinen rechner, kopier die Ausgabe des SerMon da rein und schreibe am Anfang ein mit den eckigen Klammern [ und ] eingefasstes code und am Ende von Deinem text ein von den eckicken Klammern [ und ] eingefasstes[edit] /code [/edit] Danke wno158...
Den ganzen Teil kopierst in Deine Nachricht.
ALTERNATIV! Kannst Du auch im Foreneditor den text einfügen, markieren und oben links auf das Zeichen < / > klicken.