Creanies       home of my best hobby stuff.

           HOME          Pi B+ OS          Gambas          Trains          Electronics          Hardware          Software          About

LATEST NEWS

I have Raspberry Pi B+ USB memory stick and SD card images available for download or I can supply the images mounted on 8 GB memory stick and a small SD card.

The image has lots of goodies, Gambas3 with lots of example apps, VncServer, Nautilus and lots more.

Both of these are subject to a modest handling charge and are also subject to post and packing cost.


Email for downloads, prices, shipping details or more information.
mike.crean@mail.com


HO Automatic Block Signals Schematic.

HOabs.pdf
 



Searchlight Signal



Arduino Nano



IR Sensor



Arduino Code

#include <Wire.h>
String Rx = "", SendIt = "";
int i = 0, tx1Flag = 0, tx2Flag = 0, tx3Flag = 0, tx3Flags = 0, man = 0;
String dels = "";
String Ts1, Ts2, Ts3 = "", Ts4, Ts5, Ts6, Ts7, Ts8;
unsigned long timenow = 0;
unsigned long timeold = 0;

void setup(){
  Serial.begin(9600);
  Serial.setTimeout(50);
  delay(20);
  Serial.println("HO Signal + IR Detection control. V1.0");
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
  pinMode(A2, INPUT_PULLUP);
  pinMode(A3, INPUT_PULLUP);
  pinMode(A4, INPUT_PULLUP);
  pinMode(A5, INPUT_PULLUP);
  pinMode(A6, INPUT_PULLUP);
  pinMode(A7, INPUT_PULLUP); 
 
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);
}

void loop() {
  timenow = millis();

  if(timenow > timeold + 13000 && tx3Flag == 1){
    if(Ts3 == "1" && tx3Flag == 1){
      digitalWrite(5, HIGH);
      digitalWrite(6, HIGH);
      digitalWrite(7, LOW);  
      Serial.println("st1ghs");
      delay(50);
      Serial.println("st2ghs");
      tx3Flag = 0;
      tx3Flags = 0;
    }
  }

  if (Serial.available()==0) {
  }

  Rx = Serial.readString();

  if(Rx.indexOf("\r") > -1){
    if(Rx.length() < 3){
      Serial.println("<X>");
    }       
  }

  // Top Signals Auto or Manual //

  if(Rx.indexOf("stmm") > -1){
    man = 1;   
    Serial.println("stms");   
  }  

  if(Rx.indexOf("stam") > -1){
    man = 0;   
    Serial.println("stas");   
  } 

  //  SignalTop 1 //

if(man == 1){
  if(Rx.indexOf("st1rhm") > -1){
    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);   
    Serial.println("st1rhs");   
  } 

  if(Rx.indexOf("st1rlm") > -1){
    digitalWrite(2, HIGH);
    Serial.println("st1rls");
    tx1Flag = 0;   
  }

  if(Rx.indexOf("st1yhm") > -1){
    digitalWrite(3, LOW);
    digitalWrite(2, HIGH);
    digitalWrite(4, HIGH);   
    Serial.println("st1yhs");         
  } 

  if(Rx.indexOf("st1ylm") > -1){
    digitalWrite(3, HIGH);
    Serial.println("st1yls");
    tx1Flag = 0;
  }

  if(Rx.indexOf("st1ghm") > -1){
    digitalWrite(4, LOW);
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);   
    Serial.println("st1ghs");
  } 

  if(Rx.indexOf("st1glm") > -1){
    digitalWrite(4, HIGH);
    Serial.println("st1gls");
    tx1Flag = 0;
  }

   //  SignalTop 2 //

  if(Rx.indexOf("st2rhm") > -1){
    digitalWrite(5, LOW);
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);   
    Serial.println("st2rhs");   
  } 

  if(Rx.indexOf("st2rlm") > -1){
    digitalWrite(5, HIGH);
    Serial.println("st2rls");
    tx1Flag = 0;   
  }

  if(Rx.indexOf("st2yhm") > -1){
    digitalWrite(6, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(7, HIGH);   
    Serial.println("st2yhs");         
  } 

  if(Rx.indexOf("st2ylm") > -1){
    digitalWrite(6, HIGH);
    Serial.println("st2yls");
    tx1Flag = 0;
  }

  if(Rx.indexOf("st2ghm") > -1){
    digitalWrite(7, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(6, HIGH);   
    Serial.println("st2ghs");
  } 

  if(Rx.indexOf("st2glm") > -1){
    digitalWrite(7, HIGH);
    Serial.println("st2gls");
    tx1Flag = 0;
  }
}

  Rx = "";

  ////  Read the track switches (HIGH OFF, LOW ON)  ////

  Ts1 = String(digitalRead(A0));
  Ts2 = String(digitalRead(A1));
  Ts3 = String(digitalRead(A2));
  Ts4 = String(digitalRead(A3));
  Ts5 = String(digitalRead(A4));
  Ts6 = String(digitalRead(A5));
  Ts7 = String(digitalRead(A6));
  Ts8 = String(digitalRead(A7));

  if(man == 0){
    if(Ts1 == "0" && tx1Flag == 0){
      tx1Flag = 1;
      digitalWrite(5, HIGH);
      digitalWrite(6, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(2, LOW);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);   
      SendIt = Ts1 + "," + Ts2 + "," + Ts3 + "," + Ts4 + "," + Ts5 + "," + Ts6 + "," + Ts7 + "," + Ts8;
      Serial.println(SendIt);
      SendIt = "";
      delay(50);
      Serial.println("st1rhs") ;
      delay(50);
      Serial.println("st2ghs") ;
      delay(1000);
    }

    if(Ts2 == "0" && tx2Flag == 0){
      tx2Flag = 1;
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
      digitalWrite(6, HIGH);
      digitalWrite(7, HIGH);   
      SendIt = Ts1 + "," + Ts2 + "," + Ts3 + "," + Ts4 + "," + Ts5 + "," + Ts6 + "," + Ts7 + "," + Ts8;
      Serial.println(SendIt);
      SendIt = "";
      delay(50);
      Serial.println("st1yhs") ;
      delay(50);
      Serial.println("st2rhs") ;
      delay(1000);
    }

    if(Ts3 == "0" && tx3Flag == 0){
      tx3Flag = 1;
      digitalWrite(5, HIGH);
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      SendIt = Ts1 + "," + Ts2 + "," + Ts3 + "," + Ts4 + "," + Ts5 + "," + Ts6 + "," + Ts7 + "," + Ts8;
      Serial.println(SendIt);
      SendIt = "";
      delay(50);
      Serial.println("st1ghs") ;
      delay(50);
      Serial.println("st2yhs") ;
      delay(1000);
    }

    if(Ts3 == "1" && tx3Flag == 1 && tx3Flags == 0){
      tx1Flag = 0;
      tx2Flag = 0;
      tx3Flags = 1;
      timeold = millis();
      //SendIt = tx3Flag + "  " + String(timeold) + "  " + String(timenow);
      //Serial.println(SendIt);
      //SendIt = "";
    }
  } 



                                                                           





















                                                                                                              Copyright (c) mgc Perth Western Australia 2015