-
Notifications
You must be signed in to change notification settings - Fork 0
/
TPL.h
80 lines (73 loc) · 3.16 KB
/
TPL.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#ifndef TPL_H
#define TPL_H
#include <DIAG.h>
class TPL {
public:
/**
* Tells TPL which pins to use for the programming track switch, sensors and signals.
Important to note that the sensor and signal pins must not overlap.
Note also that your routes can refer to sensors beyond sensor max but these will be treated as
purely internal to the softwarre.
TODO - switch sensors and signals to the I2C bus when the chips arrive from china!!
*/
static void begin(
short signalZeroPin, // arduino pin connected to first signal
short signals // Number of signals (2 pins each)
);
// Call this in your loop
static void loop();
// Layout setup functions
static void I2CTURNOUT(byte id, byte pin, int servoLeft, int servoRight);
static void DCCTURNOUT(byte id, int dccAddress, byte subAddress, bool activatedIsLeft);
static void I2CSENSOR(byte id, byte pin);
static void PINSENSOR(byte id, byte pin);
};
enum OPCODE {OPCODE_TL,OPCODE_TR,
OPCODE_FWD,OPCODE_REV,OPCODE_SPEED,OPCODE_INVERT_DIRECTION,
OPCODE_RESERVE,OPCODE_FREE,
OPCODE_AT,OPCODE_AFTER,OPCODE_SET,OPCODE_RESET,
OPCODE_IF,OPCODE_IFNOT,OPCODE_ENDIF,OPCODE_IFRANDOM,
OPCODE_DELAY,OPCODE_RANDWAIT,
OPCODE_FON, OPCODE_FOFF,
OPCODE_RED,OPCODE_GREEN,
OPCODE_PAD,OPCODE_STOP,OPCODE_FOLLOW,OPCODE_ENDROUTE,
OPCODE_PROGTRACK,OPCODE_READ_LOCO1,OPCODE_READ_LOCO2,
OPCODE_SCHEDULE,OPCODE_SETLOCO,
OPCODE_PAUSE, OPCODE_RESUME,
OPCODE_ROUTE,OPCODE_ENDROUTES
};
#define ROUTES const extern PROGMEM byte TPLRouteCode[] = {
#define ROUTE(id) OPCODE_ROUTE, id,
#define ENDROUTE OPCODE_ENDROUTE,0,
#define ENDROUTES OPCODE_ENDROUTES,0 };
#define AFTER(sensor_id) OPCODE_AT,sensor_id,OPCODE_AFTER,sensor_id,
#define AT(sensor_id) OPCODE_AT,sensor_id,
#define DELAY(mindelay) OPCODE_DELAY,mindelay,
#define DELAYRANDOM(mindelay,maxdelay) OPCODE_DELAY,mindelay,OPCODE_RANDWAIT,maxdelay-mindelay,
#define ENDIF OPCODE_ENDIF,0,
#define FOFF(func) OPCODE_FOFF,func,
#define FOLLOW(route) OPCODE_FOLLOW,route,
#define FON(func) OPCODE_FON,func,
#define FREE(blockid) OPCODE_FREE,blockid,
#define FWD(speed) OPCODE_FWD,speed,
#define GREEN(signal_id) OPCODE_GREEN,signal_id,
#define IF(sensor_id) OPCODE_IF,sensor_id,
#define IFNOT(sensor_id) OPCODE_IFNOT,sensor_id,
#define IFRANDOM(percent) OPCODE_IFRANDOM,percent,
#define INVERT_DIRECTION OPCODE_INVERT_DIRECTION,0,
#define PAUSE OPCODE_PAUSE,0,
#define PROGTRACK(onoff) OPCODE_PROGTRACK,onoff,
#define READ_LOCO OPCODE_READ_LOCO1,0,OPCODE_READ_LOCO2,0,
#define RED(signal_id) OPCODE_RED,signal_id,
#define RESERVE(blockid) OPCODE_RESERVE,blockid,
#define RESET(sensor_id) OPCODE_RESET,sensor_id,
#define RESUME OPCODE_RESUME,0,
#define REV(speed) OPCODE_REV,speed,
#define SCHEDULE(route) OPCODE_SCHEDULE,route,
#define SETLOCO(loco) OPCODE_SETLOCO,loco>>7,OPCODE_PAD,loco&0x7F,
#define SET(sensor_id) OPCODE_SET,sensor_id,
#define SPEED(speed) OPCODE_SPEED,speed,
#define STOP OPCODE_STOP,0,
#define TL(id) OPCODE_TL,id,
#define TR(id) OPCODE_TR,id,
#endif