Share My Creation Successfully awarded washing machine control

My washing machine project worked 100%
I want to share with you
B4R:
#Region Project Attributes
    #AutoFlushLogs: True
    #CheckArrayBounds: True
    #StackBufferSize: 600
#End Region
'Ctrl+Click to open the C code folder: ide://run?File=%WINDIR%\System32\explorer.exe&Args=%PROJECT%\Objects\Src
Sub Process_Globals
    Public Serial1 As Serial
    Private wifi As ESP8266WiFi
    Private server As WiFiServerSocket
    Private astream As AsyncStreams
    Private Timer1 As Timer
    Private Timer2 As Timer
    Private Timer3 As Timer
    Private Timer4 As Timer
    Private ssd As AdafruitSSD1306
    Private ESPin As D1Pins
    Private Relays As Int = 9
    Private Registers(Relays) As Boolean
    Private DS,STCP,SHCP As Pin
    Private bc As ByteConverter
    Private ssd As AdafruitSSD1306
  

    Dim Sensor_Pres As Pin
    Dim Start As Pin
    Dim Set_Sensor As Pin
    Dim EncoderPinA As Pin
    Dim EncoderPinB As Pin
    Private LastStateTime As Long = 0'Enconder
    Private Counter As Int = 1 ' Enconder
    Private lastButtonState As Boolean = True ' O estado anterior do botão, assume que começa não pressionado.
    
End Sub


Private Sub AppStart
    Serial1.Initialize(115200)
    Log("AppStart")
    
    ' Inicializa os pinos como entrada  do enconder
    EncoderPinA.Initialize(13, EncoderPinA.MODE_INPUT_PULLUP)'Inicializa o botão 1 com pull-up interno
    EncoderPinB.Initialize(10, EncoderPinB.MODE_INPUT_PULLUP)'Inicializa o botão 2 com pull-up interno
    EncoderPinA.AddListener("EncoderPinA_Changed")'Enconder de 3 pinos
    
    Sensor_Pres.Initialize(ESPin.D4,Sensor_Pres.MODE_INPUT_PULLUP) 'Inicializa o botão 3 com pull-up interno
    Start.Initialize(ESPin.D3,Start.MODE_INPUT_PULLUP)             'Inicializa o botão 4 com pull-up interno
    
    Set_Sensor.Initialize(ESPin.D8,Set_Sensor.MODE_INPUT)   'Inicializa o botão 4 com pull-up interno
    Set_Sensor.AddListener("Liga_Desligar")'Ligar e Desligar Maquina
    
    Timer1.Initialize("Menu",500) 'Menu de função aguardar 500 ms
    'Timer1.Enabled = False
    Timer2.Initialize("Start_Ente",200)  'Botão  Start Enter
    Timer3.Initialize("Enchimento",300)  'Botão  Start  Valvola Enchimento
    Timer4.Initialize("Molho_Longo",400) 'Botão  Start  Valvola Molho
    
    DS.Initialize(ESPin.D0,DS.MODE_OUTPUT)      'HS Pin 11 Serial In     ESP D6 GPIO 12
    STCP.Initialize(ESPin.D5,STCP.MODE_OUTPUT)  'HS Pin 12 RCK           ESP D5 GPIO 14
    SHCP.Initialize(ESPin.D6,SHCP.MODE_OUTPUT)  'HS Pin 14 Serial Clock  ESP D7 GPIO 16
    'Clear Register Values
    ClearAllReg
    
    ssd.InitializeI2C(ESPin.D6,0x3C)            'initialise SSD1306 0x78
    ssd.ClearDisplay
    ssd.GFX.SetCursor(0, 0)
    ssd.GFX.ConfigureText(1, ssd.WHITE, False)
    ssd.GFX.DrawText("Inicializando...").DrawText(CRLF).DrawText(CRLF)
    ssd.Display
    
    'example of connecting to a local network
    If wifi.Connect2("Help-Info Central Tec 2.4G","Pp1c2s3m4") Then
        Log(wifi.LocalIp)
        ssd.ClearDisplay
        ssd.GFX.SetCursor(0,0)
        ssd.GFX.ConfigureText(1, ssd.WHITE, False)
        ssd.GFX.DrawText("Conectado Wifi").DrawText(CRLF).DrawText(CRLF)
        ssd.Display
        Delay(2000)
        ssd.ClearDisplay
        ssd.GFX.SetCursor(1,0)
        ssd.GFX.ConfigureText(1,ssd.WHITE,False)
        ssd.GFX.DrawText("IP: ")
        ssd.GFX.DrawText(wifi.LocalIp)
        
        ssd.GFX.SetCursor(2,18)'18
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText(" DESLIGADO")
        ssd.Display
        
        Registers(7) = True'Ligar o Led Internet
        WriteToReg
    Else
        Log("Falha ao se Conectatr.")
        Registers(7) = False'Desligar o Led  Internet
        WriteToReg
        Return
    End If
    
        Registers(5) = True'Ligar o Buzzer
        WriteToReg
        Delay(60)
        Registers(5) = False'Ligar o Buzzer
        WriteToReg
     server.Initialize(80, "server_NewConnection")
    server.Listen
    End Sub

