Picking which kit is right for you depends on your skill level and what components you already have:
You're getting started with electronics and aren't ready to do soldering yet. To use this kit you will need to have your own controller already. This allows you to use whatever you have, e.g. Raspberry Pi, Arduino, Onion Omega, ESP8266. This is perfect for people that have already bought an Arduino start kit and what to try out their skills with another project kit.
These kits come with everything you need to prototype on a breadboard and then build the circuit my custom designed PCB. The controller and shift registers are designed to be mounted in header connectors on the PCB, allowing you to use them again for other projects.
These kits contain just my custom designed PCB and female header connectors. You will need to supply the rest of the components in order to build the circuit. With this option, you could also use jumper wires to connect any other controller you my have.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus eu lorem quis turpis ornare rutrum in faucibus lectus. Phasellus nec facilisis nulla. Praesent elit justo, maximus at aliquet ac, dignissim ut libero. Sed sit amet orci at nisl semper sollicitudin vel nec tortor. Suspendisse vitae porttitor nulla. Etiam in sapien mi. Sed scelerisque mauris nec feugiat dapibus. Vivamus porttitor vel felis eu vestibulum.
Nunc erat justo, dapibus nec luctus ac, iaculis non magna. Aenean tincidunt lacus nec commodo efficitur. Sed iaculis odio ex. Nam vehicula enim sed congue efficitur. Morbi tincidunt placerat ullamcorper. Pellentesque vitae aliquam urna. Nunc tristique, tellus at pharetra finibus, diam diam viverra orci, quis convallis metus nisi id libero. Curabitur ut ligula velit. Mauris tempus scelerisque magna in laoreet. Integer fringilla blandit ultricies. Aliquam at massa consectetur, ornare augue eu, hendrerit mauris. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Nulla facilisi. Vestibulum finibus imperdiet ante nec scelerisque. Vestibulum tincidunt magna eget urna posuere dignissim. Donec varius odio ac odio placerat, non malesuada felis placerat. Sed ac tempor lorem, eu consectetur dui. Donec in dui sed purus pulvinar porta. Etiam consectetur tempus sollicitudin. Sed gravida leo eu nibh sodales, eget mollis nibh venenatis. Nulla volutpat volutpat purus at sollicitudin. Phasellus placerat volutpat imperdiet. Quisque in tempus sem.
To help you get the kit running, I've provided an example projects for Arduino IDE and PlatformIO. The guide below outlines some of the concepts and libraries used.
Using the delay() method to control the timing of code stops other code from running until the delay is finished. It is possible to program the traffic lights using just delay()'s but using non-blocking delays is a better solution. In this kit, we need to be able to switch LEDs on and off at different rates. For more information on this subject, check out this guide from Adafruit.
Interrupts allow the code to be able to react when a button has been pressed without having to repeatedly check for it in the loop(). Checking for button presses in the loop() could result in it being missed if the button is pressed and released before that part of the loop runs. Using interrupts means we don't have to worry about our button press being missed. Adafruit has a tutorial on interrupts. The Arduino site also has some more information in their reference library on the nitty-gritty of interrupts
The circuit contains far more inputs and outputs than the controllers have IO pins for. This kit contains two 75HC595N shift registers. These enable the code to be able to switch up to 16 LEDs whilst using only three IO pins on the controller. These are the same as the one that comes in the Arduino StarterKit. Information on these can be found on Arduino Learning site and Adafruit also has a tutorial on them.
This library provides a simple interface for creating code that implements a non-clocking delay design but without having to write any timing code. The example code uses three thread timers: tickThread, pedThread, lightsThread. The lightsThread is used to ensure that the LEDs are always updated in a timely manner but not necessarily on every cycle of the loop.
A simple library that makes using shift registers as simple as writing to the Serial output.
I've simplified the main code by moving the management of the three sets of car lights and two sets of pedestrian lights into their own libraries. This means they can manage their own state without having lots of spaghetti code.
The Thread class doesn't support reseting the timer on a thread, so I've implemented my own sub-class that adds this functionality. This is used for the tickThread and pedThread, when switching between car right of way and pedestrian right of way.
Fritzing is an open-source software package that makes circuit design simple. It provides an easy to understand interface for working with breadboard, schematic and PCB designs.
Aisler is the PCB manufacturer that is behind the Fritzing Fab PCB production service. They provide a simple web interface for managing project and ordering boards. Their straightforward pricing model makes
PlatformIO provides an advanced editor for micro-controller programming. It can work with Arduino IDE projects as well as it's own project project structures. Being based on the cross-platform Atom editor, means you're not limited to just micro-controller projects.