IR visitor counter (serial)

Visitor Counter with Visual Basic and Arduino USB (serial port) communication. 

This project is under editing!

Létszám (in Hungarian) = Visitor


First the simple version is here. 
Only 1 corridor and bidirection visitor counter:
Arduino code:

int visitor = 0;
int situation = 0;
int counter = 0;
int beginning = 0;
int valami = 0;

void setup() {
  pinMode(13, OUTPUT);
  //visitor's lighthouse
  pinMode(11, INPUT);
  digitalWrite(11, HIGH);
  pinMode(12, INPUT);
  digitalWrite(12, HIGH);
// sensors.. IR LED (radiate is a separate lamp (red LED)
  Serial.begin(9600);
}


void loop() {

valami = valami + 1;

if (digitalRead(11) == HIGH && digitalRead(12) == HIGH){
situation = 1;
}


if (digitalRead(11) == LOW && digitalRead(12) == HIGH){
situation = 2;
}


if (digitalRead(11) == HIGH && digitalRead(12) == LOW){
situation = 3;
}

if (digitalRead(11) == LOW && digitalRead(12) == LOW){
situation = 4;
}

if(situation != beginning){

  if (situation == 1){
    counter = counter + 1;
  }

  if (situation == 2 && counter == 1){
    visitor = visitor + 1;
    counter = 0;
  }

 if (situation == 3 && counter == 1){
   visitor = visitor - 1;
   counter = 0;
  }

   if (situation == 4){
   counter = 0;
  }

}

if (situation != 4) {
digitalWrite(13, LOW);
} else {
digitalWrite(13, HIGH);
}

if (valami == 50) {
Serial.print(visitor);
valami = 0;
}

beginning = situation;
delay(20);
}


Visual basic code:



Imports System
Imports System.IO.Ports



Public Class Form1

    Dim comPORT As String
    Dim receivedData As String = ""



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = False
        comPORT = ""
        For Each sp As String In My.Computer.Ports.SerialPortNames
            comPort_ComboBox.Items.Add(sp)
        Next
    End Sub


    Private Sub comPort_ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comPort_ComboBox.SelectedIndexChanged
        If (comPort_ComboBox.SelectedItem <> "") Then
            comPORT = comPort_ComboBox.SelectedItem
        End If
    End Sub


    Private Sub connect_BTN_Click(sender As Object, e As EventArgs) Handles connect_BTN.Click
        If (connect_BTN.Text = "Start") Then
            If (comPORT <> "") Then
                SerialPort1.Close()
                SerialPort1.PortName = comPORT
                SerialPort1.BaudRate = 9600
                SerialPort1.DataBits = 8
                SerialPort1.Parity = Parity.None
                SerialPort1.StopBits = StopBits.One
                SerialPort1.Handshake = Handshake.None
                SerialPort1.Encoding = System.Text.Encoding.Default 'very important!
                SerialPort1.ReadTimeout = 10000

                SerialPort1.Open()
                connect_BTN.Text = "Stop"
                Timer1.Enabled = True

            Else
                MsgBox("Select a COM port first")
            End If
        Else
            SerialPort1.Close()
            connect_BTN.Text = "Start"
            Timer1.Enabled = False

        End If


    End Sub


    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        receivedData = ReceiveSerialData()
        Label1.Text = receivedData
    End Sub


    Function ReceiveSerialData() As String
        Dim Incoming As String
        Try
            Incoming = SerialPort1.ReadExisting()
            If Incoming Is Nothing Then
                Return "nothing" & vbCrLf
            Else
                Return Incoming
            End If
        Catch ex As TimeoutException
            Return "Error: Serial Port read timed out."
        End Try

    End Function

-----------------
Port setup:

Name: Your port (example this my: COM4)
Baudrate: 9600
Databits: 8
DiscardNull False
DtrEnable True
GenerateMember True
HandShake None
Modifiers Friend
Parity None
Parity Replace 63
PortnameReadPufferSise 4096
ReadTimeOut -1
ReceivedBytesThr 1
Rts Enable: True
StopBits One
WritePefferSise 2048
WriteTimeOut -1

