Natürlich ist auf dem Arduino ein Sketch, der die Ventile und die Kamera bedient. Was Du willst, ist aber, das die Parameter für die Steuerung (wann welches Ventil und wann welche Kamera auslöst) anpassen, und zwar OHNE das Du den kompletten Sketch neu hochladen musst.
Genau davon rede ich ja die ganze Zeit.
Im Prinzip macht Dein Sketch auf dem Arduino 2 Dinge.
1.) Er wartet darauf, das der "Auslöser" an Pin 13 gedrückt wird, dann spult er sein Steuerprogramm ab (Ventile, Kamera ...). Danach wartet er wieder auf den Auslöser.
2.) Zusätzlich zum Warten auf den Auslöser, prüft der Sketch regelmäßig die serielle Schnittstelle, ob da Daten übertragen wurden. Wenn ja, nimmt er die Daten an und ersetzt damit die bisherigen Stuerdaten.
Das ist der Teil auf dem Arudino.
Dein PC-Programm macht dann nix anderes als über ein Formular (egal in welcher Sprache) die Daten eingeben zu lassen und beim Drücken auf den "Start"-Knopf die Daten seriell an den Arduino zu schicken.
Ich glaube mit einem "kleinen" Display wird das nicht zu realisieren sein.
Ich möchte z.B. nicht immer das Ventil 1, Ventil 2 und Ventil 3 öffnen.
Ich möcht auch, dass z.B. "nur" Ventil 1 angesteuert wird und z.B. nach 3 sec. für 1 sec. öffnet und dann nach 4 sec. für 2 sec. öffnet.
Also alle Parameter sollen änderbar sein - auch die Anzahl und ansteuerung der Ventile.
Ich möchte z.B. auch zwei Kamras anschließen können. Mal will ich das beide Kameras angeschlossen sind und auch beide auslösen,
mal soll nur eine auslösen, mal ist nur eine angeschlossen, ...
Das geht wohl kaum über ein kleines Display mit 4 Zeilen und 4 Einstellknöpkes.
Anbei mal eine Grafik eines "fertigen" Programmes das so aussieht wie ich mir das vorstelle
mkl0815:
Dein PC-Programm macht dann nix anderes als über ein Formular (egal in welcher Sprache) die Daten eingeben zu lassen und beim Drücken auf den "Start"-Knopf die Daten seriell an den Arduino zu schicken.
Ja genau!
Und wenn das egal ist, mit welcher "Sprache" dieses "Formular" geschrieben wurde, dann müsste das doch auch mit Excel-VBA gehen (um auf die eingangs gestellte Frage zurückzukommen)? Und wie kann ich das ganze nun realisieren, dass das "Formular" mit dem Board "kommuniziert"?
Diese Darstellung war aber nicht Teil der ursprünglichen Fragestellung. Wie soll man als Leser des Threads bzw. auch Helfer darauf kommen?
Ich denke, du verrennst dich da schon etwas, das wird fürs erste Projekt zu viel, was dann wiederum in Frust endet und in der Regel mit der Aufgabe des Projektes. Wäre schade drum.
sth77:
Diese Darstellung war aber nicht Teil der ursprünglichen Fragestellung.
Ich dachte das Bild in #4 währe eindeutig gewesen?
Natürlich kommt erstmal Schritt 1 = Hardware
Dann Schritt 2 = Software = Sketch schreiben auf das Board laden
Und zum Abschluss käm dann noch die GUI zur Steuerung der Parameter.
Nur wenn Schritt 2 und 3 z.B. nur durch ein "komplettes" C Programm zu realisieren währen, oder schon bei Schritt 2 der Schritt 3 mit berücksichtig werden muss,
währe es doppelte arbeit die Schritte 2 und 3 nacheinander zu lösen.
obiwan:
Ich dachte das Bild in #4 währe eindeutig gewesen?
Die neue Darstellung ist aber ungleich komplexer, und nicht mehr so leicht auf einem zeichenbasierten LCD umsetzbar wie ich das im Vorfeld dachte. Schwamm drüber, wenn es von Anfang an so kompliziert werden soll, musst du dir ein Protokoll überlegen, welches wirklich jede Einstellmöglichkeit abdeckt. Dieser Steuerungssatz wird dann über die serielle Schnittstelle übertragen, muss exakt empfangen, interpretiert und richtig ausgegeben werden. Hinweise zu dieser Herangehensweise hat mkl0815 ja bereis gegeben.
zum verständnis für obiwan. könnte schnell mal jemand die zehn zeilen für den arduino schreiben, damit man dann in den serial monitor
5
enter
800
enter
eingibt, und dann die led13 5mal für 800ms aufblinkt? ich sitz in der firma und hab' keinen arduino hier.
es ist glaube ich noch ein großes verständnisproblem. und damit wäre dann einiges klarer. eine gui statt des serial monitors ist dann der zweite schritt. die kann er sich in vba schreiben.
sth77:
Hinweise zu dieser Herangehensweise hat mkl0815 ja bereis gegeben.
Ja aber wie geht's nun weiter? Geht das mit Excel oder brauche ich ein anderes Programm um so ein "Formular" zur Übertragung der Daten vorzunehmen?
Ach ja, die komplexe Darstellung vier Beiträge zuvor sollte nur darstellen wie ich mir das vorstelle. So komplex brauche ich das nicht. Mir geht es nur um die Auswahlmöglichkeit der Ventile und die Zeitangaben.
So, hier habe ich jetzt mal das "einfache" Programm zur Steuerung des Arduino:
// Programm zur Steuerung von 3 Ventilen und 2 Kameras
int VENTIL1 = 2; // Pin 2 = Ventil 1
int VENTIL2 = 3; // Pin 3 = Ventil 2
int VENTIL3 = 4; // Pin 4 = Ventil 3
int KAMERA1 = 8 // Pin 8 = Kamera 1 (Nikon D700)
int KAMERA2 = 9 // Pin 9 = Kamera 2 (Nikon D90)
int START = 13 // Pin 13 = Startknopf
void setup()
{
pinMode(VENTIL1, OUTPUT);
pinMode(VENTIL2, OUTPUT);
pinMode(VENTIL3, OUTPUT);
pinMode(KAMERA1, OUTPUT);
pinMode(KAMERA2, OUTPUT);
pinMode(START, INPUT);
}
void loop()
{
// hier muß der “START-Befehl” erfolgen
Delay3000; // Pause für drei Sekunden
// Steuerung Ventil 1
digitalWrite(VENTIL1, HIGH); // Ventil 1 öffnen
delay 1000; // Pause für eine Sekunde
digitalWrite(VENTIL1; LOW); // Ventil 1 schließen
delay 1000; // Pause für eine Sekunde
// Steuerung Ventil 2
digitalWrite(VENTIL2, HIGH); // Ventil 2 öffnen
delay 1000; // Pause für eine Sekunde
digitalWrite(VENTIL2; LOW); // Ventil 2 schließen
delay 1000; // Pause für eine Sekunde
// Steuerung Ventil 3
digitalWrite(VENTIL3, HIGH); // Ventil 3 öffnen
delay 1000; // Pause für eine Sekunde
digitalWrite(VENTIL3; LOW); // Ventil 3 schließen
delay 1000; // Pause für eine Sekunde
// Steuerung Kamera 1+2
digitalWrite(KAMERA1, HIGH); // Kamera 1 auslösen
digitalWrite(KAMERA2, HIGH); // Kamera 2 auslösen
}
Da habe ich ein paar Fragen zu:
Wie genau muss der "START"-Befehl aussehen, um das ganze durch Drücken des Buttons in Bewegung zu setzen?
Werden so wie im Programm angegeben beide Kameras auch gleichzeitig ausgelöst?
Was wenn die Kamera schon vor Öffnen des Ventil 3 auslösen soll? Den Abalauf dann komplett umzuschreiben währe sehr aufwendig.
Kann man das irgendwie geschickter lösen, dass nicht "starr" Ventil 1 dann 2 dann 3 dann Kamera 1+2 im "Programmablauf" stehen
sondern irgedwie mit Variablen o.ä. so das man einen "Zeitablauf" vorgeben kann?
Hmm... soweit ich das sehen kann liest du aber nur die Werte vom Arduino aus - ich will ja genau den anderen Weg gehen... aber die "zündende" Idee ist mir noch nicht gekommen
Wie genau muss der "START"-Befehl aussehen, um das ganze durch Drücken des Buttons in Bewegung zu setzen?
Schau dir mal die Beispiele "Button" und "Debounce" an. Da wird das beschrieben.
obiwan:
2. Werden so wie im Programm angegeben beide Kameras auch gleichzeitig ausgelöst?
ja. Mit wenigen µs Verzögerung.
obiwan:
Kann man das irgendwie geschickter lösen, dass nicht "starr" Ventil 1 dann 2 dann 3 dann Kamera 1+2 im "Programmablauf" stehen
sondern irgedwie mit Variablen o.ä. so das man einen "Zeitablauf" vorgeben kann?
Natürlich.
Schau' dir mal das Beispiel "BlinkWithoutDelay" an.
Da wird die Methode beschrieben.
Im Prinzip sollte das so gehen:
Bei Knopfdruck millis() merken.
startzeit = millis();
Dann für die einzelnen Aktionen abfragen:
if (startzeit + Ventil1zeit < millis()){
digitalWrite(VENTIL1, HIGH);
}
Wie gesagt, im Beispiel BlinkWithoutDelay ist der Ansatz beschrieben.
Die Zeiten mußt du dir alle als Variable definieren.
unsigned long Ventil1ein = 5000;
unsigned long Ventil1aus = 6000;
unsigned long Ventil2ein = 5500;
unsigned long Ventil2aus = 6700;
etc
.
Die Zeiten am besten immer absolut von Start an gerechnet, muß aber nicht sein, dann musst du halt addieren.