Private Sub Server_NewConnection (NewSocket As WiFiSocket)
    Log("Cliente Conectado")
    astream.Initialize(NewSocket.Stream, "astream_NewData", "astream_Error")
End Sub

Sub astreamCom_Error
    Log("error")
End Sub

Sub Astream_NewData (Buffer() As Byte)
    Log(Buffer)
    Dim value As String = bc.StringFromBytes(Buffer)
    Select value
        Case "CMDA"
            Log("OI BONITÃO")
    End Select
    WriteToReg
End Sub

Sub AStream_Error
    Log("Desconectado")
    server.Socket.Close
    server.Listen
End Sub

' Método chamado quando o pino A do encoder muda de estado
Sub EncoderPinA_Changed (State As Boolean)
    Dim StateTime As Long = Millis()
    If StateTime - LastStateTime > 1000 Then 'Execute apenas se o intervalo de disparo da mudança de estado for maior que 50 ms, ajuste para se adequar
        If EncoderPinB.DigitalRead Then
            Counter = Counter - 1
        Else
            Counter = Counter + 1
        End If
        Counter = Min(7, Max(1, Counter)) 'Limit the counter between 0 and 4
        LastStateTime = StateTime 'Armazenar a hora do último estado
        Log("Position: ", Counter)
    End If
End Sub

Sub Menu'Ligar  O Menu  Timer 1
    
Select (Counter)
        Case 1
            Log("Menu 1")
            ssd.ClearDisplay
            ssd.GFX.SetCursor(2,0)
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("PROGRAMA:")
            ssd.GFX.SetCursor(2,18)'18
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("PESADO")
            ssd.Display
             If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer2.Enabled = True 'Botão  Start Enter
            End If
        Case 2
            Log("Menu 2")
            ssd.ClearDisplay
            ssd.GFX.SetCursor(2,0)
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("PROGRAMA:")
            ssd.GFX.SetCursor(2,18)'18
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("NORMAL")
            ssd.Display
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer2.Enabled = True 'Botão  Start Enter
            End If
        Case 3
            Log("Menu 3")
            ssd.ClearDisplay
            ssd.GFX.SetCursor(2,0)
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("PROGRAMA:")
            ssd.GFX.SetCursor(2,18)'18
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("RAPIDO")
            ssd.Display
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer2.Enabled = True 'Botão  Start Enter
            End If
        Case 4
            Log("Menu 4")
            ssd.ClearDisplay
            ssd.GFX.SetCursor(2,0)
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("PROGRAMA:")
            ssd.GFX.SetCursor(2,18)'18
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("DIA A DIA")
            ssd.Display
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer2.Enabled = True'Botão  Start Enter
            End If
        Case 5
            Log("Menu 5")
            ssd.ClearDisplay
            ssd.GFX.SetCursor(2,0)
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("PROGRAMA:")
            ssd.GFX.SetCursor(2,18)'18
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("ENCHAGUAR")
            ssd.Display
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer2.Enabled = True'Botão  Start Enter
                Timer3.Enabled = True'Start Enchimento
            End If
        Case 6
            Log("Menu 6")
            ssd.ClearDisplay
            ssd.GFX.SetCursor(2,0)
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("PROGRAMA:")
            ssd.GFX.SetCursor(2,18)'18
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("CENTRIFUGAR")
            ssd.Display
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer2.Enabled = True'Botão  Start Enter
                Centrifugar
            End If
        Case 7
            Log("Menu 7")
            ssd.ClearDisplay
            ssd.GFX.SetCursor(2,0)
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("PROGRAMA:")
            ssd.GFX.SetCursor(2,18)'18
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText("MOLHO LONGO")
            ssd.Display
            If Start.DigitalRead = False Then ' Botão pressionado (leitura é LOW devido ao pull-up)
                Timer2.Enabled = True 'Botão  Start Enter
                Timer4.Enabled = True 'Botao Start Molho Longo
            End If
    End Select
    End Sub
    
