Mit Arduino kenne ich mich zwar nicht aus, aber der Code ist extrem unleserlich, da es keine Formatierung gibt. Poste den Code mit den Code Tags (#-Button) und passender Formatierung.
MfG Hannes
Mit Arduino kenne ich mich zwar nicht aus, aber der Code ist extrem unleserlich, da es keine Formatierung gibt. Poste den Code mit den Code Tags (#-Button) und passender Formatierung.
MfG Hannes
So, kann das nicht funktionieren:
Mit copy & paste ohne nachzudenken und die absoluten Grundlagen zu verstehen kann man kein Programm schreiben.
Es darf in einem Arduino Sketch nur genau einen
void setup () {
}
Block und nur genau einen
void loop () {
}
Block geben.
Geschweifte Klammern markieren immer Anfang und Ende von Funktionen und Anweisungsblöcken.
Es muß also zu jeder "{" auch eine "}" geben.
Dein erster Fehler: das erste "void etup()" wird nirgendwo beendet.
Zweiter Fehler es gibt mehr als ein "void setup()".
Unschön sind die fehlenden Einrückungen, denn diese hätten Dir sofort das fehlen einer "}" gezeigt und erhöhen die Lesbarkeit ungemein.
Unnütz und der Übersichtlichkeit abträglich, Remark (Kommentar) Zeichen "//" am Ende vieler Zeilen ohne das dort überhaupt ein Kommentar steht.
Das zur allgemeinen Programmstruktur.
Sinnhaftigkeit / Sinnlosigkeit des Code
Die DO-WHILE Schleife wird solange durchlaufen, solange sie Abbruchbedingung nicht wahr ist.
Nicht wahr ist sie solange "curmicros - prevmicros <= 5000", also das Ergebniss der Berechnung kleiner oder gleich 5000 ist.
Da das nur ein Codebeispiel ist, habe ich sinnigerweise "prevmicros = curmicros" direkt in die Zeile davor gesetzt.
Das Ergebniss der Berechnung wird also meist 0 oder 1 sein und so nie die 5000 übersteigen kann, was zu einer Endlosschleife führt (Für die ist aber ja schon "void loop()" zuständig).
Versteht man das Konstrukt, fällt einem das auf und man weiß das diese Zeile vor die DO Zeile muß.
Ich erkenne also das Du den Code nur kopiert hast ohne darüber nachzudenken.
Aber selbst wenn das korrekt implementiert wäre, ist die Do Schleife immer noch sinnlos.
Da "unsigned long curmicros = millis()" die Variable curmicros mit dem aktuellen Wert der Funktion "millis()" füttert.
Sprich das Konstrukt prüft in diesem Fall ob mehr als 5 Sekunden vergangen sind.
in der Gesamten DO-WHILE Schleife, sind aber:
delay(50)
delay(20000)
delay(50)
delay(10000)
-------------
= 30100
Delays für 30,1 Sekunden drin.
Das heist beim einmaligen Durchlaufen der DO-WHILE Schleife vergeht schon mehr als die achtfache Zeit der Abbruchbedingung. Damit würde die Schleife immer nach einem Durchlauf beendet.
Womit eine Schleife an dieser Stelle keinen Sinn macht.
Vor allem da das Konstrukt ja die Delays ersetzen soll (diese aber immer noch vorhanden sind.)
Also noch mal, fang mit ganz kleinen Schritten bei Null an.
Du willst einen Sprintwettkampfe gewinnen, must aber erst mal Laufen lernen.
Genaugenommen sehe ich Dich momentan noch nicht einmal krabbeln.
Geändert von i_make_it (02.11.2016 um 06:47 Uhr)
Hallo,
ich wollte nur das ich einen BÜ zum laufen bringe mit so einem Arduino uno und nicht an weinem Wettbewerb teilnehmen bin unsportlich ; )
Es gibt einfach keinen Sketch mit dem ich mein Servo so ansteuern kann wie ich es brauche.
#include <Servo.h>
Servo myservo;
int pos = 0;
void setup() {
myservo.attach(9);
}
void loop() {
for (pos = 0; pos <= 150; pos += 1) { // Servo fährt von 0° bis 150°
// in steps of 1 degree
myservo.write(pos); // Servo soll zu der variabelen POS fahren
delay(15); // in diesem Zeitraum soll der Servo den Weg von 0-150 fahren
delay(5000); // Servo soll in dieser POS variabel warten
}
for (pos = 150; pos >= 0; pos -= 1) { // Servo soll von 150° auf 0° fahren
myservo.write(pos); // Servo soll zu der variabelen POS fahren
delay(15); // in diesem Zeitraum soll der Servonn den Weg von 150-0 fahren
delay(5000); // Servo soll in dieser POS variabel warten
}
}
So und mit diesem Sketch werde ich nun meine ganzen Sorgen mit den blöden Tastern einprogrammieren los.
Da ich ja sowieso einige Reedkontakte verarbeiten muss kann ich auch gleich mit einem Bistabilenrelais die Stromversorgung ein und aus schalten dann komme ich auch zurecht.
Das blinken werde ich dann mit einem zweiten Arduino und einem Blinksketch paralell betreiben.
Es hat funktioniert.
Danke für Euer Bemühen und weiter hin alles Gute.
Hochachtungsvoll![]()
Geändert von alterraucher (02.11.2016 um 17:33 Uhr)
Wenn man gar nichts selbst machen will, kann man auch einfach das freundliche Modellbahn Forum nebenan, anstelle des Roboter Forums, fragen.
Google ist Dein Freund!
https://www.google.de/?gws_rd=ssl#q=...o+bahnschranke
http://www.stummiforum.de/viewtopic.php?t=123040
Hallo,
nun habe ich diesen alten Sketch erst einmal endsorgt.
Ich muss ganz anders an diese Sache heran gehen.
Ein Kollege hat mich beim Schreiben super unterstützt, da ich mich bisher nur an der Oberfläche befinde und es noch nicht geschafft habe mich in der kurzen Zeit soweit einzulesen.
Der neue Sketch ist so ganz ohne ein DELAY ausgekommen und durch Timer ersetzt worden.
Ich kann den Sketch nun noch weiter ausbauen und dann werde ich das geschriebene einmal hier mit hinein stellen.
Auch die Gundeinstellungen beim ARDUINO 1.6.12 ide habe ich jetzt ordentlich eingerichtet bekommen.
Etwas Zeit brauche ich aber noch bis die ersten Bilder hier hochgeladen werden.
Bis dem nächst!
Geändert von alterraucher (13.02.2017 um 06:09 Uhr)
Lesezeichen