HAL Device Templates¶
Configure HAL devices in myAutomation.h¶
This information is also contained in the command station file:
// myHalDeviceTemplates.txt
// =======================================================================
// The following directives define auxiliary display devices.
// These can be defined in addition to the system display (display
// number 0) that is defined in config.h.
// A write to a line which is beyond the length of the screen will overwrite
// the bottom line, unless the line number is 255 in which case the
// screen contents will scroll up before the text is written to the
// bottom line.
// =======================================================================
//
// Create a 128x32 OLED display device as display number 1
// (line 0 is written by EX-RAIL 'SCREEN(1, 0, "text")').
//HAL(HALDisplay<OLED>, 1, 0x3d, 128, 32)
// Create a 20x4 LCD display device as display number 2
// (line 0 is written by EX-RAIL 'SCREEN(2, 0, "text")').
//HAL(HALDisplay<LiquidCrystal>, 2, 0x27, 20, 4)
// =======================================================================
// The following directive defines a PCA9685 PWM Servo driver module.
// =======================================================================
// The parameters are:
// First Vpin=100
// Number of VPINs=16 (numbered 100-115)
// I2C address of module=0x40
//HAL(PCA9685, 100, 16, 0x40)
// =======================================================================
// The following directive defines an MCP23017 16-port I2C GPIO Extender module.
// =======================================================================
// The parameters are:
// First Vpin=196
// Number of VPINs=16 (numbered 196-211)
// I2C address of module=0x22
//HAL(MCP23017, 196, 16, 0x22)
// Alternative form, which allows the INT pin of the module to request a scan
// by pulling Arduino pin 40 to ground. Means that the I2C isn't being polled
// all the time, only when a change takes place. Multiple modules' INT pins
// may be connected to the same Arduino pin.
//HAL(MCP23017, 196, 16, 0x22, 40)
// =======================================================================
// The following directive defines an MCP23008 8-port I2C GPIO Extender module.
// =======================================================================
// The parameters are:
// First Vpin=300
// Number of VPINs=8 (numbered 300-307)
// I2C address of module=0x22
//HAL(MCP23008, 300, 8, 0x22)
// =======================================================================
// The following directive defines a PCF8574 8-port I2C GPIO Extender module.
// =======================================================================
// The parameters are:
// First Vpin=200
// Number of VPINs=8 (numbered 200-207)
// I2C address of module=0x23
//HAL(PCF8574, 200, 8, 0x23)
// Alternative form using INT pin (see above)
//HAL(PCF8574, 200, 8, 0x23, 40)
// Alternative form to initialize 8 pins as output
// INT pin -1, when INT is not used
//HAL(PCF8574, 200, 8, 0x23, -1, 255) 8 pins High
//HAL(PCF8574, 200, 8, 0x23, -1, 0) 8 pins Low
//HAL(PCF8574, 200, 8, 0x23, -1, 0b11000010)
// pins listed sequentially from 7 to 0
// =======================================================================
// The following directive defines a PCF8575 16-port I2C GPIO Extender module.
// =======================================================================
// The parameters are:
// First Vpin=200
// Number of VPINs=16 (numbered 200-215)
// I2C address of module=0x23
//HAL(PCF8575, 200, 16, 0x23)
// Alternative form using INT pin (see above)
//HAL(PCF8575, 200, 16, 0x23, 40)
// =======================================================================
// The following directive defines an HCSR04 ultrasonic ranging module.
// =======================================================================
// The parameters are:
// Vpin=2000 (only one VPIN per directive)
// Number of VPINs=1
// Arduino pin connected to TRIG=30
// Arduino pin connected to ECHO=31
// Minimum trigger range=20cm (VPIN goes to 1 when <20cm)
// Maximum trigger range=25cm (VPIN goes to 0 when >25cm)
// Note: Multiple devices can be configured by using a different ECHO pin
// for each one. The TRIG pin can be shared between multiple devices.
// Be aware that the 'ping' of one device may be received by another
// device and position them accordingly!
//HAL(HCSR04, 2000, 30, 31, 20, 25)
//HAL(HCSR04, 2001, 30, 32, 20, 25)
// =======================================================================
// The following directive defines a single VL53L0X Time-of-Flight range sensor.
// =======================================================================
// The parameters are:
// VPIN=5000
// Number of VPINs=1
// I2C address=0x29 (default for this chip)
// Minimum trigger range=200mm (VPIN goes to 1 when <20cm)
// Maximum trigger range=250mm (VPIN goes to 0 when >25cm)
//HAL(VL53L0X, 5000, 1, 0x29, 200, 250)
// For multiple VL53L0X modules, add another parameter which is a VPIN connected to the
// module's XSHUT pin. This allows the modules to be configured, at start,
// with distinct I2C addresses. In this case, the address 0x29 is only used during
// initialisation to configure each device in turn with the desired unique I2C address.
// The examples below have the modules' XSHUT pins connected to the first two pins of
// the first MCP23017 module (164 and 165), but Arduino pins may be used instead.
// The first module here is given I2C address 0x30 and the second is 0x31.
//HAL(VL53L0X, 5000, 1, 0x30, 200, 250, 164)
//HAL(VL53L0X, 5001, 1, 0x31, 200, 250, 165)
// =======================================================================
// Play mp3 files from a Micro-SD card, using a DFPlayer MP3 Module.
// =======================================================================
// Parameters:
// 10000 = first VPIN allocated.
// 10 = number of VPINs allocated.
// Serial1 = name of serial port (usually Serial1 or Serial2).
// With these parameters, up to 10 files may be played on pins 10000-10009.
// Play is started from EX-RAIL with SET(10000) for first mp3 file, SET(10001)
// for second file, etc. Play may also be initiated by writing an analogue
// value to the first pin, e.g. ANOUT(10000,23,0,0) will play the 23rd mp3 file.
// ANOUT(10000,23,30,0) will do the same thing, as well as setting the volume to
// 30 (maximum value).
// Play is stopped by RESET(10000) (or any other allocated VPIN).
// Volume may also be set by writing an analogue value to the second pin for the player,
// e.g. ANOUT(10001,30,0,0) sets volume to maximum (30).
// The EX-RAIL script may check for completion of play by calling WAITFOR(pin), which will only proceed to the
// following line when the player is no longer busy.
// E.g.
// SEQUENCE(1)
// AT(164) // Wait for sensor attached to pin 164 to activate
// SET(10003) // Play fourth MP3 file
// LCD(4, "Playing") // Display message on LCD/OLED
// WAITFOR(10003) // Wait for playing to finish
// LCD(4, "") // Clear LCD/OLED line
// FOLLOW(1) // Go back to start
//HAL(DFPlayer, 10000, 10, Serial1)
// =======================================================================
// Play mp3 files from a Micro-SD card, using a DFPlayer MP3 Module on a SC16IS750/SC16IS752 I2C UART
// =======================================================================
// DFPlayer via NXP SC16IS752 I2C Dual UART.
// I2C address range 0x48 - 0x57
//
// Generic format:
// HAL(I2CDFPlayer, 1st vPin, vPins, I2C address, xtal)
// Parameters:
// 1st vPin : First virtual pin that EX-Rail can control to play a sound, use PLAYSOUND command (alias of ANOUT)
// vPins : Total number of virtual pins allocated (1 vPin is supported currently)
// 1st vPin for UART 0
// I2C Address : I2C address of the serial controller, in 0x format
// xtal : 0 for 1.8432Mhz, 1 for 14.7456Mhz
//
// The vPin is also a pin that can be read with the WAITFOR(vPin) command indicating if the DFPlayer has finished playing a track
//
//HAL(I2CDFPlayer, 10000, 1, 0x48, 1)
//
// Configuration example on a multiplexer
//HAL(I2CDFPlayer, 10000, 1, {I2CMux_0, SubBus_0, 0x48}, 1)
// =======================================================================
// 16-pad capacitative touch key pad based on TP229 IC.
// =======================================================================
// Parameters below:
// 11000 = first VPIN allocated
// 16 = number of VPINs allocated
// 25 = local GPIO pin number for clock signal
// 24 = local GPIO pin number for data signal
//
// Pressing the key pads numbered 1-16 cause each of the nominated digital VPINs
// (11000-11015 in this case) to be activated.
//HAL(TouchKeypad, 11000, 16, 25, 24)
// =======================================================================
// The following directive defines an EX-Turntable turntable instance.
// =======================================================================
// EXTurntable, VPIN, Number of VPINs, I2C Address)
//
// The parameters are:
// VPIN=600
// Number of VPINs=1 (Note there is no reason to change this)
// I2C address=0x60
//
// Note that the I2C address is defined in the EX-Turntable code, and 0x60 is the default.
//HAL(EXTurntable, 600, 1, 0x60)
// =======================================================================
// The following directive defines an EX-IOExpander instance.
// =======================================================================
// EXIOExpander, VPIN, Number of VPINs, I2C Address)
//
// The parameters are:
// VPIN=an available Vpin
// Number of VPINs=pin count (must match device in use as per documentation)
// I2C address=an available I2C address (default 0x65)
//
// Note that the I2C address is defined in the EX-IOExpander code, and 0x65 is the default.
// The example is for an Arduino Nano.
//HAL(EXIOExpander, 800, 18, 0x65)
// =======================================================================
// The following directive defines a rotary encoder instance.
// =======================================================================
// The parameters are:
// firstVpin = First available Vpin to allocate
// numPins= Number of Vpins to allocate, can be either 1 to 3
// i2cAddress = Available I2C address (default 0x67)
//HAL(RotaryEncoder, firstVpin, numPins, i2cAddress)
//HAL(RotaryEncoder, 700, 1, 0x67)
//HAL(RotaryEncoder, 700, 2, 0x67)
//HAL(RotaryEncoder, 700, 3, 0x67)
// =======================================================================
// The following directive defines an EX-FastClock instance.
// =======================================================================
// HAL(EXFastCLock, I2C Address)
//
// The parameters are:
//
// I2C address=0x55 (decimal 85)
//
// Note that the I2C address is defined in the EX-FastClock code, and 0x55 is the default.
//HAL(EXFastClock, 0x55)