Sub Liga_Desligar (State As Boolean)
    Dim currentState As Boolean = Set_Sensor.DigitalRead
    If currentState = False And lastButtonState = True Then ' Detecta borda de descida (botão pressionado)
        Timer1.Enabled = Not(Timer1.Enabled) ' Alterna o estado do timer
        Log("Timer State: ", Timer1.Enabled)
        If Timer1.Enabled Then
            ssd.ClearDisplay
            ssd.GFX.SetCursor(2,18)
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText(" LIGADO")
            ssd.Display
            Registers(6) = True'Ligar o Led do Painel
            WriteToReg
            
            Registers(5) = True'Ligar o Buzzer
            WriteToReg
            Delay(60)
            Registers(5) = False'Ligar o Buzzer
            WriteToReg
        Else
            Registers(6) = False'Ligar o Led do Painel
            WriteToReg
            ssd.ClearDisplay
            ssd.GFX.SetCursor(2,18)
            ssd.GFX.ConfigureText(2,ssd.WHITE,False)
            ssd.GFX.DrawText(" DESLIGADO")
            ssd.Display
        End If
    End If
    lastButtonState = currentState ' Atualiza o estado anterior do botão
End Sub

Sub Start_Ente'Start Enter Timer 2
        Timer1.Enabled = False'Menu
        ssd.ClearDisplay
        ssd.GFX.SetCursor(2,0)
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("LAVANDO ")
        ssd.GFX.SetCursor(2,18)'18
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("PESADO ")
        ssd.Display
        Delay(300)
        Registers(4) = True 'Abrir Valvola de Água
        WriteToReg
        If Sensor_Pres.DigitalRead = False Then 'Esperando encher de agual
        Registers(4) = False'Fechar Valvola de água
        WriteToReg
        Lavagem_Normal 
        End If
End Sub
'
Private Sub Lavagem_Normal()
        ssd.ClearDisplay
        ssd.GFX.SetCursor(2,0)
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("LAVANDO ")
        ssd.GFX.SetCursor(2,18)'18
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("AGUARDE...")
        ssd.Display
            
        For i = 0 To 20'20 PASSOS
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(2) = True 'Ligar Motor esquerdo
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(2) = False'Desligar Motor esquerdo
        WriteToReg
        Delay (200) 'Dele de 2 segundo
        Next
        
        Delay(10000)'PAUSA DE 1 SEGUNDO
                
        For i = 0 To 20 '20 PASSOS
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay(200) 'Delei de 2 Mile Segundos
        Registers(2) = True 'Ligar Motor esquerdo
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(2) = False'Desligar Motor esquerdo
        WriteToReg
        Delay (200) 'Dele de 2 segundo
        Next
        Dreno_1
End Sub

Private Sub Dreno_1 () 'DRENANDO A ÁGUA
        ssd.ClearDisplay
        ssd.GFX.SetCursor(2,0)
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("DRENANDO 1")
        ssd.GFX.SetCursor(2,18)'18
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("AGUARDE...")
        ssd.Display
        
        For i = 0 To 60 'Aguardar 1 Minito
        Registers(3) = True 'Ligar Motor do dreno Esperar água baixar
        WriteToReg
        Delay(600)
        Next
            
        For i = 0 To 60'Aguardar 1 Minito
        Registers(1) = True 'Ligar Motor esquerdo para exaguar
        WriteToReg
        Delay(600)
        Next
        
        Registers(3) = False 'Desligar Motor do dreno Esperar água baixar
        WriteToReg
        Registers(1) = False 'Desligar Motor esquerdo para exaguar
        WriteToReg
        Timer3.Enabled = True'Start Enchimento