I make this program my softver:
http://www.martyncurrey.com/arduino-and-visual-basic-part-1-receiving-data-from-the-arduino/

Radieate LED lamp: 
https://www.arwill.hu/termekek/ledek-fenyforrasok/ledek/5mm/os5rpm-5201e-5mm-piros-led-188934/
-------------------------------------------------------------------
Összetettebb projekt:

A feladat lényege, részletek nélkül:
Vegyünk egy kollégiumot, ahol a rendezvényen, a katasztrófavédelmi létszámkorlátokat kell betartatni, az egyéb feladatok mellett. A rendezvényen két fő csoport van,  a kollégisták, akik ott laknak, és a külsős látogatók. A csoportokat külön számoljuk, most nem térünk ki rá miért, de megvan az oka, és külön nyilván kell tartani a külsős, a kolis rendezőket, valamint a biztonságiakat is, és számlálni kell a csoportokat, betartatni, hogy ne lépjék túl a katasztrófavédelmi korlátokat. Folyamatosan naplóba rögzíteni külön a két főcsoport, a külsősök, és a kollégisták mozgását, létszámának alakulását, a rendezvény megkezdése előtt, az első félórában, majd félóránként, és a rendezvény végén is, különböző szinten összesíteni az adatokat.

Szimulált működés közben.


A vendégszámláló fizikai felépítése, és működése:
1 db. vagy 2 db pózna. 

Ezzel két kaput vagy ajtónyílást alakítunk ki, amelyek fel vannak táblázva (feliratozva). Az egyik kapunyílás a külsős vendégek számára, a másik a kollégisták számára van fenntartva. A két kapunyílásokon akár egyszerre is ki-be lehet közlekedni, a rendszer érzékeli az irányt, és aszerint számol, de a kapunyílások széllességét úgy alakítjuk ki, hogy egyen egyszerre, csak egy-egy ember tudjon áthaladni.  Az őrök egyik feladata az, hogy a kollégista kaput csak a DO kártya felmutatásával, és  karszalaggal használhatják. A karszalag azért szükséges, mert ha a  kollégisták bemennek kolisként, majd kimennek külsősként, akkor  igaz, hogy a kolisok kárára, de a kolisokat ki tudják cserélni külsősökkel, és evvel a külsősök katasztrófavédelmi létszámát át tudják léptetni.
Ugyanakkor a rendezvény végén, amikor a vendégeket kiterelik az őrök, már minkét kapunyíláson szabadon távozhatnak a résztvevők. Ekkor, ha az egyik  kapunyílás, ha a csoportját kiszámolja, a másik csoporton számlál kifelé tovább.
A rendszer nagymértékben segíti az őrök munkáját, de nem helyettesíti őket.

