Hey all,

I'm wanting to create a timer to start/stop an event at a selected time.

I have most of the code already written but I'm having trouble with the above.

My timer has 8 individual channels to control 8 devices (lights, sprinklers, etc.).

This is my form to give you a better idea:

http://i81.photobucket.com/albums/j2...face/Timer.png

I'm using a timer tick but I'm stuck. My code has taken an ugly turn as I'm using WAY too many If, then statements as you can see.

Code:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Me.Clock.Text = TimeOfDay
        Me.Date1.Text = Date.Today.ToString("dddd")

        If cmb1day.Text = "Never" Then
            Ch1OFF.Enabled = True
            GoTo skip1
        Else
            If btnConnect.Enabled = True Then
                Exit Sub
            Else
                Ch1OFF.Enabled = False
                If cmb1day.Text = "Everyday" Then
                    Dim TimON1 As Date
                    Dim TimOFF1 As Date
                    Dim AMPMON1 As String
                    Dim AMPMOFF1 As String
                    If ON1AM.Checked = True Then
                        AMPMON1 = "AM"
                    Else
                        AMPMON1 = "PM"
                    End If
                    If OFF1AM.Checked = True Then
                        AMPMOFF1 = "AM"
                    Else
                        AMPMOFF1 = "PM"
                    End If
                    If ON1AM.Checked = True AndAlso OFF1AM.Checked = True Then
                        If cmbH1ON.Text > cmbH1OFF.Text Then
                            If TimeOfDay.ToString.Contains("PM") Then
                                TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = ("11:59:59 PM")
                            Else
                                TimON1 = ("12:00:00 AM") : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                            End If
                        Else
                            TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                        End If
                    ElseIf ON1AM.Checked = True AndAlso OFF1PM.Checked = True Then
                        TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                    ElseIf ON1PM.Checked = True AndAlso OFF1PM.Checked = True Then
                        If cmbH1ON.Text > cmbH1OFF.Text Then
                            If TimeOfDay.ToString.Contains("PM") Then
                                TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = ("11:59:59 PM")
                            Else
                                TimON1 = ("12:00:00 AM") : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                            End If
                        Else
                            TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                        End If
                        End If
                        If ON1PM.Checked = True AndAlso OFF1AM.Checked = True AndAlso TimeOfDay.ToString.Contains("PM") Then
                            TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = ("11:59:59 PM")
                        ElseIf ON1PM.Checked = True AndAlso OFF1AM.Checked = True AndAlso TimeOfDay.ToString.Contains("AM") Then
                            TimON1 = ("12:00:00 AM") : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                        End If
                        If TimON1 < Me.Clock.Text AndAlso TimOFF1 > Me.Clock.Text Then
                            SerialPort.Write("1")
                            Ch1OFF.Text = "Ch 1 On"
                        ElseIf TimOFF1 <> Me.Clock.Text Then
                            SerialPort.Write("Q")
                            Ch1OFF.Text = "Ch 1 Off"
                        End If
                End If

                If cmb1day.Text = "Sat and Sun" Then
                    Dim TimON1 As Date
                    Dim TimOFF1 As Date
                    Dim AMPMON1 As String
                    Dim AMPMOFF1 As String
                    If ON1AM.Checked = True Then
                        AMPMON1 = "AM"
                    Else
                        AMPMON1 = "PM"
                    End If
                    If OFF1AM.Checked = True Then
                        AMPMOFF1 = "AM"
                    Else
                        AMPMOFF1 = "PM"
                    End If
                    If ON1AM.Checked = True AndAlso OFF1AM.Checked = True AndAlso TimeOfDay.ToString.Contains("AM") Then
                        If Date.Now.DayOfWeek.ToString = "Saturday" OrElse Date.Now.DayOfWeek.ToString = "Sunday" Then
                            If cmbH1ON.Text > cmbH1OFF.Text Then
                                If TimeOfDay.ToString.Contains("PM") Then
                                    TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = ("11:59:59 PM")
                                Else
                                    TimON1 = ("12:00:00 AM") : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                                End If
                            Else
                                TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                            End If
                        End If
                    ElseIf ON1AM.Checked = True AndAlso OFF1PM.Checked = True Then
                        If Date.Now.DayOfWeek.ToString = "Saturday" OrElse Date.Now.DayOfWeek.ToString = "Sunday" Then
                            TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                        End If
                    ElseIf ON1PM.Checked = True AndAlso OFF1PM.Checked = True Then
                        If Date.Now.DayOfWeek.ToString = "Saturday" OrElse Date.Now.DayOfWeek.ToString = "Sunday" Then
                            If cmbH1ON.Text > cmbH1OFF.Text Then
                                If TimeOfDay.ToString.Contains("PM") Then
                                    TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = ("11:59:59 PM")
                                Else
                                    TimON1 = ("12:00:00 AM") : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                                End If
                            Else
                                TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                            End If
                        End If
                    End If
                    If ON1PM.Checked = True AndAlso OFF1AM.Checked = True AndAlso TimeOfDay.ToString.Contains("PM") Then
                        If Date.Now.DayOfWeek.ToString = "Saturday" OrElse Date.Now.DayOfWeek.ToString = "Sunday" Then
                            TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = TimeValue("11:59:59 PM")
                        End If
                    End If
                    If ON1PM.Checked = True AndAlso OFF1AM.Checked = True AndAlso TimeOfDay.ToString.Contains("AM") Then
                        If Date.Now.DayOfWeek.ToString = "Sunday" OrElse Date.Now.DayOfWeek.ToString = "Monday" Then
                            TimON1 = ("12:00:00 AM") : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                        End If
                    End If
                    If TimON1 < Me.Clock.Text AndAlso TimOFF1 > Me.Clock.Text Then
                        SerialPort.Write("1")
                        Ch1OFF.Text = "Ch 1 On"
                    ElseIf TimOFF1 <> Me.Clock.Text Then
                        SerialPort.Write("Q")
                        Ch1OFF.Text = "Ch 1 Off"
                    End If
                End If

                If cmb1day.Text = "M-F" Then
                    Dim TimON1 As Date
                    Dim TimOFF1 As Date
                    Dim AMPMON1 As String
                    Dim AMPMOFF1 As String
                    If ON1AM.Checked = True Then
                        AMPMON1 = "AM"
                    Else
                        AMPMON1 = "PM"
                    End If
                    If OFF1AM.Checked = True Then
                        AMPMOFF1 = "AM"
                    Else
                        AMPMOFF1 = "PM"
                    End If
                    If ON1AM.Checked = True AndAlso OFF1AM.Checked = True Then
                        If Date.Now.DayOfWeek.ToString = "Monday" OrElse Date.Now.DayOfWeek.ToString = "Tuesday" OrElse Date.Now.DayOfWeek.ToString = "Wednesday" OrElse Date.Now.DayOfWeek.ToString = "Thursday" OrElse Date.Now.DayOfWeek.ToString = "Friday" AndAlso TimeOfDay.ToString.Contains("AM") Then
                            If cmbH1ON.Text > cmbH1OFF.Text Then
                                If TimeOfDay.ToString.Contains("PM") Then
                                    TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = ("11:59:59 PM")
                                Else
                                    TimON1 = ("12:00:00 AM") : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                                End If
                            Else
                                TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                            End If
                        End If
                    ElseIf ON1AM.Checked = True AndAlso OFF1PM.Checked = True Then
                        If Date.Now.DayOfWeek.ToString = "Monday" OrElse Date.Now.DayOfWeek.ToString = "Tuesday" OrElse Date.Now.DayOfWeek.ToString = "Wednesday" OrElse Date.Now.DayOfWeek.ToString = "Thursday" OrElse Date.Now.DayOfWeek.ToString = "Friday" Then
                            TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                        End If
                    ElseIf ON1PM.Checked = True AndAlso OFF1PM.Checked = True Then
                        If Date.Now.DayOfWeek.ToString = "Monday" OrElse Date.Now.DayOfWeek.ToString = "Tuesday" OrElse Date.Now.DayOfWeek.ToString = "Wednesday" OrElse Date.Now.DayOfWeek.ToString = "Thursday" OrElse Date.Now.DayOfWeek.ToString = "Friday" Then
                            If cmbH1ON.Text > cmbH1OFF.Text Then
                                If TimeOfDay.ToString.Contains("PM") Then
                                    TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = ("11:59:59 PM")
                                Else
                                    TimON1 = ("12:00:00 AM") : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                                End If
                            Else
                                TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                            End If
                        End If
                    End If
                    If ON1PM.Checked = True AndAlso OFF1AM.Checked = True AndAlso TimeOfDay.ToString.Contains("PM") Then
                        If Date.Now.DayOfWeek.ToString = "Monday" OrElse Date.Now.DayOfWeek.ToString = "Tuesday" OrElse Date.Now.DayOfWeek.ToString = "Wednesday" OrElse Date.Now.DayOfWeek.ToString = "Thursday" OrElse Date.Now.DayOfWeek.ToString = "Friday" Then
                            TimON1 = TimeValue(cmbH1ON.Text & ":" & cmbM1ON.Text & ":00" & AMPMON1) : TimOFF1 = ("11:59:59 PM")
                        End If
                    End If
                    If ON1PM.Checked = True AndAlso OFF1AM.Checked = True AndAlso TimeOfDay.ToString.Contains("AM") Then
                        If Date.Now.DayOfWeek.ToString = "Tuesday" OrElse Date.Now.DayOfWeek.ToString = "Wednesday" OrElse Date.Now.DayOfWeek.ToString = "Thursday" OrElse Date.Now.DayOfWeek.ToString = "Friday" OrElse Date.Now.DayOfWeek.ToString = "Saturday" Then
                            TimON1 = ("12:00:00 AM") : TimOFF1 = TimeValue(cmbH1OFF.Text & ":" & cmbM1OFF.Text & ":00" & AMPMOFF1)
                        End If
                    End If
                    If TimON1 < Me.Clock.Text AndAlso TimOFF1 > Me.Clock.Text Then
                        SerialPort.Write("1")
                        Ch1OFF.Text = "Ch 1 On"
                    ElseIf TimOFF1 <> Me.Clock.Text Then
                        SerialPort.Write("Q")
                        Ch1OFF.Text = "Ch 1 Off"
                    End If
                End If

' the rest of the days Monday - Sunday something like the above

skip1:

' Repeated code for each channel

skip2:

.....

skip8:
Can someone help me simplify and keep the rest of my code able to cope?