Jump to content
 

Arduino Applications and Programs


Simond
 Share

Recommended Posts

A small improvement on the reed switch idea is to use a hall effect device. These can be mounted to respond to either the north or south pole of the magnet providing two different triggers. 

 

I have a small IR remote controlled MP3 player that I intend to use for sound effects. My plan is to use an Arduino to emulate the IR remote commands from track sensors to select an individual MP3 file and trigger the necessary sound effect. Also being stereo you can balance the recording so that the sound appears to originate from a particular location on the layout. 

 

http://www.banggood.com/JQ-D005A-Car-Audio-MP3-Decoder-Board-Single-Decoding-Buildwin-Remote-Control-p-1027628.html

 

Neil

Link to post
Share on other sites

Thanks Neil

 

I was planning to use a single speaker for the AWS, on the basis that it can then "stand alone", needing only power and an input from the signal (danger - hooter, clear - bell) and it will then respond to any magnet equipped loco, which of course only make the sound when they are on the ramp.

 

With stereo, or quadrophonic, or surround sound, I'm sure you could create significant pan-effects with sounds apparently moving around - but beware the "repeat sound effect" effect - if you use a loop, you'll hear it in no time, and it'll jar soon after!

 

Best

Simon

Link to post
Share on other sites

  • RMweb Premium

I have a basic sound set up on Waton that uses an Arduino, a PC and a couple of RFID readers. It uses panning and fade to give an impression on movement across the layout and seems to work fairly well as background sounds. The problem of sound loops is a general issue and those that have tried to programme their own DCC sound chips will have had to deal with it. There's an opening for an industrious programmer to come up with some tools to help. If only we had 30 hour days!

 

A link to the Waton thread for those that might be interested:

 

http://www.rmweb.co.uk/community/index.php?/topic/4400-waton/page-20&do=findComment&comment=1681574

 

Cheers

Dave

Link to post
Share on other sites

Just wanted to congratulate Neil and team on the 'Stop the Train' game - what a great idea. My feeling is that every exhibition needs a couple of 'interactive' layouts, even if they are not top-level realism, to add some fun and give visitors (particularly parents with kids) something to have a go at. The Inglenook-esque shunting puzzle challenge is classic and nothing new (that said, I'm building one too..!  :)  ), but Neil's game demonstrates how little it takes to put a clever idea into action, particularly with contemporary digital boards.

 

Thank you Neil, too, for the link to the website with clear pictures and links to Arduino source code. It's certainly got me thinking about what I could usefully try to do with the various Arduinos and RPis I have.

 

As a matter of interest (without going too much off topic), what was the reaction from the public? What age range seemed most attracted to this?

 

Cheers,
Alan

Link to post
Share on other sites

the Dream Player is a neat bit of kit - but I reckon with an Arduino, a few relays and an SD card reader, you can do it all for maybe £20.

 

card reader here; - http://www.gearbest.com/development-boards/pp_63013.html?currency=GBP&gclid=CLzPpITGq8sCFQ0SGwodpjYLwQ - there are lots more, they cost ~ £1

 

you'll need an audio amp - this is a cheap and cheerful way of doing it - bet there are cheaper ones around - http://uk.rs-online.com/web/p/products/7302732/?grossPrice=Y&cm_mmc=UK-PLA-_-google-_-PLA_UK_EN_Computing_And_Peripherals-_-Audio_And_Video&mkwid=ss2fdYbjN_dc|pcrid|88057058163|pkw||pmt||prd|7302732&gclid=CJ77xLLGq8sCFQo6Gwod_XoKUA

 

RFID if you want, reed switches work for every magnet-equipped loco

 

and if you just want the wheel sound - there was an article in RM many many years ago, you get a tobacco tin or small biscuit tin, mount it under the baseboard, and solder a bit of stiff wire, vertically, from one rail directly to the middle of the tin lid.  You then file a notch in the rail.  and this one works without electrickery!!!

 

best

Simon

 

Thanks Simon,

 

When I said bargain, I really did mean bargain!

 

 

I bought:

 

Dream player pro

Milli-amp 2W amplifier

2Gb micro SD

Spare output buffer chip

12v 1A DC psu

US/UK adapter

 

All new and bagged for £10 + £3.30 p&p :)

 

Not played with it yet though........

  • Like 1
Link to post
Share on other sites