A rendszer, illetve a program használata:
A rendezvény kezdete előtt felállítjuk a rendszert. Felállítjuk a póznát, a világító LED-eket ráállítjuk az érzékelőkre. A vendégszámláló eszközt, amely egy doboz, és amelyből a LED-ek vezetékei, és az USB csatlakozó ágazik ki, csatlakoztatjuk a számítógéphez. Ekkor az érzékelők egy-egy sárga jelző LED-jei világítani fognak, jelezve, hogy az infrafényt tartalmazó LED-adók fényei megfelelően rá lettek állítva az érzékelőkre. Ha nem világít valamelyik, akkor pontosabban rá kell állítani. Ezek a sárga LED-ek csak akkor alszanak ki egy pillanatra, amikor az adott kapunyíláson áthalad valaki, és megszakítja a fény útját a fényt adó, és az érzékelő között. A világításuk jelzi a vendégnek, hogy egy vendégszámláló rendszeren kell áthaladnia, az őrnek, hogy a rendszer rendben működik.
Ha a sárga  LED-ek világítanak, akkor megnyithatjuk a számítógépen a vendégszámláló szoftvert.
Ekkor semmi mást nem tudunk a programba csinálni, mint bevinni a kezdő adatokat:
A rendezvény megnevezését,
A külsős rendezők létszámát,
A kolis rendezők létszámát,
A biztiőrök létszámát,
A külsős létszámkorlátot,
A kolisok létszámkorlátját,
Ha végeztünk, akkor az adatok bevitele gombra kell kattintani.
Ekkor a gomb eltűnik, az adatbeviteli mezők is eltűnnek, illetve a rendezvény megnevezése beviteli mező inaktívvá válik. Az adatokon így már nem lehet változtatni, de láthatóak maradnak. Az USB kiválasztása gomb, amin beállíthatjuk melyik USB porthoz csatlakoztatjuk az eszközt, és a Start gomb aktívvá válik. Ha a rendezvényt fizikailag megnyitjuk, akkor megnyomjuk a Start gombot a szoftverbe is. A gomb felirata ekkor Stop-ra változik, és a számlálás megkezdődik. A program létrehoz a "C" meghajtón, a naplo mappában egy kollégista, és egy külsős txt jegyzettömböt. Ha már vannak ilyenek az előző rendezvényről, akkor kitörli a tartalmukat, és újra fogja írni. Ezekben a dokumentumokban van rögzítve a résztvevők mozgása, a kezdő, és a részadatok összesítése. A rendezvény végén meg kell nyomni a Stop gombot, ekkor a dokumentumokban rögzítésre kerülnek a végső összesítések is. A program ekkor kikapcsolható a jobb felső sarokban lévő piros x gombbal. A dokumentumokat a naplo mappában meg lehet nyitni, és ki lehet nyomtatni. A kulsos.txt dokumentum végén lévő összesítést bele lehet másolni úgy, ahogy van az elektronikus őrnaplóba is. A rendezvény közben, ha valamelyik csoport létszáma átlépi a korlát-15 fő létszámot, akkor a csoport adott figyelmeztető piros LED-je kigyullad, jelezve az őröknek, hogy  létszámstop közeli állapot állt be. A piros LED-ek úgy vannak elhelyezve, hogy a rendezvény őrei, és a recepció is érzékeli. A szoftverbe az adott csoport létszám számlálója is, figyelemfelhívás céljából, a piros LED bekapcsolásával szinkronban szintén bevörösödik.
A rendezvényt nem a számítógép rendezvényszámláló szoftvere számolja, hanem a rendezvényszámláló eszközben (dobozban) elhelyezett (arduino nano) mikróvezérlő, ami másodpercenként küldi az adatokat a számítógépnek. A számítógép rendezvényszámláló szoftvere másodpercenként veszi az adatokat, végrehajtja a naplózást ha az adatokban változás áll be, illetve a megadott időpontokban, és vezérli a mikróvezérlőn keresztül a piros figyelmeztető LED-eket, ha  korláthoz közelít a létszám. A szoftverben csoportjában a legfontosabb adatok meg vannak jelenítve. Az első félóra eredménye az adott időpontban rögtön láthatóvá válik, az össz. külsős, és kolis adatok a rendezvény lezárásánál, a Stop gomb megnyomása után.

A rendezvényszámláló eszköz fizikai összetevői:

-1. db. Arduino Nano klón (mikróvezérlő), és USB csatlakozó kábele:
Az érzékelő LED-ek jelei által, megszámolja a vendégeket, és USB porton keresztül elküldi az adatokat a számítógépen lévő Visaul Basic programnyelven megírt szoftvernek. Ezen kívül jelző LED-eket vezérel közvetlenül, és a VB program által közvetetten is.

