PWM factors
[Trinary.git] / Trinary.cpp
1 #include "arduino.h"
2
3 const int CONTROLINPUT = A0;
4 const int TEMPINPUT = A1;
5 const int TEMP2INPUT = A2;
6 const int MOTOROUTPUT = 3;
7 const int MOTOROFF = 255;
8
9 const int TEMPHIGH = 450;
10 const int TEMPSAFE = 370;
11
12 int Run = 0;
13
14 int ControlInput = 0;
15 int TempInput = 0;
16 int TempInC = 0;
17 int Temp2Input = 0;
18 int Temp2InC = 0;
19 int MotorOutput = 0;
20 int TempHigh = 0;
21
22 void KeyPressed (char key)
23 {
24     putchar (key);
25
26     switch (key)
27     {
28         case '1':
29             analogWriteStates (LOWHIGH);
30             Run = 1;
31             puts ("Switched to LOWHIGH");
32             break;
33
34         case '2':
35             analogWriteStates (LOWOFF);
36             Run = 1;
37             puts ("Switched to LOWOFF");
38             break;
39
40         case '3':
41             analogWriteStates (HIGHOFF);
42             Run = 1;
43             puts ("Switched to HIGHOFF");
44             break;
45
46         case '0':
47         default:
48             Run = 0;
49             puts ("STOPPED");
50             break;
51     };
52 }
53
54 void setup ()
55 {
56     puts ("Grahams Motor Test, " __DATE__ " (" __TIME__ ")");
57 }
58
59 void loop ()
60 {
61     if (Run)
62     {
63         ControlInput = analogRead (CONTROLINPUT);
64         TempInput = analogRead (TEMPINPUT);
65         Temp2Input = analogRead (TEMP2INPUT);
66
67     // For 1k lowside: 45C < Temp ~ +-1C < 112C
68         TempInC = (TempInput * 10 / 76) + 21;
69         Temp2InC = (Temp2Input * 10 / 76) + 21;
70
71         if (TempInput < TEMPSAFE && Temp2Input < TEMPSAFE)
72             TempHigh = 0;
73
74         if (TempInput > TEMPHIGH || Temp2Input > TEMPHIGH)
75             TempHigh = 1;
76
77         MotorOutput = ControlInput >> 2;
78
79         if (TempHigh)
80             analogWrite (MOTOROUTPUT, MOTOROFF);
81         else
82             analogWrite (MOTOROUTPUT, MotorOutput);
83
84         printf ("ControlInput = %d\tTempInput = %d(%dC)+%d(%dC)\tMotorOutput = %d\n", ControlInput, TempInput,
85                 TempInC, Temp2Input, Temp2InC, MotorOutput);
86     }
87     else
88     {
89         analogWriteStates (LOWOFF);
90         analogWrite (MOTOROUTPUT, 0);
91         puts ("STOPPED");
92     }
93
94     delay (10);
95 }