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
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
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);
}
--------------------------------------------------------------------------------
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);
}