-2 db. piros LED + egy-egy 270 ohm-os ellenállások (bár lehetne csak egyet is használni...)
Ezek kigyulladnak, ha a külsősök, vagy a belsősök a létszámkorlátot megközelítik legalább 15 fővel. Így figyelmeztetik az őröket, hogy fokozottan figyeljenek oda, mert hamarosan létszámstopot kell bevezetniük.

-2db. sárga LED + egy-egy 270 ohm-os ellenállások (bár lehetne csak egyet is használni)
Ezek folyamatosan világítanak, és csak akkor kapcsolnak le egy pillanatra, amikor valaki megszakítja a külsős, belsős kapukat. Ezek segítik a rendezvény előtt, a rendszer beállítást, hogy a fény az érzékelőkre legyenek állítva. Ha a rendezvény alatt valami miatt az érzékelőkről elállítódik a fény, vagy valamilyen meghibásodás történne a rendszerben, akkor avval, hogy nem világítanak, jelzik azt az őröknek.

-4db. erős vörös LED, és a hozzá tartozó tápadapter. + egy ellenállás
Ezek világítanak az érzékelőkre. Kettő is elég lenne, egy-egy a két kapura, de kettő- kettő biztosabb. Két ok miatt nem nem látható inrared LED-eket érdemes használni, egyrészt mert ezek erősebbek, másrészt ezek láthatóak, így könnyű a fényüket ráállítani az érzékelőkre, a vendégek pedig felismerik, hogy egy fénysorompós látogatószámláló rendszeren haladnak át. A fényt adó rendszer külön rendszer, külön tápellátással. A táp egy 9V-os elemmel egyenértékű, 500mW-os adapter, ami kevesebb, mint 80 mW-tal van terhelve.

-4db Infrafényt érzékelő LED + 4db. 4,7Kohm-os ellenállás (bár egy is elég lenne)

-1 db kartondoboz az elektronikához.
Azért karton, mert környezetkímélőek vagyunk. A dobozban egyik áramkörben sincs több, mint 5V, és 10mA, vagyis amennyivel 1db LED-et még világításra lehet késztetni. A dobozban helyezkedik el az Arduino, a jelző LED-ek az előtét ellenállásaikkal, amelyeknek mind külön áramköre van, és itt belül csatlakoznak az érzékelő LED-ek is a mikróvezérlőre. A mikróvezérlő melegedése is olyan csekély mértékű, hogy kézzel nem érzékelhető (pontos mérés: 29 C szoba hőmérsékletnél a legmelegebb ponton 36 C fok.).

-Szoftver
A számítógépen egy Visual Basic programnyelven írt szoftver fogadja az arduino mikróvezérlő számadatait igen lassú, másodpercenkénti adatközléssel, és kapcsolja ki-be a külsős, belsős csoport katasztrófavédelmi létszámkorláthoz való megközelítését jelző egy-egy piros LED-et. Az érzékelők állapotát jelző két sárga LED-et a mikróvezérlő vezérli. A szoftver néhány tíz KB méretű, és a futtatása se terheli meg a számítógépet.

VB kód (szerkesztés alatt):

Imports System
Imports System.IO
Imports System.Text
Module Module1
    Sub Main()
        Dim path As String = "c:\naplo\kollegista.txt" And "c:\naplo\kulsos.txt"
        Dim fs As FileStream = File.Create(path)

    End Sub
End Module

