Ich stelle mich vor - und dann gleich eine Frage ;)

Vor meinem ersten Post == Frage :wink: 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 :wink: 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

Hi, hab dir ne PM auch geschrieben..:wink:

@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 :slight_smile: Willkommen im Club.

Auch von mir herzliches Willkommen!

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. ]:smiley: 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 :wink:

Hallo York,
ich vermisse zwar die Frage, aber ich geb' dir schon mal die Antwort:

42

Douglas Adams-Fans wissen sowieso Bescheid und für den Rest der Menschheit gibts wikipedia:

Auf jeden Fall auch von mir: willkommen im Forum.

Wolfgang

Ich dachte man frägt korrekterweise den zweitgrößten Computer des Universums: the answer to life the universe and everything - Google Search :wink:

interessanter Haufen hier :wink:

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!

Meine Anforderung:

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 ;(

Trotzdem ein Danke für die Antworten