I have started work on constructing arduino based modules for control of my DCC layout mainly with loconet input.  I started out to make another LOCOIO board but thought making a board for everything was a bit of an over-kill so decided to split the board into small dedicated units with circuit and much of the code in common.

In this case I am using ultra cheap pro minis, a Loconet and DCC interface, a simple plug-on programming board (button and 10 position BCD encoder so I don't have to build them on each module).  Modules are built on PCB prototyping boards.  Sketches based on published DCC libraries.

The aim is to simply grab a module and up-load the appropriate sketch to give required functionality.

 

So far I have a reasonable module circuit layout and have working sketches for;

 

- a button board to throw switches, each button (8 available) is assigned a single switch address.  Buttons can be toggle or momentary.  Addresses can be programmed.

 

- an input sketch to report to loconet up to 8 inputs. 

 

Almost finished a sketch to take loconet switch requests and control slow motion switch motors (Tortoise); input from the track type module is being created.  Still need also to adopt a standard design for powering the tortoises.  Each module can control 8 switches as well as 8 routes of up to 8 switch addresses in each route, programmed via switch requests.

 

Next in to-do queue is a LED sketch to take loconet traffic and control LEDs on a panel and then a small servo control sketch.

 

Nothing really innovative, just using bits of other peoples' concepts and work, cobbled together. :blush_mini:

All good fun though.

 

CFJ

  • Like 1
Link to post
Share on other sites

I've been looking at arduino or rpi for point/signal/dcc control. Haven't bought anything to try out as yet but already have a spare rpi, though I suspect it's overkill to some extent.

 

Intending to also look at the merg offerings when I get chance (now I'm a member).

 

Of course all this requires a layout, better get started on that I guess lol, though have bought my first em point kit to try as a first step. Need to do final tweaks to the templot plan and then order some boards from Tim horn.

Link to post
Share on other sites

Intending to also look at the merg offerings when I get chance (now I'm a member).

 

 

Note that within MERG, the acronym 'RPI' was in use long before (over 20 years before) these recent developments which sometimes use the same shortform. To me, 'RPI' will always represent my 8031 based 'Remote Panel Interface' module.

Hence, beware that any references you might come across whilst searching through MERG documentation using just the acronym may not give the results you expect !

Link to post
Share on other sites

  • 4 weeks later...

Hi all of you,

 

Currently, I'm building a Locoshield (Digitrax LocoNet). Cf. John Plocher

 

post-3358-0-60365700-1460921473.jpg

 

post-3358-0-20770700-1460921515.jpg

 

I've modified the code of my signal box with interlocking system arduino program to include Digitrax LocoNet command.

// SignalBox

// Signal box with "Nb_lever" levers with interlocking system
//Fabrice Fayolle, May 2016

//Version 1.0 for Arduino Uno
// Arduino Uno

// Pin        -> Use for                    -> Connect to
// 0
// 1
// 2
// 3
// 4          -> Default                    -> Red LED (with a 220 ohms resistor)
// 5
// 6          -> LocoNet Transmit pin       -> Locoshield Tx pin
// 7
// 8          -> LocoNet Receive pin        -> Locoshield Rx pin
// 9 to 15    -> Lever Input                -> SPDT ON-ON
// 16 to 19   -> Wtv020                     -> Wtv020 PCB

//Signal box with "NB_lever"
const int Nb_lever = 7;

// INPUT
// Lever : SPDT ON-ON
// 1 -> 5V -> Normal position
// Common point -> Lever Input
// 2 -> GND -> Reverse position
// OUTPUT
// Digitrax LocoNet

// Type lever table
// 0 -> Not use
// 1 -> Point
// 2 -> FPL
// 3 -> Signal
const int Table_lever_type[Nb_lever] = {1, 1, 1, 1, 1, 0, 0};
// Locking lever table to initialize each lock lever
// 0 -> No lock
// 1 -> 1 lock
// x -> x lock
const int Table_lever_lock[Nb_lever] = {0, 1, 0, 0, 0, 0, 0};
// Interlocking system table (locking rules)
// 0 -> Nothing
// 1 -> Lock
// -1 -> Release
// 1xx -> LW (Lock When Normal)
// -1xx -> RW (Release When Normal)
// 2xx -> LW (Lock When Reverse)
// -2xx -> RW (Release When Reverse)
const int Table_interlocking[Nb_lever * Nb_lever] = {
  // Lever 1
  0, -1, 1, 0, 0, 0, 0,
  // Lever 2
  1, 0, 0, 0, 0, 0, 0,
  // Lever 3
  1, 0, 0, 0, 0, 0, 0,
  // Lever 4
  0, 0, 0, 0, 0, 0, 0,
  // Lever 5
  0, 0, 0, 0, 0, 0, 0,
  // Lever 6
  0, 0, 0, 0, 0, 0, 0,
  // Lever 7
  0, 0, 0, 0, 0, 0, 0,
};

// Visual management for interlocking system
// Default lever position
const int DefaultPin = 4;

//LocoNet
#include <LocoNet.h>
// LocoNet Transmit pin
#define LNtxPin 6
// pointer to a received LocoNet packet
lnMsg  *LnPacket;
//DDC Address of stationary decoder
const int Table_lever_dcc[Nb_lever] = {1, 2, 3, 4, 5, 6, 7};
void sendOPC_SW_REQ(int SLever_dcc, boolean SLever_state, boolean On)
{
  lnMsg SendPacket ;
  int sw2 = 0x00;
  if (SLever_state)
  {
    sw2 |= B00100000;
  }
  if (On)
  {
    sw2 |= B00010000;
  }
  sw2 |= (SLever_dcc >> 7) & 0x0F;
  SendPacket.data[ 0 ] = OPC_SW_REQ ;
  SendPacket.data[ 1 ] = SLever_dcc & 0x7F ;
  SendPacket.data[ 2 ] = sw2 ;
  LocoNet.send( &SendPacket );
  Serial.println("OPC_SW_REQ LocoNet packet sent");
}
void LocoNet_Order(int SLever_dcc, int SLever_type, boolean SLever_state)
{
  switch (SLever_type)
  {
    case 0 :
      // 0 -> Not use
      break;
    case 1 :
      // 1 -> Point
      sendOPC_SW_REQ(SLever_dcc, SLever_state, true);
      sendOPC_SW_REQ(SLever_dcc, SLever_state, false);
      break;
    case 2:
      // 2 -> FPL
      break;
    case 3:
      // 3 -> Signal
      break;
    default:
      break;
  }
}

//Wtv020
#include <Wtv020sd16p.h>
const int clockPin = 16;  // CLOCK   7
const int resetPin = 17;  // RESET   1
const int diPin = 18;     // DATAIN  10
const int busyPin = 19;   // BUSY    15
Wtv020sd16p wtv020sd16p(resetPin, clockPin, diPin, busyPin);
// 0000.AD4 -> 0 -> Lever change
// 0001.AD4 -> 1 -> Signal box is ready to use

//Object "Lever"
class Lever
{
  private:
    int Lever_input;
    int Lever_type;
    int Lever_state;
    int Lever_lock;
    int Lever_dcc;
  public:
    void Setup(int SLever_input);
    boolean State_of_lever();
    boolean Change_asking();
    boolean Change_is_possible();
    void Change();
    void Change_lever_lock(int SChange);
}
;
void Lever::Setup(int SLever_input)
{
  // Input : from pin 9 to pin 15
  Lever_input = SLever_input + 9;
  pinMode (Lever_input, INPUT);
  digitalWrite(Lever_input, HIGH);
  boolean Normal = true;
  boolean Reverse = false;
  if ( digitalRead(Lever_input) == Reverse  )
  {
    delay(100);
    if (digitalRead(Lever_input) == Reverse)
    {
      digitalWrite(DefaultPin, HIGH);
      while (digitalRead(Lever_input) == Reverse)
      {
      }
      digitalWrite(DefaultPin, LOW);
    }
  }
  Lever_type = Table_lever_type[SLever_input];
  // State of the lever
  // true -> Normal(by default)
  // false -> Reverse
  Lever_state = true;
  Lever_lock = Table_lever_lock[SLever_input];
  Lever_dcc = Table_lever_dcc[SLever_input];
  LocoNet_Order(Lever_dcc, Lever_type, true);
}
boolean Lever::Change_asking()
{
  boolean result = false;
  // Type lever
  // 0 -> Not use
  if (Lever_type != 0)
  {
    if (digitalRead(Lever_input) != Lever_state)
    {
      delay(100);
      if (digitalRead(Lever_input) != Lever_state)
      {
        result = true;
      }
    }
  }
  return result;
}
boolean Lever::Change_is_possible()
{
  boolean result = false;
  result = (Lever_lock == 0);
  if (result == false)
  {
    while (digitalRead(Lever_input) != Lever_state)
    {
      digitalWrite(DefaultPin, HIGH);
    }
    digitalWrite(DefaultPin, LOW);
  }
  return result;
}
void Lever::Change()
{
  Lever_state = !Lever_state;
  // Wtv020
  wtv020sd16p.asyncPlayVoice(0);
  //DCC
  LocoNet_Order(Lever_dcc, Lever_type, Lever_state);
}
boolean Lever::State_of_lever()
{
  boolean result = true;
  result = Lever_state;
  return result;
}
void Lever::Change_lever_lock(int SChange)
{
  Lever_lock += SChange;
}

lever L[Nb_lever];

void setup()
{
  // Initialize Serial Port USB at 57600 baud
  Serial.begin(57600);
  Serial.println("Monitor");
  // Wtv020
  wtv020sd16p.reset();
  // Visual management
  pinMode(DefaultPin, OUTPUT);
  digitalWrite(DefaultPin, LOW);
  // Levers setup
  for (int i = 0; i < Nb_lever; i++)
  {
    L[i].Setup(i);
  }
  // Wtv020
  wtv020sd16p.asyncPlayVoice(1);
}

void loop()
{
  for (int i = 0; i < Nb_lever; i++)
  {
    if (L[i].Change_asking())
    {
      if (L[i].Change_is_possible())
      {
        // Interlocking rules
        Locking_rules(i);
        // Change the state of the lever
        L[i].Change();
        Serial.print("Lever ");
        Serial.print(i + 1);
        Serial.print(" changed to ");
        if (L[i].State_of_lever())
        {
          Serial.print("Normal");
        }
        else
        {
          Serial.print("Reverse");
        }
        Serial.println();
      }
    }
  }
}

void Locking_rules(int Slever)
{
  int Shift = Slever * Nb_lever;
  if (L[Slever].State_of_lever())
    // Lever on "Normal" position
  {
    for (int i = 0; i < Nb_lever; i++)
    {
      switch (Table_interlocking[Shift + i])
      {
        case 0 :
          break;
        case -1 :
          L[i].Change_lever_lock(Table_interlocking[Shift + i]);
          break;
        case 1 :
          L[i].Change_lever_lock(Table_interlocking[Shift + i]);
          break;
        default :
          L[i].Change_lever_lock(Conditionnal_locking(Table_interlocking[Shift + i]));
          ;
      }
    }
  }
  else
    // Lever on "Reverse" position
  {
    for (int i = 0; i < Nb_lever; i++)
    {
      switch (Table_interlocking[Shift + i])
      {
        case 0 :
          break;
        case -1 :
          L[i].Change_lever_lock(-Table_interlocking[Shift + i]);
          break;
        case 1 :
          L[i].Change_lever_lock(-Table_interlocking[Shift + i]);
          break;
        default :
          L[i].Change_lever_lock(-Conditionnal_locking(Table_interlocking[Shift + i]));
          ;
      }
    }
  }
}

int Conditionnal_locking (int Locking)
{
  int Hundred = Locking / 100;
  int result = 0;
  switch (Hundred)
  {
    case 1 :
      if (L[Locking - 101].State_of_lever())
      {
        result = 1;
      }
      break;
    case -1 :
      if (L[-Locking - 101].State_of_lever())
      {
        result = -1;
      }
      break;
    case 2 :
      if (!L[Locking - 201].State_of_lever())
      {
        result = 1;
      }
      break;
    case -2 :
      if (!L[-Locking - 201].State_of_lever())
      {
        result = -1;
      }
      break;
  }
  return result;
}

Comments welcome!!!

 

Fabrice

Edited by ffayolle
Link to post
Share on other sites

  • RMweb Premium

Fabrice,

 

I'm just in the process off looking at Signal Interlocking using a Arduino Mega and your example code looks very interesting. I'd not considered looking at Boolean Code before, however it's given me some ideas, although I must admit your code is way above my head at the moment!!!

 

I don't think you have a "Locked Both Ways" in your code, that's something I require in my application.

Link to post
Share on other sites

  • RMweb Premium

@ffayolle, it would make life much easier if you edit Reply #85 and use the code button <> for your code

 

so it looks like this
Also, please remove all the superfluous blank lines.

 

...R

 

Other than that, thank you for the posting?

  • Like 1
Link to post
Share on other sites

Fabrice,

 

I'm just in the process off looking at Signal Interlocking using a Arduino Mega and your example code looks very interesting. I'd not considered looking at Boolean Code before, however it's given me some ideas, although I must admit your code is way above my head at the moment!!!

 

I don't think you have a "Locked Both Ways" in your code, that's something I require in my application.

 

Not yet but I can try to manage "Locked Both Ways".

Please wait!!!

Link to post
Share on other sites

Hi all of you,

 

I apologize but you can manage "Locked Both Way".

 

Replace LW3R by 203

Replace BW by 1

 

You obtain these tables :

// Type lever table
// 0 -> Not use
// 1 -> Point
// 2 -> FPL
// 3 -> Signal
const int Table_lever_type[Nb_lever] = {3, 3, 1, 0, 0, 0, 0};
// Locking lever table to initialize each lock lever
// 0 -> No lock
// 1 -> 1 lock
// x -> x lock
const int Table_lever_lock[Nb_lever] = {0, 0, 0, 0, 0, 0, 0};
// Interlocking system table (locking rules)
// 0 -> Nothing
// 1 -> Lock
// -1 -> Release
// 1xx -> LW (Lock When Normal)
// -1xx -> RW (Release When Normal)
// 2xx -> LW (Lock When Reverse)
// -2xx -> RW (Release When Reverse)
const int Table_interlocking[Nb_lever * Nb_lever] = {
  // Lever 1
  0, 203, 1, 0, 0, 0, 0,
  // Lever 2
  203, 0, 1, 0, 0, 0, 0,
  // Lever 3
  0, 0,0, 0, 0, 0, 0,
  // Lever 4
  0, 0, 0, 0, 0, 0, 0,
  // Lever 5
  0, 0, 0, 0, 0, 0, 0,
  // Lever 6
  0, 0, 0, 0, 0, 0, 0,
  // Lever 7
  0, 0, 0, 0, 0, 0, 0,
};

Comments welcome!!!

 

Keep in touch, Fabrice

Edited by ffayolle
  • Like 2
Link to post
Share on other sites

Thanks to Fabrice, and other contributors.

 

My head is not in this at the moment (See my thread on lasers) but it is really valuable. My intent was (is) to create a signalling Arduino program into which I could load a database of "released by" & "locked by"as some sort of universal table to customise the program to local signalling needs.

 

Please keep up the good work!

Simon

Link to post
Share on other sites

Thanks to Fabrice, and other contributors.

 

My head is not in this at the moment (See my thread on lasers) but it is really valuable. My intent was (is) to create a signalling Arduino program into which I could load a database of "released by" & "locked by"as some sort of universal table to customise the program to local signalling needs.

 

Please keep up the good work!

Simon

 

Simon,

That's the same for me. Change just 3 tables to adapt the program  

Keep in touch, Fabrice

Link to post
Share on other sites

Hi all of you,

some examples you can manage with my Arduino program. 

I you don't use DCC, you can declare some output pins for using with 5V relays.

 

Example 1

 

post-3358-0-60056800-1461155492.jpg

 

The matrix is :

 

post-3358-0-73027700-1461155523.jpg

 

Just replace L by 1

 

Tables are :

// Type lever table
// 0 -> Not use
// 1 -> Point
// 2 -> FPL
// 3 -> Signal
const int Table_lever_type[Nb_lever] = {3, 3, 0, 0, 0, 0, 0};

// Locking lever table to initialize each lock lever
// 0 -> No lock
// 1 -> 1 lock
// x -> x lock
const int Table_lever_lock[Nb_lever] = {0, 0, 0, 0, 0, 0, 0};
// Interlocking system table (locking rules)
// 0 -> Nothing
// 1 -> Lock
// -1 -> Release
// 1xx -> LW (Lock When Normal)
// -1xx -> RW (Release When Normal)
// 2xx -> LW (Lock When Reverse)
// -2xx -> RW (Release When Reverse)
const int Table_interlocking[Nb_lever * Nb_lever] = {
  // Lever 1
  0, 1, 0, 0, 0, 0, 0,
  // Lever 2
  1, 0, 0, 0, 0, 0, 0,
  // Lever 3
  0, 0,0, 0, 0, 0, 0,
  // Lever 4
  ...

Example 2

 

post-3358-0-81332400-1461155766.jpg

 

The matrix is :

 

post-3358-0-88206100-1461155815.jpg

 

Replace L by 1

Replace R by -1

 

Tables are:

// Type lever table
// 0 -> Not use
// 1 -> Point
// 2 -> FPL
// 3 -> Signal
const int Table_lever_type[Nb_lever] = {3, 3, 3, 1, 0, 0, 0};
// Locking lever table to initialize each lock lever
// 0 -> No lock
// 1 -> 1 lock
// x -> x lock
const int Table_lever_lock[Nb_lever] = {0, 0, 1, 0, 0, 0, 0};
// Interlocking system table (locking rules)
// 0 -> Nothing
// 1 -> Lock
// -1 -> Release
// 1xx -> LW (Lock When Normal)
// -1xx -> RW (Release When Normal)
// 2xx -> LW (Lock When Reverse)
// -2xx -> RW (Release When Reverse)
const int Table_interlocking[Nb_lever * Nb_lever] = {
  // Lever 1
  0, 1, 1, 1, 0, 0, 0,
  // Lever 2
  1, 0, 1, 1, 0, 0, 0,
  // Lever 3
  1, 1, 0, 1, 0, 0, 0,
  // Lever 4
  0, 1, -1, 0, 0, 0, 0,
  ...

Comments welcome!!!

 

Fabrice

Edited by ffayolle
Link to post
Share on other sites

  • RMweb Premium

Comments welcome!!!

 

Fabrice

 

Fabrice, excellent stuff. Starting from basics should help me understand what's involved. I have knocked up a little box with 14 Switches (A0 to A13) and 14 LED's (31 to 44) connected to an Arduino Mega. I will try to use your code etc to see if I can make it work !

 

Ok, I've copied your code from example 1 into Arduino IDE. I get an "Nb_lever was not declared" error; I did say this code was a bit above my head. I guess I need to sort out what goes in the "set up" and "loop" portions?

Edited by Pannier Tank
Link to post
Share on other sites

Fabrice, excellent stuff. Starting from basics should help me understand what's involved. I have knocked up a little box with 14 Switches (A0 to A13) and 14 LED's (31 to 44) connected to an Arduino Mega. I will try to use your code etc to see if I can make it work !

 

Ok, I've copied your code from example 1 into Arduino IDE. I get an "Nb_lever was not declared" error; I did say this code was a bit above my head. I guess I need to sort out what goes in the "set up" and "loop" portions?

 

David,

Just copy this code (Cf. http://www.rmweb.co.uk/community/index.php?/topic/82978-arduino-applications-and-programs/?p=2276967) and modify tables like you want

Fabrice

Edited by ffayolle
Link to post
Share on other sites

Hi all of you,

 

I've done a signal box test to verify arduino program and  interlocking system algorithm.

 

post-3358-0-41056000-1461484573_thumb.jpg

 

I use some SPDT On-On (Radiospares #734-7062P) and switch cap lever cover (Radiospares #297-415). 

 

You can see another PCB. I use it for the lever sound (Wtv020).

 

post-3358-0-25149900-1461484729_thumb.jpg

 

I use brass rod to connect all SPDT (5V and GND).

 

I'm just waiting for my Locoshield PCB to do some tests with my Digitrax system!!!

 

I define a trackplan and I use 6 of 7 levers.

 

post-3358-0-07026300-1461485597.jpg

 

Let's go to...

 

Welcome comments!!!

 

Be seeing you, Fabrice

Edited by ffayolle
  • Like 3
Link to post
Share on other sites

The diagram and matrix concept in Reply #96 looks very neat.

 

Would you mind explaining (for example) how to "read" or interpret the matrix for example 2. I'm not asking about the computer code - just the signalling system.

 

...R

Link to post
Share on other sites

The diagram and matrix concept in Reply #96 looks very neat.

 

Would you mind explaining (for example) how to "read" or interpret the matrix for example 2. I'm not asking about the computer code - just the signalling system.

 

...R

 

Thanks for your interest!!!

 

A junction :

 

post-3358-0-37946300-1461488902.jpg

 

the interlocking matrix :

 

post-3358-0-07838700-1461488446.jpg

 

row 1 : 1 locks 2, 3 and 4.

If you reverse lever 1, you can't reverse after lever 2, lever 3 and lever 4 (2, 3 and 4 lock by 1)

row 2 : 2 locks 1, 3 and 4.

row 3 : 3 locks 1, 2 and 4.

row 4 : 4 locks 2, releases 3.

If you reverse lever 4, you can reverse after lever 3 (3 releases by 4).

 

Don't hesitate to contact me for further informations

 

Fabrice

Edited by ffayolle
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...