-------------------
Imports System.IO.Ports
Imports System.Threading
Public Class Form1

    Dim moku As Integer
    Dim mokol As Integer
    Dim maxossz As Integer
    Dim osszkolis As Integer
    Dim osszkulsos As Integer
    Dim osszossz As Integer
    Dim innercount As Integer
    Dim beginning As Integer
    Dim beginningb As Integer
    Dim beginningku As Integer
    Dim beginningbe As Integer
    Dim kulsosrend As Integer
    Dim kolisrend As Integer
    Dim biztiorok As Integer
    Dim kulsos As Integer
    Dim kolis As Integer
    Dim osszes As Integer
    Dim maxkulsos As Integer
    Dim maxkolis As Integer
    Dim kulsosinp As Integer
    Dim kolisinp As Integer
    Dim incounter As Integer
    Dim incounterb As Integer

    Dim comPORT As String
    Dim receivedData As String = ""


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label33.Text = CDate(DateString)
        innercount = 0
        moku = 0
        mokol = 0
        maxossz = 0
        My.Computer.FileSystem.WriteAllText("c:\rendezveny\kollegista.txt", "kolis,", True)
        My.Computer.FileSystem.WriteAllText("c:\rendezveny\kulsos.txt", "kulsos,", True)
        Timer1.Enabled = False

        comPORT = ""
        For Each sp As String In My.Computer.Ports.SerialPortNames
            ComboBox1.Items.Add(sp)
        Next
        My.Computer.FileSystem.DeleteFile("c:\rendezveny\kulsos.txt")
        My.Computer.FileSystem.DeleteFile("c:\rendezveny\kollegista.txt")

    End Sub


    Private Sub comPort_ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        If (ComboBox1.SelectedItem <> "") Then
            comPORT = ComboBox1.SelectedItem
        End If
    End Sub


    Private Sub connect_BTN_Click(sender As Object, e As EventArgs) Handles Button1.Click


        If (Button1.Text = "Start") Then
            If (comPORT <> "") Then
                SerialPort1.Close()
                SerialPort1.PortName = comPORT
                SerialPort1.BaudRate = 9600
                SerialPort1.DataBits = 8
                SerialPort1.Parity = Parity.None
                SerialPort1.StopBits = StopBits.One
                SerialPort1.Handshake = Handshake.None
                SerialPort1.Encoding = System.Text.Encoding.Default 'very important!
                SerialPort1.ReadTimeout = 10000

                SerialPort1.Open()
                Button1.Text = "Stop"
                ComboBox1.Enabled = False
                Timer1.Enabled = True
                Timer2.Enabled = True
            Else
                MsgBox("Select a COM port first")
            End If
        Else
            Timer1.Enabled = False
            Timer2.Enabled = False
            SerialPort1.Close()
            Button1.Text = "Start"
            ComboBox1.Enabled = True
            ComboBox1.Text = String.Empty
            My.Computer.FileSystem.WriteAllText("c:\rendezveny\kulsos.txt", vbCrLf & " " + vbCrLf & " " + vbCrLf & CStr(Label33.Text) + " " + TextBox1.Text + vbCrLf & CStr(Label31.Text) + "-kor, az első félóra létszáma: " + CStr(Label29.Text) + " fő, " + vbCrLf & "Külsős rendezők: " + CStr(NumericUpDown1.Value) + " fő + őrök: " + CStr(NumericUpDown3.Value) + " fő, " + vbCrLf & "Belsős rendezők: " + CStr(NumericUpDown2.Value) + " fő." + vbCrLf & " " + vbCrLf & "Legmagasabb létszám: " + CStr(Label32.Text) + "-kor volt: " + CStr(Label30.Text) + "fő." + vbCrLf & "Külsős vendég maximuma: " + CStr(Label22.Text - NumericUpDown3.Value - NumericUpDown1.Value) + " fő," + CStr(Label23.Text) + "-kor," + vbCrLf & "Belsős vendég maximuma: " + CStr(Label24.Text - NumericUpDown2.Value) + " fő," + CStr(Label25.Text) + "-kor" + vbCrLf & "Legmagasabb külsős létszám rendezőkkel, őrökkel: " + CStr(Label22.Text) + " fő, " + CStr(Label23.Text) + " -kor," + vbCrLf & "Legmagasabb belsős létszám rendezőkkel: " + CStr(Label24.Text) + " fő, " + CStr(Label25.Text) + "-kor volt.", True)
            My.Computer.FileSystem.WriteAllText("c:\rendezveny\kollegista.txt", vbCrLf & "Max. kollégista létszám rendezőkkel: " + CStr(Label24.Text) + " fő, " + CStr(Label25.Text) + "-kor volt.", True)
        End If

    End Sub


    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick


        osszkulsos = kulsos + kulsosinp - 1000
        osszkolis = kolis + kolisinp - 1000
        osszossz = osszkulsos + osszkolis

        Label1.Text = osszkulsos
        Label2.Text = osszkolis
        Label5.Text = osszossz

        If osszkulsos <> beginningku Then
            My.Computer.FileSystem.WriteAllText("c:\rendezveny\kulsos.txt", "," + CStr(Label1.Text), True)
        End If

        If osszkolis <> beginningbe Then
            My.Computer.FileSystem.WriteAllText("c:\rendezveny\kollegista.txt", "," + CStr(Label2.Text), True)
        End If

        If osszkulsos > moku Then
            moku = osszkulsos
            Label22.Text = moku
            Label23.Text = TimeString
        End If

        If osszkolis > mokol Then
            mokol = osszkolis
            Label24.Text = mokol
            Label25.Text = TimeString
        End If

        If osszossz > maxossz Then
            maxossz = osszossz
            Label30.Text = maxossz
            Label32.Text = TimeString
            If innercount = 0 Then
                Label29.Text = maxossz
                Label31.Text = TimeString
            End If
        End If

        If osszkulsos > maxkulsos - 15 Then
            incounter = 1
        Else
            incounter = 0
        End If

        If osszkolis > maxkolis - 15 Then
            incounterb = 1
        Else
            incounterb = 0
        End If


        If incounter <> beginning Then
            If incounter = 1 Then
                Label1.BackColor = Color.DarkRed
                SerialPort1.Write("1")
            End If
            If incounter = 0 Then
                Label1.BackColor = Color.CornflowerBlue
                SerialPort1.Write("2")
            End If
        End If

        If incounterb <> beginningb Then
            If incounterb = 1 Then
                Label2.BackColor = Color.DarkRed
                SerialPort1.Write("3")
            End If
            If incounterb = 0 Then
                Label2.BackColor = Color.CornflowerBlue
                SerialPort1.Write("4")
            End If
        End If
        beginningbe = osszkolis
        beginningku = osszkulsos
        beginning = incounter
        beginningb = incounterb
        Timer1.Enabled = False
        receivedData = ReceiveSerialData()
        If ((receivedData.Contains("<") And receivedData.Contains(">"))) Then
            parseData()
        End If
        Timer1.Enabled = True
    End Sub

    Function ReceiveSerialData() As String
        Dim Incoming As String
        Try
            Incoming = SerialPort1.ReadExisting()
            If Incoming Is Nothing Then
                Return "nothing" & vbCrLf
            Else
                Return Incoming
            End If
        Catch ex As TimeoutException
            Return "Error: Serial Port read timed out."
        End Try

    End Function

    Function parseData()

        Dim pos1 As Integer
        Dim pos2 As Integer
        Dim length As Integer
        Dim newCommand As String
        Dim done As Boolean = False

        While (Not done)

            pos1 = receivedData.IndexOf("<") + 1
            pos2 = receivedData.IndexOf(">") + 1

            If (pos2 < pos1) Then
                receivedData = Microsoft.VisualBasic.Mid(receivedData, pos2 + 1)
                pos1 = receivedData.IndexOf("<") + 1
                pos2 = receivedData.IndexOf(">") + 1
            End If

            If (pos1 = 0 Or pos2 = 0) Then

                done = True

            Else

                length = pos2 - pos1 + 1
                If (length > 0) Then
                    newCommand = Mid(receivedData, pos1 + 1, length - 2)
                    receivedData = Mid(receivedData, pos2 + 1)


                    If (newCommand.Substring(0, 1) = "A") Then
                        kulsosinp = newCommand.Substring(1, 4)


                    End If

                    If (newCommand.Substring(0, 1) = "B") Then
                        kolisinp = newCommand.Substring(1, 4)

                    End If

                End If

            End If

        End While

    End Function

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ComboBox1.Enabled = True
        Button1.Enabled = True

        TextBox1.Enabled = False
        NumericUpDown1.Enabled = False
        NumericUpDown2.Enabled = False
        NumericUpDown3.Enabled = False
        NumericUpDown4.Enabled = False
        NumericUpDown5.Enabled = False
        Button2.Visible = False
        Label1.Text = NumericUpDown1.Value + NumericUpDown3.Value
        Label2.Text = NumericUpDown2.Value
        Label5.Text = NumericUpDown3.Value + NumericUpDown2.Value + NumericUpDown1.Value

        kulsos = NumericUpDown1.Value + NumericUpDown3.Value
        kolis = NumericUpDown2.Value
        osszes = kulsos + kolis
        maxkulsos = NumericUpDown4.Value
        maxkolis = NumericUpDown5.Value
        My.Computer.FileSystem.WriteAllText("c:\rendezveny\kulsos.txt", CDate(DateString) + " " + TextBox1.Text + ": Külsősök: Kezdő létszám: Rendezők: " + CStr(NumericUpDown1.Value) + " fő Biztonságiak: " + CStr(NumericUpDown3.Value) + " fő. " + TimeString + "-kor:" + vbCrLf & " ", True)
        My.Computer.FileSystem.WriteAllText("c:\rendezveny\kollegista.txt", CDate(DateString) + " " + TextBox1.Text + ": Kollégisták: Kezdő létszám: Rendezők: " + CStr(NumericUpDown2.Value) + " fő. " + TimeString + "-kor:" + vbCrLf & " ", True)

    End Sub

    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click

    End Sub

    Private Sub COMport_LBL_Click(sender As Object, e As EventArgs) Handles COMport_LBL.Click

    End Sub



    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        innercount = 1
        My.Computer.FileSystem.WriteAllText("c:\rendezveny\kulsos.txt", " fő " + TimeString + "-kor! ", True)
        My.Computer.FileSystem.WriteAllText("c:\rendezveny\kollegista.txt", " fő " + TimeString + "-kor! ", True)

    End Sub

    Private Sub Label18_Click(sender As Object, e As EventArgs) Handles Label18.Click

    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

    End Sub

    Private Sub Label17_Click(sender As Object, e As EventArgs) Handles Label17.Click

    End Sub
