1 //Trailer Voltage Monitor
2 //For power brakes etc.
3 //supply Arduino through VIN/GND or DC jack from Trailer battery
4 //LED is green if OK, red if low and off!! if disconnected
5
6 //define led module pins here, polarity is automatically handled by presence of LEDPLUS or LEDMINUS
7 //if LED's have common negative, use LEDMINUS
8 //if LED's have common positive, use LEDPLUS
9 //#define LEDMINUS 3
10 #define LEDPLUS 7
11 #define LEDBLUE 4
12 #define LEDRED 5
13 #define LEDGREEN 6
14
15 //Set resistors here:
16 #define RVIN (10000.0)
17 #define RGND (4700.0)
18 #define VTRIGGER (11.5)
19
20 void setup() {
21 ledsetup(); //set up pins
22 }
23
24 void loop() {
25 int a=analogRead(A0); //read input
26 float v;
27 v=(a*5*(RVIN+RGND))/RGND/1023; //work out v at VIN based on resistors
28 if(v ledset(1,0,0);//red
29 }else{
30 ledset(0,1,0);//green
31 }
32 delay(200);
33 }
34
35 void ledsetup(){ //set up led pins depending on whether they are common + or common -, turn all LED's off
36 #ifdef LEDPLUS
37 pinMode(LEDPLUS, OUTPUT);
38 digitalWrite(LEDPLUS, HIGH);
39 pinMode(LEDRED, OUTPUT);
40 digitalWrite(LEDRED, HIGH);
41 pinMode(LEDGREEN, OUTPUT);
42 digitalWrite(LEDGREEN, HIGH);
43 pinMode(LEDBLUE, OUTPUT);
44 digitalWrite(LEDBLUE, HIGH);
45 #endif
46 #ifdef LEDMINUS
47 pinMode(LEDMINUS, OUTPUT);
48 digitalWrite(LEDMINUS, LOW);
49 pinMode(LEDRED, OUTPUT);
50 digitalWrite(LEDRED, LOW);
51 pinMode(LEDGREEN, OUTPUT);
52 digitalWrite(LEDGREEN, LOW);
53 pinMode(LEDBLUE, OUTPUT);
54 digitalWrite(LEDBLUE, LOW);
55 #endif
56 }
57
58 void ledset(byte r, byte g, byte b){
59 #ifdef LEDPLUS
60 r=!r; //invert if we're using common +
61 g=!g;
62 b=!b;
63 #endif
64 digitalWrite(LEDRED, r); //set outputs
65 digitalWrite(LEDGREEN, g);
66 digitalWrite(LEDBLUE, b);
67 }