5
5
#include " chars.h"
6
6
#include < LiquidCrystal.h>
7
7
8
- int16_t joysticks[ 4 ];
8
+ // Global objects
9
9
LiquidCrystal lcd (LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
10
-
11
10
static InputDebounce button;
11
+
12
12
uint8_t menu = MENU_HIDDEN;
13
13
14
14
uint8_t mode;
15
15
uint8_t display_mode;
16
16
17
+ int16_t joysticks[4 ];
18
+ int16_t output_val[4 ];
19
+
17
20
void setup ()
18
21
{
19
22
@@ -28,7 +31,7 @@ void setup()
28
31
// Override read modes
29
32
// mode = MODE_DIGITAL;
30
33
// mode = MODE_ANALOG;
31
- display_mode = DISPLAY_OUT ;
34
+ display_mode = DISPLAY_VOLT ;
32
35
33
36
button.registerCallbacks (button_pressedCallback, button_releasedCallback, button_pressedDurationCallback);
34
37
button.setup (SW_L);
@@ -51,8 +54,17 @@ void loop()
51
54
case MODE_ANALOG:
52
55
mode_analog ();
53
56
break ;
54
- case MODE_ANALOG2:
55
- mode_analog2 ();
57
+ case MODE_EXP:
58
+ mode_exp ();
59
+ break ;
60
+ case MODE_SQUARE:
61
+ mode_square ();
62
+ break ;
63
+ case MODE_LN:
64
+ mode_log ();
65
+ break ;
66
+ case MODE_SQRT:
67
+ mode_sqrt ();
56
68
break ;
57
69
default :
58
70
break ;
@@ -65,6 +77,10 @@ void loop()
65
77
// delay(100);
66
78
}
67
79
80
+
81
+ /* ********************************************
82
+ * DISPLAY
83
+ **********************************************/
68
84
void update_display ()
69
85
{
70
86
static long lasttime = millis ();
@@ -85,30 +101,98 @@ void update_display()
85
101
case DISPLAY_VOLT:
86
102
display_volt ();
87
103
break ;
104
+ case DISPLAY_OUT:
105
+ display_out ();
106
+ break ;
88
107
}
89
108
90
109
lasttime = millis ();
91
110
}
92
111
}
93
112
113
+
114
+
115
+ inline void display_input ()
116
+ {
117
+ // lcd.clear();
118
+ lcd.setCursor (0 , 0 );
119
+ lcd.print (joysticks[JOYSTICK_LX]);
120
+ lcd.setCursor (4 , 0 );
121
+ lcd.print (joysticks[JOYSTICK_LY]);
122
+ lcd.setCursor (0 , 1 );
123
+ lcd.print (joysticks[JOYSTICK_RX]);
124
+ lcd.setCursor (4 , 1 );
125
+ lcd.print (joysticks[JOYSTICK_RY]);
126
+ }
127
+
128
+ void display_volt ()
129
+ {
130
+ // Input Voltage
131
+ lcd.setCursor (0 , 0 );
132
+ lcd.print (F (" IN:" ));
133
+ uint16_t val = read_input_volt ();
134
+ if (val < 10000 ) // Insert space if only one digit
135
+ lcd.print (" " );
136
+ lcd.print (val / 1000.0 , 1 );
137
+ lcd.setCursor (7 , 0 );
138
+ lcd.print (F (" V" ));
139
+
140
+ // 5V Voltage
141
+ lcd.setCursor (0 , 1 );
142
+ lcd.print (F (" 5V:" ));
143
+ val = read_MCU_volt ();
144
+ if (val < 10000 ) // Insert space if only one digit
145
+ lcd.print (" " );
146
+ lcd.print (val / 1000.0 , 1 );
147
+ lcd.setCursor (7 , 1 );
148
+ lcd.print (F (" V" ));
149
+ }
150
+
151
+ void display_out ()
152
+ {
153
+ lcd.print (output_val[JOYSTICK_LX]);
154
+ lcd.setCursor (4 , 0 );
155
+ lcd.print (output_val[JOYSTICK_LY]);
156
+ lcd.setCursor (0 , 1 );
157
+ lcd.print (output_val[JOYSTICK_RX]);
158
+ lcd.setCursor (4 , 1 );
159
+ lcd.print (output_val[JOYSTICK_RY]);
160
+ }
161
+
162
+ /* ******************************************
163
+ * MENU
164
+ *******************************************/
165
+
94
166
inline void show_menu ()
95
167
{
96
168
static char lx_laststate = 0 ;
97
169
static char lx_action = 0 ;
98
170
static long lasttime = millis ();
99
171
100
- lcd.print (" MODE:" );
172
+ lcd.print (F ( " MODE:" ) );
101
173
lcd.setCursor (0 , 1 );
102
174
switch (mode)
103
175
{
176
+ case MODE_NOTHING:
177
+ lcd.print (F (" None" ));
178
+ break ;
104
179
case MODE_DIGITAL:
105
180
lcd.print (F (" Digital" ));
106
181
break ;
107
182
case MODE_ANALOG:
108
183
lcd.print (F (" Linear" ));
109
184
break ;
110
- case MODE_ANALOG2:
111
- lcd.print (F (" Analog2" ));
185
+ case MODE_EXP:
186
+ lcd.print (F (" Exp" ));
187
+ break ;
188
+ case MODE_SQUARE:
189
+ lcd.print (F (" Square" ));
190
+ break ;
191
+ case MODE_LN:
192
+ lcd.print (F (" Log" ));
193
+ break ;
194
+ case MODE_SQRT:
195
+ lcd.print (F (" Sqrt" ));
112
196
break ;
113
197
default :
114
198
lcd.print (F (" UNKNOWN" ));
@@ -143,18 +227,9 @@ inline void show_menu()
143
227
}
144
228
}
145
229
146
- inline void display_input ()
147
- {
148
- // lcd.clear();
149
- lcd.setCursor (0 , 0 );
150
- lcd.print (joysticks[JOYSTICK_LX]);
151
- lcd.setCursor (4 , 0 );
152
- lcd.print (joysticks[JOYSTICK_LY]);
153
- lcd.setCursor (0 , 1 );
154
- lcd.print (joysticks[JOYSTICK_RX]);
155
- lcd.setCursor (4 , 1 );
156
- lcd.print (joysticks[JOYSTICK_RY]);
157
- }
230
+ /* *******************************************
231
+ * MODE HANDLING
232
+ *********************************************/
158
233
159
234
inline void mode_digital ()
160
235
{
@@ -200,14 +275,61 @@ inline void mode_analog()
200
275
motor_output_analog (MOTOR_RY, joysticks[JOYSTICK_RY]);
201
276
}
202
277
203
- inline void mode_analog2 ()
278
+ inline void mode_exp ()
204
279
{
205
- // motor_output_analog(MOTOR_LX, joysticks[JOYSTICK_LX]);
206
- motor_output_analog_table (MOTOR_LY, joysticks[JOYSTICK_LY], TABLE_SQUARE);
207
- // motor_output_analog(MOTOR_RX, joysticks[JOYSTICK_RX]);
208
- // motor_output_analog(MOTOR_RY, joysticks[JOYSTICK_RY]);
280
+ output_val[JOYSTICK_LX] = map_joy_with_table (joysticks[JOYSTICK_LX], TABLE_EXP);
281
+ output_val[JOYSTICK_LY] = map_joy_with_table (joysticks[JOYSTICK_LY], TABLE_EXP);
282
+ output_val[JOYSTICK_RX] = map_joy_with_table (joysticks[JOYSTICK_RX], TABLE_EXP);
283
+ output_val[JOYSTICK_RY] = map_joy_with_table (joysticks[JOYSTICK_RY], TABLE_EXP);
284
+
285
+ motor_output_analog_raw (MOTOR_LX ,output_val[JOYSTICK_LX]);
286
+ motor_output_analog_raw (MOTOR_LY, output_val[JOYSTICK_LY]);
287
+ motor_output_analog_raw (MOTOR_RX, output_val[JOYSTICK_RX]);
288
+ motor_output_analog_raw (MOTOR_RY, output_val[JOYSTICK_RY]);
209
289
}
210
290
291
+ inline void mode_square ()
292
+ {
293
+ output_val[JOYSTICK_LX] = map_joy_with_table (joysticks[JOYSTICK_LX], TABLE_SQUARE);
294
+ output_val[JOYSTICK_LY] = map_joy_with_table (joysticks[JOYSTICK_LY], TABLE_SQUARE);
295
+ output_val[JOYSTICK_RX] = map_joy_with_table (joysticks[JOYSTICK_RX], TABLE_SQUARE);
296
+ output_val[JOYSTICK_RY] = map_joy_with_table (joysticks[JOYSTICK_RY], TABLE_SQUARE);
297
+
298
+ motor_output_analog_raw (MOTOR_LX, output_val[JOYSTICK_LX]);
299
+ motor_output_analog_raw (MOTOR_LY, output_val[JOYSTICK_LY]);
300
+ motor_output_analog_raw (MOTOR_RX, output_val[JOYSTICK_RX]);
301
+ motor_output_analog_raw (MOTOR_RY, output_val[JOYSTICK_RY]);
302
+ }
303
+
304
+ inline void mode_log ()
305
+ {
306
+ output_val[JOYSTICK_LX] = map_joy_with_table (joysticks[JOYSTICK_LX], TABLE_LOG);
307
+ output_val[JOYSTICK_LY] = map_joy_with_table (joysticks[JOYSTICK_LY], TABLE_LOG);
308
+ output_val[JOYSTICK_RX] = map_joy_with_table (joysticks[JOYSTICK_RX], TABLE_LOG);
309
+ output_val[JOYSTICK_RY] = map_joy_with_table (joysticks[JOYSTICK_RY], TABLE_LOG);
310
+
311
+ motor_output_analog_raw (MOTOR_LX, output_val[JOYSTICK_LX]);
312
+ motor_output_analog_raw (MOTOR_LY, output_val[JOYSTICK_LY]);
313
+ motor_output_analog_raw (MOTOR_RX, output_val[JOYSTICK_RX]);
314
+ motor_output_analog_raw (MOTOR_RY, output_val[JOYSTICK_RY]);
315
+ }
316
+
317
+ inline void mode_sqrt ()
318
+ {
319
+ output_val[JOYSTICK_LX] = map_joy_with_table (joysticks[JOYSTICK_LX], TABLE_SQRT);
320
+ output_val[JOYSTICK_LY] = map_joy_with_table (joysticks[JOYSTICK_LY], TABLE_SQRT);
321
+ output_val[JOYSTICK_RX] = map_joy_with_table (joysticks[JOYSTICK_RX], TABLE_SQRT);
322
+ output_val[JOYSTICK_RY] = map_joy_with_table (joysticks[JOYSTICK_RY], TABLE_SQRT);
323
+
324
+ motor_output_analog_raw (MOTOR_LX, output_val[JOYSTICK_LX]);
325
+ motor_output_analog_raw (MOTOR_LY, output_val[JOYSTICK_LY]);
326
+ motor_output_analog_raw (MOTOR_RX, output_val[JOYSTICK_RX]);
327
+ motor_output_analog_raw (MOTOR_RY, output_val[JOYSTICK_RY]);
328
+ }
329
+
330
+ /* *****************************************************
331
+ * HELPER FUNCTIONS
332
+ ******************************************************/
211
333
void read_joysticks ()
212
334
{
213
335
// Calculate
@@ -239,48 +361,6 @@ void startup_banner()
239
361
lcd.clear ();
240
362
}
241
363
242
- uint16_t update_volt ()
243
- {
244
- lcd.setCursor (0 , 0 );
245
- lcd.print (" V: " );
246
- lcd.print (read_MCU_volt ());
247
- }
248
-
249
- void display_volt ()
250
- {
251
- // Input Voltage
252
- lcd.setCursor (0 , 0 );
253
- lcd.print (F (" IN:" ));
254
- uint16_t val = read_input_volt ();
255
- if (val < 10000 ) // Insert space if only one digit
256
- lcd.print (" " );
257
- lcd.print (val / 1000.0 , 1 );
258
- lcd.setCursor (7 , 0 );
259
- lcd.print (F (" V" ));
260
-
261
- // 5V Voltage
262
- lcd.setCursor (0 , 1 );
263
- lcd.print (F (" 5V:" ));
264
- val = read_MCU_volt ();
265
- if (val < 10000 ) // Insert space if only one digit
266
- lcd.print (" " );
267
- lcd.print (val / 1000.0 , 1 );
268
- lcd.setCursor (7 , 1 );
269
- lcd.print (F (" V" ));
270
- }
271
-
272
- void button_pressedCallback ()
273
- {
274
- if (menu == MENU_SHOW) // Toggle menu visibility
275
- {
276
- menu = MENU_HIDDEN;
277
- eeprom_save ();
278
- }
279
- else
280
- menu = MENU_SHOW;
281
- }
282
-
283
-
284
364
void eeprom_save ()
285
365
{
286
366
// Save Mode
@@ -305,6 +385,21 @@ void read_eeprom()
305
385
display_mode = tmp;
306
386
}
307
387
388
+ /* **************************************************
389
+ * BUTTON HANDLERS
390
+ ****************************************************/
391
+
392
+ void button_pressedCallback ()
393
+ {
394
+ if (menu == MENU_SHOW) // Toggle menu visibility
395
+ {
396
+ menu = MENU_HIDDEN;
397
+ eeprom_save ();
398
+ }
399
+ else
400
+ menu = MENU_SHOW;
401
+ }
402
+
308
403
void button_releasedCallback ()
309
404
{
310
405
0 commit comments