Vor meinem ersten Post == Frage möchte ich mich kurz vorstellen.
Ich mache das hier, da ich keinen expliziten Vorstellungsthread gefunden habe.
Ich heiße Reinhard und komme aus dem schönen Oberösterreich.
Eigentlich hat mich der RC-Modellbau hier reingespült. Mittlerweile baue ich nur noch Rennboote, die Fliegerei hat zu viel Ausschuss produziert.
Durch Zufall bin ich, über ein CNC-Forum, auf die *duinos-gestoßen.
Dann musste ich natürlich sofort so was haben, als Modellbauer weiß man eh nicht was man sonst mit seiner Zeit sonst anfangen soll Ein kleines Projekt habe ich schon realisiert,
aber halt auch nur mit Hilfe eines Spezialisten, der leider sehr, sehr wenig Zeit hat ;( Jetzt müsst's halt ihr herhalten.
Wer Lust und Laune hat kann ein bisserl auf meiner Homepage schmökern, da seht ihr womit ich neben Familie und Beruf sonst noch meine Zeit verbringe.
www.york.at.tf
Ein bisserl "gethingiversed" habe ich natürlich auch schon: Thingiverse - Digital Designs for Physical Objects
@york: Du führst hier ja ganz neue Sitten ein. Sowas erlebt man hier selten. Endlich mal einer der nicht gleich mit der Tür ins Haus fällt Willkommen im Club.
Trotzdem bin ich etwas irritiert, einen Thread vorzufinden, wo keine Frage gestellt wird. Wenn nun plötzlich hunderte deutschsprachige Member jeweils einen eigenen Vorstellungsthread anlegen, wird das hier zum reinsten Chaos. ] Das sollte meiner Meinung nach doch eher im Rahmen der ersten Frage erfolgen. Aber vielleicht sehe ich das einfach ein bisschen zu eng...
Auch wieder wahr. Auf der anderen Seite geht das Forum aber auch nicht daran zugrunde, daß immer wieder die gleichen oder ähnliche Fragen gestellt werden. Eigentlich lebt es davon
normalerweise kriegt man in andern Foren immer gleich eine auf's Häupl wenn sich nicht vorstellt und gleich mit der Tür ins Haus fällt!
Das verlängerte WE habe ich genutzt um "Kurz-zu-Urlauben" drum ist sich meine Frage, die ja gleich folgen sollte, noch nicht gestellt - aber keine Angst die kommt dann gleich.
Und mit "42" werde ich mich sicher nicht zufrieden geben, wobei ich mehr ein "Robert Asprin-Fan" bin!
Ich bin schon am Formulieren!
Das folgende Projekt soll ein Testaufbau für einen mechanischen Schleifkontakt werden.
Es soll die Anzahl der Bewegungen und die Kontaktsicherheit überprüfen.
Die Hardware:
Ein Servo bewegt einen mechanischen Schleifkontakt, über diesen wird eine Spannung an ein Relais gelegt. Der (Fehler-)Kontakt des Relais
wird sich im Fehlerfall öffnen. Ich möchte also die Anzahl der Bewegungen und eventuell auftretende Fehler zählen.
Momentan wird ein Logfile mit Gobetwino geschrieben. Sobald mein SD-Card-Shield geliefert wird, möchte ich das File dann auf eine SD-Card schreiben.
Momentan habe ich umgesetzt:
Der Servo bewegt sich 30° Hin & Her, die Anzahl der Wiederholungen wird gezählt un in ein Logfile geschrieben.
Das Zählen beginnt erst nach drücken des Starttasters.
Vor dem Start bzw. nach Ablauf der Wiederholungen leuchtet die rote LED, läuft der Hauptteil ist die rote LED aus.
Jetzt zu meinem Problem:
Auf einen Eingang wird jetzt der Kontakt des Relais gelegt. Öffnet sich dieser soll dies aufgezeichnet werden.
Jetzt weiss ich aber nicht wie ich das angehen soll, da ja hier auch noch die Zeit eine Rolle spielt. Ich dachte ich frage den Kontakt am Beginn der Bewegung in eine Richtung ab und dann am Start des "Wendepunktes". Wir ein Fehler erkannt, (Fehlerkontakt offen) wird ein Zähler immer um eins erhöht. Meine Versuche endeten jetzt aber immer darin, dass im Fehlerfall das Programm gestopt hat.
Wie gehe ich es richtig an? Wo und vor allem wie füge ich die Abfrage ein?
den bisherigen Code (ohne der Abfrage) seht ihr hier:
#include <Servo.h>
Servo servo01; // Definition des Servoobjektes
int pos = 0; // Ausgangsposition des Servos
int startPin = 2; // Anschlußpin des Startschalters
int LedRED = 3; // Anschlußpin der roten LED
void setup()
{ // 1
pinMode(startPin, INPUT); // Anschluß des Starttasters als Eingang
pinMode(LedRED, OUTPUT); // Anschluß der roten LED als Ausgang
digitalWrite(startPin, HIGH); // interner Pullup-Widerstand wird aktiviert
digitalWrite(LedRED, LOW); // Led wird als "AUS" initialisiert
servo01.attach(9); // Anschluß des Servos an PIN 9
Serial.begin(115200);
servo01.write(pos);
} //1
void loop()
{
int wert = digitalRead(startPin); // Wert des Starttasters wird gelesen
if (wert == LOW) // ist der Schalter gedrückt wird der Hauptteil gestartet
{ //2
digitalWrite(LedRED, LOW); // die rote LED wird ausgeschalten
Serial.print ("#S|COPYLEER|["); // Über Gobewino wird ein leeres Logfile erstellt
Serial.println("]#"); // Über Gobewino wird ein leeres Logfile erstellt
for (int i=1; i<=20; i++) // Anzahl der Wiederholungen
{ //3
Serial.print ("#S|COUNT|["); // über Gobetwino wird die Anzahl der
Serial.print ("Wiederholung;"); // Wiederholungen in
Serial.print (i); // ein File
Serial.println("]#"); // geschrieben
for(pos = 1; pos < 30; pos += 1) // Bewegung von 1° auf 30°
{ //4 // in 1°-Schritten
servo01.write(pos); // gibt den Wert an das Servo
delay(15); // wartet 15ms
} //4
for(pos = 30; pos>=1; pos-=1) // Bewegung von 30° auf 1°
{ //5
servo01.write(pos); // gibt den Wert an das Servo
delay(15); // wartet 15ms
} //5
} //3
} //2
else
{
digitalWrite (LedRED, HIGH); // solange der Starttaster nicht betätigt wurde, ist die rote LED an
}
}
Kurze Anfrage: Warum willst du das Relais einbauen? Ich sehe schon dabei einige Nachteile:
Zum einen reagiert die Mechanik verhältnismäßig träge, kurze Unterbrechungen werden möglicherweise nicht gezählt, zudem wird nur unnütz Strom verbraucht.
Von daher würde ich direkt 5V auf den Schleifkontakt legen und mit einem PullDown-Widerstand gegen Masse schalten. An einem Eingang wertest du dann aus, wie oft Massepotential am Eingang anlag. Ich denke, das wäre ein klassischer Fall für eine Interruptfunktion, die auf eine fallene Flanke reagiert und eine Zählvariable inkrementiert.
[edit] Rechtschreibkorrektur...
Du kannst den Code auch in [ code ]...[ /code ] setzen, sieht dann etwas ordentlicher aus.
da war es jetzt etwas ruhig, aber dieses Projekt hat sich von den Anforderungen völlig geändert, und wurde jetzt mit Hilfe eines Profis gelöst. In den 1,5 Wochen welche ich zum Fertigstellen gehabt hätte wäre das für mich nicht zu lösen gewesen ;(