/* Modelbaan sturing met een Arduino Mega processorboard. station en schaduwstation sturing modelbaan. Programma ontwikkeld door Paul Smits. Deze software mag vrij aangepast worden alleen als er een bron vermelding in de kop staat Deze sofrware word gebruikt om met een Arduino Mega een modelspoorbaan aan te sturen, dit is de eerste versie van de software. Dit programma is copyright by Paul Smits. */ #include <Wire.h> //#include <AFMotor.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address char incomingByte; // char BZ = "Bezet"; // String Bezet //char VR = Vrij; // String Vrij //char RD = Rechtdoor; // wissel rechtdoor //char AF = Afbuigend; // wissel afbuigend // initialisatie poort defenieties const int Stijd = 10 * 1000; // Stoptijd stopblok const int Wtijd = 10 * 1000; // Wachttijd wachtblok //const int Noodstop = 1; // Noodstop actief hoog //const int Sda = 20; // I2C bus serial data // const int Scl = 21; // I2C bus serial clock // initialisatie noodstop //const int LED = 27; // Stoppen Arduino Mega modelspoor sturing. const int LED1 = 24; // Vrijgave Arduino Mega modelspoor sturing. const int LEDV = 25; // Noodstop geactiveerd//const int LEDN = 31; // Noodstop Opgeheven// initialisatie poorten blokken const int Blok1 = 41; // Inkomende spoor const int Blok2 = 42; // Uitgaande spoor const int Blok3 = 43; // Schaduwstation spoor 1 const int Blok4 = 44; // Schaduwstation spoor 2 const int Blok5 = 45; // Stationspoor spoor 1 const int Blok6 = 46; // Stationspoor spoor 2 const int Blok7 = 47; // Wachtspoor const int Blok8 = 48; // Goederenspoor const int Blok9 = 49; // Wisselblok 1 const int Blok10 = 50; // Wisselblok 2// initialisatie poorten voor wissel sturing const int Wis1 = 29; // wissel 1 const int Wis2 = 30; // wissel 2 const int Wis3 = 31; // wissel 3 const int Wis4 = 32; // wissel 4 const int Wis5 = 33; // wissel 5 const int Wis6 = 34; // wissel 6 const int Wis7 = 35; // wissel 7 const int Wis8 = 36; // wissel 8 const int Wis9 = 37; // wissel 9 const int Wis10 = 38; // wissel 10 const int Wis11 = 39; // wissel 11 const int Wis12 = 40; // wissel 12 void setup(){ Serial.begin(9600); Serial.println(" Arduino modelbaan sturing."); Serial.println(" Station / schaduwstation sturing"); lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines and turn on backlight lcd.backlight(); // finish with backlight on lcd.setCursor(2,0); //Start at character 0 on line 0 lcd.print("Arduino Mega"); lcd.setCursor(0,1); lcd.print("modelbaan sturing"); // Zet de poorten bloksturing als output pinMode(Blok1, OUTPUT); // Inkomende spoor pinMode(Blok2, OUTPUT); // Uitgaande spoor pinMode(Blok3, OUTPUT); // schaduwstation spoor 1 pinMode(Blok4, OUTPUT); // schaduwstation spoor 2 pinMode(Blok5, OUTPUT); // Stationspoor spoor 1 pinMode(Blok6, OUTPUT); // Stationspoor spoor 2 pinMode(Blok7, OUTPUT); // Wachtspoor pinMode(Blok8, OUTPUT); // Goederenspoor // Poorten wissel sturing (test modes) pinMode(Wis1, OUTPUT); // Wissel 1 pinMode(Wis2, OUTPUT); // Wissel 2 pinMode(Wis3, OUTPUT); // Wissel 3 pinMode(Wis4, OUTPUT); // Wissel 4 pinMode(Wis5, OUTPUT); // Wissel 5 pinMode(Wis6, OUTPUT); // Wissel 6 pinMode(Wis7, OUTPUT); // Wissel 7 pinMode(Wis8, OUTPUT); // Wissel 8 pinMode(Wis9, OUTPUT); // Wissel 9 pinMode(Wis10, OUTPUT); // Wissel 10 pinMode(Wis11, OUTPUT); // Wissel 11 pinMode(Wis12, OUTPUT); // Wissel 12 } void loop() { // Print a message to the LCD. if (Serial.available() > 0) { // kijk of de seriele verbinding beschikbaar is. incomingByte = Serial.read(); // Lees een 'byte'. // Vrijgave of stop comando, Arduino Mega modelspoor sturing. if(incomingByte == 'V') { digitalWrite(LED1,LOW); // Stop led uit. //digitalWrite(LED, HIGH); // Vrijgave Arduino Mega modelspoor sturing. Serial.println("Vrijgave Arduino Mega modelspoor sturing"); lcd.setCursor(0,1); lcd.println("Vrijgave sturing"); } if(incomingByte =='v'){ //digitalWrite (LED, LOW); // Vrijgave led uit. digitalWrite(LED1, HIGH); // Stoppen Arduino Mega modelspoor sturing. Serial.println("Stoppen Arduino Mega modelspoor sturing"); lcd.setCursor(0,1); lcd.println("Stoppen sturing"); } // Bloksturing Arduino Mega if(incomingByte == 'a') { digitalWrite(Blok1, HIGH); // inkomend spoor vrij Serial.println("Inkomend spoor : Vrij"); lcd.setCursor(0,1); lcd.println("Inkomend Vrij"); } if(incomingByte == 'A'){ digitalWrite(Blok1, LOW); // Inkomend spoor bezet Serial.println("Inkomend spoor : Bezet"); lcd.setCursor(0,1); lcd.println("Inkomend Bezet"); } if(incomingByte == 'b') { digitalWrite(Blok2, HIGH); // Uitgaande spoor vrij Serial.println("Uitgaande spoor : Vrij"); lcd.setCursor(0,1); lcd.println("Uitgaande Vrij"); } if(incomingByte == 'B'){ digitalWrite(Blok2, LOW); // Uitgaande spoor bezet Serial.println("Uitgaande spoor : Bezet"); lcd.setCursor(0,1); lcd.println("Uitgaande Bezet"); } if(incomingByte == 'c') { digitalWrite(Blok3, HIGH); // Schaduw station spoor 1 vrij Serial.println("Schaduw station spoor 1 : Vrij"); lcd.setCursor(0,1); lcd.println("Ss spoor 1 Vrij"); } if(incomingByte == 'C'){ digitalWrite(Blok3, LOW); // Schaduw station spoor 1 bezet Serial.println("Schaduw station spoor 1 : Bezet"); lcd.setCursor(0,1); lcd.println("Ss spoor 1 Bezet"); } if(incomingByte == 'd') { digitalWrite(Blok4, HIGH); // Schaduw station spoor 2 vrij Serial.println("Schaduw station spoor 2 : Vrij"); lcd.setCursor(0,1); lcd.println("Ss spoor 2 Vrij"); } if(incomingByte == 'D'){ digitalWrite(Blok4, LOW); // Schaduw station spoor 2 bezet Serial.println("Schaduw station spoor 2 : Bezet"); lcd.setCursor(0,1); lcd.println("Ss spoor 2 Bezet"); } if(incomingByte == 'e') { digitalWrite(Blok5, HIGH); // Station spoor 1 vrij Serial.println("Station spoor 1 : Vrij"); lcd.setCursor(0,1); lcd.println("S spoor 1 Vrij"); } if(incomingByte == 'E'){ digitalWrite(Blok5, LOW); // Station spoor 1 bezet Serial.println("Station spoor 1 : Bezet"); lcd.setCursor(0,1); lcd.println("S spoor 1 Bezet"); } if(incomingByte == 'f') { digitalWrite(Blok6, HIGH); // Station spoor 2 vrij Serial.println("Station spoor 2 : Vrij"); lcd.setCursor(0,1); lcd.println("S spoor 2 Vrij"); } if(incomingByte == 'F'){ digitalWrite(Blok6, LOW); // Station spoor 2 bezet Serial.println("Station spoor 2 : Bezet"); lcd.setCursor(0,1); lcd.println("S spoor 2 Bezet"); } if(incomingByte == 'g') { digitalWrite(Blok7, HIGH); // Wacht spoor vrij Serial.println("Wacht spoor : Vrij"); lcd.setCursor(0,1); lcd.println("Wachtspoor Vrij"); } if(incomingByte == 'G'){ digitalWrite(Blok7, LOW); // Wacht spoor bezet Serial.println("Wacht spoor : Bezet"); lcd.setCursor(0,1); lcd.println("Wachtspoor Bezet"); } if(incomingByte == 'h') { digitalWrite(Blok8, HIGH); // Goederen spoor vrij Serial.println("Goederen spoor : Vrij"); lcd.setCursor(0,1); lcd.println("G spoor Bezet"); } if(incomingByte == 'H'){ digitalWrite(Blok8, LOW); // Goederen spoor bezet Serial.println("Goederen spoor : Bezet"); lcd.setCursor(0,1); lcd.println("G spoor Vrij"); } // Wisselsturing Arduino Mega if(incomingByte == '1') { digitalWrite(Wis1, HIGH); // wissel 1 afbuigend Serial.println("Wissel 1 : Afbuigend"); } if(incomingByte == '!'){ digitalWrite(Wis1, LOW); // Wissel 1 rechtdoor Serial.println("Wissel 1 : Rechtdoor"); } if(incomingByte == '2') { digitalWrite(Wis2, HIGH); // Wissel 2 afbuigend Serial.println("Wissel 2 : Afbuigend"); } if(incomingByte == '@'){ digitalWrite(Wis2, LOW); // Wissel 2 rechtdoor Serial.println("Wissel 2 : Rechtdoor"); } if(incomingByte == '3') { digitalWrite(Wis3, HIGH); // Wissel 3 afbuigend Serial.println("Wissel 3 : Afbuigend"); } if(incomingByte == '#'){ digitalWrite(Wis3, LOW); // Wissel 3 rechtdoor Serial.println("Wissel 3 : Rechtdoor"); } if(incomingByte == '4') { digitalWrite(Wis4, HIGH); // wissel 4 afbuigend Serial.println("Wissel 4 : Afbuigend"); } if(incomingByte == '$'){ digitalWrite(Wis4, LOW); // Wissel 4 rechtdoor Serial.println("Wissel 4 : Rechtdoor"); } if(incomingByte == '5') { digitalWrite(Wis5, HIGH); // Wissel 5 afbuigend Serial.println("Wissel 5 : Afbuigend"); } if(incomingByte == '%'){ digitalWrite(Wis5, LOW); // Wissel 5 rechtdoor Serial.println("Wissel 5 : Rechtdoor"); } if(incomingByte == '6') { digitalWrite(Wis6, HIGH); // Wissel 6 afbuigend Serial.println("Wissel 6 : Afbuigend"); } if(incomingByte == '^'){ digitalWrite(Wis6, LOW); // Wissel 6 rechtdoor Serial.println("Wissel 6 : Rechtdoor"); } if(incomingByte == '7') { digitalWrite(Wis7, HIGH); // wissel 7 afbuigend Serial.println("wissel 7 : Afbuigend"); } if(incomingByte == '&'){ digitalWrite(Wis7, LOW); // Wissel 7 rechtdoor Serial.println("Wissel 7 : Rechtdoor"); } if(incomingByte == '8') { digitalWrite(Wis8, HIGH); // Wissel 8 afbuigend Serial.println("Wissel 8 : Afbuigend"); } if(incomingByte == '*'){ digitalWrite(Wis8, LOW); // Wissel 8 rechtdoor Serial.println("Wissel 8 : Rechtdoor"); } if(incomingByte == '9') { digitalWrite(Wis9, HIGH); // Wissel 9 afbuigend Serial.println("Wissel 9 : Afbuigend"); } if(incomingByte == '('){ digitalWrite(Wis9, LOW); // Wissel 3 rechtdoor Serial.println("Wissel 9 : Rechtdoor"); } if(incomingByte == '0') { digitalWrite(Wis10, HIGH); // Wissel 10 afbuigend Serial.println("Wissel 10 : Afbuigend"); } if(incomingByte == ')'){ digitalWrite(Wis10, LOW); // Wissel 3 rechtdoor Serial.println("Wissel 10 : Rechtdoor"); } // Noodstop of vrijgave Arduino Mega modelspoor sturing. if(incomingByte == 'N') { digitalWrite(LEDV, HIGH); Serial.println("Noodstop alle treinen stoppen !"); lcd.setCursor(0,1); lcd.println("Noodstop in "); } if(incomingByte == 'n') { digitalWrite(LEDV, LOW); Serial.println("Noodstop alle treinen opgeheven !"); lcd.setCursor(0,1); lcd.println("Noodstop vrij "); } }
Imports System.IOImports System.IO.PortsImports System.ThreadingPublic Class Form1 Shared _continue As Boolean Shared _serialPort As SerialPort Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load SerialPort1.Close() SerialPort1.PortName = "com7" 'change com port to match your Arduino port 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! End Sub Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) 'This sub gets called automatically when the com port recieves some data 'Pause while all data is read 'Move recieved data into the buffer If SerialPort1.IsOpen = True Then Read() End If End Sub Private Sub Read() If SerialPort1.IsOpen Then Dim data As String = SerialPort1.ReadLine() TextBox1.Text = data End If End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged blok1On.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("a") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged blok1On.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("A") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged blok2On.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("b") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged blok2On.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("B") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton5.CheckedChanged blok3On.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("c") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton6.CheckedChanged blok3On.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("C") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton7_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton7.CheckedChanged blok4On.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("d") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton8.CheckedChanged blok4On.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("D") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton9_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton12.CheckedChanged blok5On.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("e") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton10_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton13.CheckedChanged blok5On.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("E") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton11_CheckedChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton10.CheckedChanged blok6On.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("f") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton12_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton11.CheckedChanged blok6On.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("F") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton14_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton14.CheckedChanged blok7On.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("g") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton15_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton15.CheckedChanged blok7On.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("G") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton16_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton16.CheckedChanged blok8On.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("h") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton17_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton17.CheckedChanged blok8On.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("H") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Close() End Sub Private Sub RadioButton20_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton20.CheckedChanged wis1On.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("!") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton19_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton19.CheckedChanged wis1On.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("1") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton18_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton18.CheckedChanged End Sub Private Sub RadioButton21_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton21.CheckedChanged wis7On.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("&") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub RadioButton22_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton22.CheckedChanged wis7On.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("7") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) SerialPort1.ReadByte() End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click stopOn.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("N") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click stopOn.Visible = True SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("v") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click stopOn.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("V") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click stopOn.Visible = False SerialPort1.Open() SerialPort1.DiscardInBuffer() SerialPort1.Write("n") If SerialPort1.IsOpen = True Then Read() End If SerialPort1.Close() End Sub End Class
ik dacht dat S88 een speciaal protocol voor de dcc sturing was,
Waarom wil ik analoog blijven rijden Ik heb een twintigtal analoge locomotieven die ook nog zo'n tien a twintig jaar.......