End Sub

Private Sub Enchimento() ' Enchendo de água
        Timer1.Enabled = False 'Desligar Start Enter
        Timer2.Enabled = False 'Desligar Enchimento
        ssd.ClearDisplay
        ssd.GFX.SetCursor(2,0)
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("ENCHENDO ")
        ssd.GFX.SetCursor(2,18)'18
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("AGUARDE...")
        ssd.Display
        Delay(300)
        Registers(4) = True 'Abrir Valvola de Água
        WriteToReg
        If Sensor_Pres.DigitalRead = False Then 'Esperando encher de agual
        Registers(4) = False 'Abrir Valvola de Água
        WriteToReg
        ENXAGUAR
        End If
End Sub

Private Sub ENXAGUAR
        ssd.ClearDisplay
        ssd.GFX.SetCursor(2,0)
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("ENCHAGUAR")
        ssd.GFX.SetCursor(2,18)'18
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("AGUARDE...")
        ssd.Display
            
        For i = 0 To 20'20 PASSOS
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(2) = True 'Ligar Motor esquerdo
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(2) = False'Desligar Motor esquerdo
        WriteToReg
        Delay (200) 'Dele de 2 segundo
        Next
        
        Delay(10000)  'PAUSA DE 1 SEGUNDO
                
        For i = 0 To 20'20 PASSOS
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay(200) 'Delei de 2 Mile Segundos
        Registers(2) = True 'Ligar Motor esquerdo
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(2) = False'Desligar Motor esquerdo
        WriteToReg
        Delay (200) 'Dele de 2 segundo
        Next
        
        Registers(8)= True ' Abrir Valvola do Amaciante
        WriteToReg
        Registers(3) = False 'Desligar Motor do dreno Esperar água baixar
        WriteToReg
        Registers(1) = False 'Desligar Motor esquerdo para exaguar
        WriteToReg
        Dreno_2
End Sub

Private Sub Dreno_2
        ssd.ClearDisplay
        ssd.GFX.SetCursor(2,0)
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("DRENANDO 2")
        ssd.GFX.SetCursor(2,18)'18
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("AGUARDE...")
        ssd.Display
        
        For i = 0 To 60
        Registers(3) = True 'Ligar Motor do dreno Esperar água baixar
        WriteToReg
        Delay(600)
        Next
            
        For i = 0 To 60
        Registers(1) = True 'Ligar Motor esquerdo para exaguar
        WriteToReg
        Delay(600)
        Next
            
        Registers(8) = False ' Desligar Valvola do Amaciante
        WriteToReg
        Registers(3) = False 'Ligar Motor do dreno
        WriteToReg
        Registers(1) = False 'Ligar Motor esquerdo
        WriteToReg
        Centrifugar
End Sub

Private Sub Centrifugar()
        ssd.ClearDisplay
        ssd.GFX.SetCursor(2,0)
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("CENTRIGUGAR")
        ssd.GFX.SetCursor(2,18)'18
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("AGUARDE...")
        ssd.Display
        
        For i = 0 To 60'60 PASSOS
        Registers(3) = True 'Ligar Motor do dreno Esperar água baixar
        WriteToReg
        Delay(600)
        Next
                
        For i = 0 To 60'60 PASSOS
        Registers(1) = True 'Ligar Motor esquerdo para exaguar
        WriteToReg
        Delay(600)
        Next
        
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Registers(3) = False 'Desligar Motor dreno
        WriteToReg
        Registers(3) = False 'Desligar Motor esquerdo
        WriteToReg
        
        ssd.ClearDisplay
        ssd.GFX.SetCursor(2,0)
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("TERMINDAO")
        ssd.GFX.SetCursor(2,18)'18
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("A TE LOGO..")
        ssd.Display
            
        For  I = 0 To 5 'LIGAR O BUZZER DEPOIS DE TERMINA A LAVANGEM
        Registers(5) = True'Ligar o Buzzer
        WriteToReg
        Delay(100)
        Registers(5) = False'Ligar o Buzzer
        WriteToReg
        Delay(100)
        Next
        
        Delay(6000)  'Aguandar 1 minito
        Timer1.Enabled = True  'Voltar para o menu
        Timer2.Enabled = False 'Desligar Start Enter
        Timer3.Enabled = False 'Desligar Enchimento
        Timer4.Enabled = False 'Desligar Dreno