End Class
------------------------------------------------
A VB kódhoz egyéb beállítások:
Timer1 = 1000
Timer2 = 1800000
Serial port beállítás:
RtsEnable True
DtrEnable True
Modifiers Friend
Port name COM1
a többi az ilyenkor megszokott...
-------------------------------------------
Ez az Arduino kódja:

int val = 0;
// adatfogadáshoz

const boolean DEBUG = true;
char karakterhossz[10];
//a két adatküldéshez

unsigned int visitor = 1000;
int situation = 0;
int counter = 0;
int beginning = 0;
// a külsős érzékelőjéhez

unsigned int visitorb = 1000;
int situationb = 0;
int counterb = 0;
int beginningb = 0;
// a kolisok érzékelőjéhez

int incoun = 0;
// az adatküldés késletetéséhez belső számláló

void setup()
{
  pinMode(7, OUTPUT);
  digitalWrite(7, LOW);
  pinMode(8, OUTPUT);
  digitalWrite(8, LOW);
  //Az érzékelők állapotérzékelői
  pinMode(5, OUTPUT);
  digitalWrite(5, LOW);
  pinMode(6, OUTPUT);
  digitalWrite(6, LOW);
  //A létszámstopjelző ledek
  pinMode(11, INPUT);
  digitalWrite(11, HIGH);
  pinMode(12, INPUT);
  digitalWrite(12, HIGH);
  //külsösök érzékelőkje
  pinMode(9, INPUT);
  digitalWrite(9, HIGH);
  pinMode(10, INPUT);
  digitalWrite(10, HIGH);
  // kolisok érzékelője tehát a 9-10, és a 11-12 az érzékelők

  Serial.begin(9600);
  // a soros kommunikációhoz, fogadáshoz, kuldéshez
}

