Klar poste ich den Code. Musste eben nur schnell weg.
#define NUMBER_OF_FIELDS 5
int values[NUMBER_OF_FIELDS];
byte fieldIndex;
void setup()
{
Serial.begin(9600);
//Serial.println("Anfang");
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
}
void loop()
{
Serial.println("verbunden");
if ( Serial.available())
{
char ch = Serial.read();
Serial.print(ch, HEX);
Serial.print('\t');
Serial.println(fieldIndex);
if (ch >= '0' && ch <= '9') // ASCII-Zeichen zwischen 0 und 9?
{
if (fieldIndex < NUMBER_OF_FIELDS) {
values[fieldIndex] = (values[fieldIndex] * 10) + (ch - '0');
}
}
else if (ch == ',')
{
fieldIndex++;
}
else if (ch == '\n')
{
{
delay (values[0]); // Verzögerung vor Öffnung 1
digitalWrite (2, HIGH); // Ventil_1 auf
delay (values[2]); // offen
digitalWrite(2, LOW); // zu
delay (values[1]); // warte
digitalWrite (2, HIGH); // auf
delay (values[2]); // offen
digitalWrite(2, LOW); // zu
// Kamera verzögert auslösen
delay (values[4]);
digitalWrite(3, HIGH);
delay (50);
digitalWrite(3, LOW);
}
for (int i = 0; i < min(NUMBER_OF_FIELDS, fieldIndex + 1); i++)
{
Serial.print(values[i], DEC);
Serial.print(" ");
values[i] = 0; // loeschen
}
fieldIndex = 0; // für Neustart
Serial.println();
}
}
}
Der Code öffnet wie kommentiert ein Ventil 2-mal kurz und löst dann eine Kamera aus.
[Leider kann dieser Code ein zweites, drittes, ... Ventil nicht parallel zum Ventil 1 ansteuern, da fehlen mir, wie oben von einem User zu lesen ist, die Grundlagen. Dennoch habe ich es meinen bescheidenen Kenntnissen geschaft, mit VB, was ich vor drei Tagen auch noch nocht kannte, den Arduino per GUI anzusteuern!
Auch den teile ich gerne ...
Public Class Form1
Dim t As Integer 'delta +/- für Tropfengröße = Öffnungsdauer Ventil
Dim delta As Integer
Dim values As String
Dim values_display As String
Dim a As Integer
'Private WithEvents objSerials As New System.IO.Ports.SerialPort("COM3")
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
txt_delta.Text = 5
t = 2
txt_v1_start_T1.Text = 1000
txt_v1_start_T2.Text = 120
txt_v1_groesseT.Text = 60
txt_verz_cam.Text = 500
Dim iI As Integer
'For i = 0 To My.Computer.Ports.SerialPortNames.Count - 1
' ListBox1.Items.Add(My.Computer.Ports.SerialPortNames(i))
'Next
For iI = 0 To My.Computer.Ports.SerialPortNames.Count - 1
ComboBox1.Items.Add(My.Computer.Ports.SerialPortNames(iI))
Next
ComboBox1.SelectedIndex = 3
connect.Text = "getrennt"
connect.ForeColor = Color.Red
End Sub
' VENTIL 1 - Verzögerung für ÖFFNUNG 1 up/down
Private Sub btn_v1_verz_T1_up_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_v1_verz_T1_up.Click
txt_v1_start_T1.Text = txt_v1_start_T1.Text + delta
End Sub
Private Sub btn_v1_verz_T1_down_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_v1_verz_T1_down.Click
'delta = txt_delta.Text
txt_v1_start_T1.Text = txt_v1_start_T1.Text - delta
'i = i - delta
End Sub
' VENTIL 1 - Verzögerung für ÖFFNUNG 2 up/down
Private Sub btn_v1_verz_T2_up_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_v1_verz_T2_up.Click
txt_v1_start_T2.Text = txt_v1_start_T2.Text + delta
End Sub
Private Sub btn_v1_verz_T2_down_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_v1_verz_T2_down.Click
txt_v1_start_T2.Text = txt_v1_start_T2.Text - delta
End Sub
' ---------------------------------------------
' delta für ms
Private Sub txt_delta_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_delta.TextChanged
delta = txt_delta.Text
End Sub
' VENTIL 1 - TROPFENGRÖSSE
Private Sub btn_v1_tropfengroesse_up_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_v1_tropfengroesse_up.Click
txt_v1_groesseT.Text = txt_v1_groesseT.Text + t
End Sub
Private Sub btn_v1_tropfengroesse_down_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_v1_tropfengroesse_down.Click
txt_v1_groesseT.Text = txt_v1_groesseT.Text - t
End Sub
' ----------------------------------------------
Private Sub btn_verz_cam_up_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_verz_cam_up.Click
txt_verz_cam.Text = txt_verz_cam.Text + delta
End Sub
Private Sub btn_verz_cam_down_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_verz_cam_down.Click
txt_verz_cam.Text = txt_verz_cam.Text - delta
End Sub
Private Sub werte_senden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles werte_senden.Click
values_display = txt_v1_start_T1.Text & "," & txt_v1_start_T2.Text & "," & txt_v1_groesseT.Text & "," & txt_verz_cam.Text
values = values_display & "," & vbCrLf
ausgabe_values.Text = values_display
'System.Threading.Thread.Sleep(100)
Console.WriteLine("We're going to divide 10 by 0 and see what happens...")
If SerialPort1.IsOpen = True Then
SerialPort1.Write(values)
SerialPort1.DiscardInBuffer() ' Zum löschen des Eingangspuffers
SerialPort1.DiscardOutBuffer() ' Zum löschen des Ausgangspuffers
'System.Threading.Thread.Sleep(100)
'SerialPort1.Close()
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles serial_connect.Click
If SerialPort1.IsOpen = False Then
With SerialPort1
'.PortName = ComboBox1.SelectedItem.ToString()
.PortName = "COM3"
.BaudRate = 9600
.DataBits = 8
.Parity = IO.Ports.Parity.None
.StopBits = IO.Ports.StopBits.One
.Handshake = IO.Ports.Handshake.None
End With
Try
SerialPort1.Open()
'connect.Text = "verbunden"
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End If
End Sub
Private Sub serial_disconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles serial_disconnect.Click, ComboBox1.Click
If SerialPort1.IsOpen = True Then
SerialPort1.Close()
End If
If SerialPort1.IsOpen = False Then
connect.Text = "getrennt"
connect.ForeColor = Color.Red
End If
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Me.Invoke(Sub() ReceivedText(SerialPort1.ReadExisting()))
End Sub
Private Sub ReceivedText(ByVal [text] As String)
connect.Text = ("verbunden mit Arduino")
connect.ForeColor = Color.Green
End Sub
Private Sub btn_start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
If SerialPort1.IsOpen = True Then
SerialPort1.Write("A")
End If
End Sub
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'If MsgBox("schließen ja nein", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
Me.Close()
'Else
'End If
End Sub
End Class
]