End Sub

Sub Molho_Longo' Botão  Start  Valvola Molho
        Timer1.Enabled = False 'Desligar Start Enter
        Timer2.Enabled = False 'Desligar Enchimento
        Timer3.Enabled = False 'Desligar Dreno
        ssd.ClearDisplay
        ssd.GFX.SetCursor(2,0)
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("MOLHO LONGO")
        ssd.GFX.SetCursor(2,18)'18
        ssd.GFX.ConfigureText(2,ssd.WHITE,False)
        ssd.GFX.DrawText("AGUARDE...")
        ssd.Display
        Delay(300)
        Registers(4) = True 'Abrir Valvola de Água
        WriteToReg
        If Sensor_Pres.DigitalRead = False Then 'Esperando encher de agual
        Registers(4) = False 'Abrir Valvola de Água
        WriteToReg
        MOLHO
        End If
End Sub

Private Sub MOLHO()
    For i = 0 To 20'20 PASSOS
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(2) = True 'Ligar Motor esquerdo
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(2) = False'Desligar Motor esquerdo
        WriteToReg
        Delay (200) 'Dele de 2 segundo
    Next
        
    Delay(10000)  'PAUSA DE 1 SEGUNDO
                
    For i = 0 To 20'20 PASSOS
        Registers(1) = True 'Ligar Motor direito
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(1) = False 'Desligar Motor direito
        WriteToReg
        Delay(200) 'Delei de 2 Mile Segundos
        Registers(2) = True 'Ligar Motor esquerdo
        WriteToReg
        Delay (200) 'Delei de 2 Mile Segundos
        Registers(2) = False'Desligar Motor esquerdo
        WriteToReg
        Delay (200) 'Dele de 2 segundo
    Next
    
    For I = 0 To 60
        Delay(600)
        Delay(600)
    Next
    Timer4.Enabled = False 'Botão   Start  Valvola Molho
    Lavagem_Normal
End Sub

'Write To Registers
Private Sub WriteToReg()
    STCP.DigitalWrite(False)
    Dim i As Int = 0
    Do While i <= Relays - 1
        SHCP.DigitalWrite(False)
        DS.DigitalWrite(Registers(i))
        SHCP.DigitalWrite(True)
        i = i + 1
    Loop
    STCP.DigitalWrite(True)
End Sub

'Clear All Registers
Private Sub ClearAllReg()
    Dim i As Int = Relays - 1
    Do While i >= 0
        Registers(i) = False 'True = NO
        i = i - 1
        WriteToReg
    Loop
End Sub
 

Attachments

  • 4.JPG
    4.JPG
    422.5 KB · Views: 133
  • 20240315_140932.jpg
    20240315_140932.jpg
    90.2 KB · Views: 41
  • 20240308_071231.jpg
    20240308_071231.jpg
    105.1 KB · Views: 45
  • 20240309_072708.jpg
    20240309_072708.jpg
    127.3 KB · Views: 42
  • 20240316_172138.jpg
    20240316_172138.jpg
    88.6 KB · Views: 47
  • 20240321_173356.jpg
    20240321_173356.jpg
    96.4 KB · Views: 41
Thanks for sharing a super home project. Lot of fun and leering and faulty things in useful things.
Maybe a stupid question do or not Delay blocks/stops execution of program until time is over?
 

embedded

Active Member
Licensed User
Longtime User
Thanks for sharing.....Do you face any trouble with BT138...is it working for long time....I experience that if AC power supply having fluctuation ...it destroy BT138 Triac. If possible kind share the circuit diagram.
 
Top