Dazu verwende ich Technik, die nicht von mir entwickelt wurde. Ein Bekannter hat eine Steuerung entwickelt, die einen PQS Verschluss steuert. Ist sehr schnell, funktioniert Und ist zuverlässig aber ich möchte meine von mir selbst entwickelte Technik weiter entwickeln um unabhängig zu werden und um es einfach selbst gemacht zu haben.
Was ich vorhabe ist für viele zunächst unverständlich...
Ich hab mich eine Zeitlang auch mit Fotografie beschäftigt, hab ne bescheidene EOS 1100D konnte allerdings auch einige gute Fotos schießen.
Was das eigentliche Thema angeht, schau Dir mal tone() für den Piezo an (außer Du weißt was Du da machst). <- Bzgl. der Aussage das Du den Piezo nicht am Arduino anschließen willst.
Wegen einer Lichtschranke, da gibt es mehrere Möglichkeiten. Google mal: "lichtschranke arduino".
Habe im Moment kaum Zeit, bin unterwegs.
Den Sketch habe ich aber kurz testen können, funktioniert!
Vielen Dank nochmal dafür.
Nun möchte ich ihn verstehen und dann versuche ich die nächsten Schritte.
Der Ablauf (Automat) ist nicht ganz so aber fast.
Ich liefere noch Infos, auch wegen dem warum, damit man versteht was ich möchte.
Nun muss ich aber erstmal Brötchen verdienen gehen....
Können mit einem Automaten auch Aktionen parallel ausgeführt werden oder wirklich nur sequenziell?
Wobei, wenn ich recht überlege ist die Sequenz wie du sie hier skizzierst eigentlich schon OK...
Ich muss "nur" die Timer durch ausprobieren bestimmen.
Nach 7. sollte dann, für Automatikmodus, ein Timer kommen und dann folgt 2.
Ein Druck auf den Taster setzt den Automaten wieder zurück.
jojolino:
Können mit einem Automaten auch Aktionen parallel ausgeführt werden oder wirklich nur sequenziell?
Auf einem ATmega328 kann immer nur eine Aktion ausgeführt werden, parallel geht nicht. Es geht nur quasi parallel durch Vermeidung blockierender Programmierung.
Aber das meinst Du nicht, vermute ich mal. Parallel zum endlichen Automaten kann man beispielsweise problemlos eine Herzschlag-LED blinken lassen. Bei genauer Betrachtung blinkt die LED aber nicht ganz gleichmäßig, da sie von der Duchlaufzeit des restlichen Programms abhängig ist. Solltest Du in solche Zeitbereiche vorstoßen, ist es notwendig, sich über eine effizientere Programmierung oder eine schnellere Hardware Gedanken zu machen.
Die Lichtschranke solltest Du vorsichtshalber auf Pin 2 legen, da man diesen auch mittels Interrupt bedienen kann, sollte das notwendig werden.
jojolino:
Ich muss "nur" die Timer durch ausprobieren bestimmen.
Die Größenordning ja, das Feintuning dann mittels Poti.
jojolino:
Nach 7. sollte dann, für Automatikmodus, ein Timer kommen und dann folgt 2.
Ein Druck auf den Taster setzt den Automaten wieder zurück.
agmue:
Die Größenordning ja, das Feintuning dann mittels Poti.
Ich habe einen Artikel gefunden, dort wird beschrieben wie man sehr genaue Timer mit ganz kleinen Zeiteinheiten erstellt. Ich benötige 0,25ms Auflösung. Genauer braucht es nicht zu sein, da auch Mechanik im Spiel ist, die ihre Toleranzen hat.
Hallo zusammen!
Ich sitze gerade im Zug und habe ein wenig gelesen.
Ich bin ehrlich, wirklich tief Einsteigen in das Thema Programmierung, auch wenn es für manchen hier einfach ist, werde ich wohl nicht, da ich gar keine Anwendungen habe und mit meiner Fotografie und anderen Dingen schon meine Freizeit fülle.
Ich verstehe aber auch, dass ich nicht einfach in diesem oder einem beliebigen anderen Forum erwarten kann, alles fertig präsentiert zu bekommen. Daher muss ich also doch ein bisschen was verstehen aber auf geringem Level. Wenn es also Lösungen gibt, die programmtechnisch unschön sind ist mir das egal, wenn denn die Funktion erfüllt ist.
Nun zu meinem Ziel überhaupt:
Die gezeigten Fotos entstehen fast ausschließlich bei hellem Sonnenschein.
Daher ist die Belichtungszeit des Verschlusses entscheidend. Selbst der von mir dieses Jahr verwendete PQS Verschluss hat noch eine realistische Zeit von 1/750 sec. (nominell 1/1000 sec.)
Das mag wenig erscheinen, es ist jedoch auch bei kleiner Blende noch zu lang.
Dadurch entstehen Doppelkonturen in den Bildern, die sich auch mit Photoshop oft nicht retuschieren lassen.
Mein Ziel, ob das überhaupt geht weiß ich nicht, ist es diese Zeit zu verkürzen. Nicht mit dem PQS, sondern mit einem alten mechanischen Zentralverschluss (Copal)
Meine Idee:
Schon bevor der Verschluss sich ganz geöffnet hat wird der Blitz gezündet. Es reicht wenn der Verschluss eine ca. 5mm messende Öffnung frei gibt. Direkt nach der Zündung oder sogar parallel (muss ich testen), soll der Kameraverschluss geschlossen werden. Wie lange die Kamera dafür braucht weiß ich nicht, daher der optionale zweite Timer.
Idealerweise endet die Belichtung also schon, bevor der Zentralverschluss sich ganz geöffnet hat aber hoffentlich auf alle Fälle früher als bis er sich wieder geschlossen hat.
Durch das Zusammenspiel beider Verschlüsse erhoffe ich mir den gewünschten Effekt.
Da ich keine wirklich quasiparallele Aktionen brauche dürfte das, für mich verständlichere, Aneinanderreihen von Befehlen ausreichen.
Ich habe verstanden, dass Delay() "böse" ist, möchte aber trotzdem gerne wissen ob damit Zeiten kleiner 1ms konfiguriert werden können.
jojolino:
Ich habe verstanden, dass Delay() "böse" ist, möchte aber trotzdem gerne wissen ob damit Zeiten kleiner 1ms konfiguriert werden können.
Die kleinste "Dauer" von delay ist 1 Milisekunde.
Für kleinere Zeiten gibt es delayMicroseconds(us).
Wie der Name schon sagt geht es hier um Mikrosekunden (1/1000 Milisekunden).
Allerdings ist die kleinste Auflösung am UNO nicht eine sondern 3 Mikrosekunden.
On 16 MHz Arduino boards (e.g. Duemilanove and Nano), this function has a resolution of four microseconds (i.e. the value returned is always a multiple of four).
@postmaster, du hast zwar Recht mit micros(), delayMicroseconds() ist aber etwas anderes und kann gut zwischen 3 und 4 µs unterscheiden.
Reference:
This function works very accurately in the range 3 microseconds and up. We cannot assure that delayMicroseconds will perform precisely for smaller delay-times.
Aber für jojolinos Anforderung ( 0,25 ms = 250 µs ) sind beide Funktionen gut geeignet.
Hallo zusammen...
Ich habe nun mal versucht zu verstehen was da passiert und wann ich was machen möchte.
Wenn also die LED aus ist möchte ich, sobald an dem Ausgang der Lichtschranke ein Signal entsteht einen Piezo tönen lassen.
Zunächst die Frage ist es richtig dass im Sketch an dieser Stelle (mit XXXXXXXX gekennzeichnet) zu tun?
lastButtonState = buttonState; // save the current state as the last state, for next time through the loop
if (buttonPushCounter % 2 == 0) { // turns on the LED every second button pushes by checking the modulo of the
digitalWrite(ledPin, LOW); // button push counter. the modulo function gives you the remainder of the
XXXXXXXXX // Hier muss eine Subroutine rein, die einen Piezo ansteuert wenn die Lichtschranke am analog Eingang schaltet.
} else { // division of two numbers:
digitalWrite(ledPin, HIGH); // rein
YYYYYYYYY // Hier muss eine zweite Subroutine rein
} // raus
}
Wenn die LED leuchtet, die "Anlage" also scharf ist sollen die anderen Schritte ablaufen (YYYYYYYY)
Die definiere ich extra, möchte erst einmal den Anfang verstehen.
Sind die Stellen korrekt gewählt?
Dann noch eine Frage zur Tonausgabe über einen Piezo
Ich habe gelesen, dass man einen Ton mit tone(PINNR, Tonhöhe) ausgibt.
Die Beispiele die ich finden konnte zeigen aber alle ein Delay das festlegt wie lange der Ton erzeugt werden soll. Ich möchte den Ton aber genau so lange hören wie die Lichtschranke durchschaltet.
Geht das so wie folgt und muss dazu ein analoger Eingang gewählt werden?
Die Lichtschranke gibt keinen Impuls, sondern der Ausgang schaltet die 12V solange durch wie kein Lichtstrahl den Phototransistor trifft.
int AnalogPinLS = 0; // Analog Eingang der Lichtschranke an Analog PIN 0
{
if (analogRead(AnalogPinLS) == HIGH) // Wenn die LS schaltet...
{
tone(8, 300); // …spiele diesen Ton... Piezo ist an PIN 8 angeschlossen
} else {
noTone(8); // Ton abschalten
}
}
Wenn der Code steht möchte ich zunächst diese Piezo und die Lichtschrankenabfrage in Hardware (Steckbrett) aufbauen und testen.
Du möchtest NICHT an Stelle YYYYYYYYYY eine andere Funktionalität einschleifen.
Du möchtest Dir eher das Beispiel Blink_withot_delay in der IDE anschauen oder hier im Forum den Nachtwächter durchlesen.
Und warum möchte ich das?
Ich verstehe dass diese Variante dazu dient den Programmablauf nicht durch Wartezeiten zu blockieren.
Bei der von mir benötigen Logik sehe ich diese Notwendigkeit nicht.
Welche Komponente sollte bei meiner erwarteten Programmlogik dem Nachtwächter, der um das Haus läuft, entsprechen?
Alleine Deine Anforderung, daß der Piezo so lange ertönen soll, wie die Lichtschranke unterbrochen ist, wird sich 'an der Perlenschnur' nicht realisieren lassen - bzw. wirst Du weitere Unterbrechungen, nachdem die Lichtschranke wieder frei gegeben wurde, erst wieder signalisiert bekommen, wenn das Programm mit 'dem Rest' durch ist und vorne wieder auf die Lichtschranke wartet.
Hier könnte man einen externen Buzzer einfach an die Lichtschranke klemmen, Der eben Krach macht, wenn Er 12V sieht.
Sonst: Je nach Tonhöhe könnte man versuchen, mit INTERVAL.h den Piezo blockadefrei anzusteuern.
(alle x ms wird umgeschaltet - Das ergibt dann einen halbwegs brauchbaren Ton)
Alternativ kann man die Timer, Die der Arduino nicht für sich selber braucht, auch in Hardware laufen lassen und Diese können selbstständig die Ihnen zugehörigen Pins schalten.
Je nach Frequenz des Timer ergibt sich die Tonhöhe.
Timer An/Ausschalten und Du hast den Ton 'nebenher' - oder been keinen Ton, aber nebenher
Wenn Du an XXXXXXX irgend etwas einfügen möchtest, daß irgend etwas macht - meinen Segen hast Du.
Gleiches bei YYYYYYY.
Bei einfachen Sketchen habe ich, darüber hinaus, auch kein Problem mit delay() - da soll aber Jeder selber wissen, was Er da macht.
Nur darf man sich dann nicht wundern, daß der Kram eben nur stur hintereinander abläuft und eine Erweiterung zu >90% ein Neuschreiben nach sich zieht.
Und: Du wirst erweitern/anpassen wollen.
Zur Abschätzung ist ein Ablauf-Diagramm sinnvoll - MALE Dir (möglichst haarklein) auf, was wann passieren soll und welche Bedingung(en) dazwischen erfüllt sein müssen - Das gibt dann aber sehr wahrscheinlich eine State-Maschine.