void loop()  {
//fogadjuk az adatokat:
int val = Serial.read() - '0';
if (val == 1) {
digitalWrite(5, HIGH);
}
if (val == 2) {
digitalWrite(5, LOW);
}
if (val == 3) {
digitalWrite(6, HIGH);
}
if (val == 4){
digitalWrite(6, LOW);
}

//itt fogadjuk az adatokat rész vége

//érzékelünk, és számolunk:
if (digitalRead(11) == HIGH && digitalRead(12) == HIGH){
situation = 1;
}
if (digitalRead(11) == LOW && digitalRead(12) == HIGH){
situation = 2;
}
if (digitalRead(11) == HIGH && digitalRead(12) == LOW){
situation = 3;
}
if (digitalRead(11) == LOW && digitalRead(12) == LOW){
situation = 4;
}

if(situation != beginning){
  if (situation == 1){
    counter = counter + 1;
  }

  if (situation == 2 && counter == 1){
    visitor = visitor + 1;
    counter = 0;
  }

if (situation == 3 && counter == 1){
if (visitor > 0) {
visitor = visitor - 1;
}
counter = 0;
}

   if (situation == 4){
   counter = 0;
  }
}

if (situation != 4) {
digitalWrite(7, LOW);
} else {
digitalWrite(7, HIGH);
}
// a külsősök külsősök érzékelőjének az érzékelő sárga ledje

beginning = situation;
// ez a külösök, a 11, és 12 Led érzékelős rész vége

if (digitalRead(9) == HIGH && digitalRead(10) == HIGH){
situationb = 1;
}
if (digitalRead(9) == LOW && digitalRead(10) == HIGH){
situationb = 2;
}
if (digitalRead(9) == HIGH && digitalRead(10) == LOW){
situationb = 3;
}
if (digitalRead(9) == LOW && digitalRead(10) == LOW){
situationb = 4;
}
if(situationb != beginningb){
  if (situationb == 1){
    counterb = counterb + 1;
  }
  if (situationb == 2 && counterb == 1){
    visitorb = visitorb + 1;
    counterb = 0;
  }

if (situationb == 3 && counterb == 1){
if (visitorb > 0) {
visitorb = visitorb - 1;
}
counterb = 0;
}

   if (situation == 4){
   counterb = 0;
  }
}

if (situationb != 4) {
digitalWrite(8, LOW);
} else {
digitalWrite(8, HIGH);
}
// kolis érzékelő érzékelő sárga ledje
beginningb = situationb;
// A kolisok érzékelője rész vége
// Érzékelünk és számolunk vége!

//Elküldjük a számadatokat:
incoun = incoun + 1;
//belső számláló a küldéshez

if (incoun == 50) {
       formatNumber( visitor, 4);
       Serial.print("<A");
       Serial.print(karakterhossz);
       Serial.print(">");
       if (DEBUG) { Serial.println("");  }

     
       formatNumber( visitorb, 4);
       Serial.print("<B");
       Serial.print(karakterhossz);
       Serial.print(">");
       if (DEBUG) { Serial.println("");  }
       incoun = 0;
}
//Elküldjük az számadatokat rész vége!

delay (10);
// az alábbi az adatfogadáshoz kell, a szöveget visszalakítja számmá:
}
void formatNumber( unsigned int number, byte digits)
{
    char visitorString[10] = "\0";
    strcpy(karakterhossz, visitorString);
    itoa (number, visitorString, 10);
    byte numZeros = digits - strlen(visitorString) ;
    if (numZeros > 0)
    {
       for (int i=1; i <= numZeros; i++)    { strcat(karakterhossz,"0");  }
    }

    strcat(karakterhossz,visitorString);

}


--------------------------------------------------------------------------------