gas_sensor

gas sensor project
git clone _git@git.tontus.eu/gas_sensor.git
Log | Files | Refs

menu.cpp (2393B)


      1 /* menu system
      2  *
      3  */
      4 
      5 #include <Arduino.h>
      6 
      7 #include "../include/menu.h"
      8 #include "../include/display.h"
      9 #include "../include/sensor.h"
     10 
     11 /* function declarations */
     12 static int  get_input(void);
     13 static int  goto_main(void);
     14 static void print_main(void);
     15 static void select_menu_item(int input);
     16 static void menu_item1(void);
     17 static void menu_item2(void);
     18 static void menu_item3(void);
     19 static void print_live(void);
     20 
     21 /* function implementations */
     22 static int
     23 get_input(void)
     24 {
     25 	/* implement handling of physical buttons */
     26 	int input = 0;
     27 
     28 	while (Serial.available() <= 0) { delay(100); }
     29 
     30 	if (Serial.available() > 0)
     31 		input = Serial.parseInt();
     32 
     33 	return input;
     34 }
     35 
     36 static int
     37 goto_main(void)
     38 {
     39 	char input = 0;
     40 
     41 	dsp_print_gotomain();
     42 	do {
     43 		Serial.print("Enter 'b' to return.\n\r");
     44 		while (Serial.available() <= 0) { delay(10); }
     45 		input = Serial.read();
     46 	} while (input != 'b');
     47 	menu_main();
     48 }
     49 
     50 static void
     51 print_main(void)
     52 {
     53 	dsp_print_main();
     54 	Serial.print("\e[1;1H\e[2J");
     55 	Serial.print("Main menu\n\r");
     56 	Serial.print("1. Analyze\n\r");
     57 	Serial.print("2. Config\n\r");
     58 	Serial.print("3. Params\n\r");
     59 }
     60 
     61 static void
     62 select_menu_item(int input)
     63 {
     64 	switch (input) {
     65 	case 1:
     66 		menu_item1();
     67 		break;
     68 	case 2:
     69 		menu_item2();
     70 		break;
     71 	case 3:
     72 		menu_item3();
     73 		break;
     74 	default:
     75 		Serial.print("Invalid input!\n\r");
     76 		goto_main();
     77 		break;
     78 	}
     79 }
     80 
     81 static void
     82 menu_item1(void)
     83 {
     84 	int res = 0;
     85 
     86 	Serial.print("\e[1;1H\e[2J");
     87 	dsp_print_menu1();
     88 	Serial.print("Wait for analysis\n\r");
     89 	res = sensor_analyze();
     90 	dsp_print_result(res);
     91 	goto_main();
     92 }
     93 
     94 static void
     95 menu_item2(void)
     96 {
     97 	Serial.print("\e[1;1H\e[2J");
     98 	dsp_print_menu2();
     99 	Serial.println("You chose item 2.");
    100 	print_live();
    101 	goto_main();
    102 }
    103 
    104 static void
    105 menu_item3(void)
    106 {
    107 	Serial.print("\e[1;1H\e[2J");
    108 	dsp_print_menu3();
    109 	Serial.println("You chose item 3.");
    110 	goto_main();
    111 }
    112 
    113 static void
    114 print_live(void)
    115 {
    116 	int rx, in = 0;
    117 
    118 	/* implement for loop to print from all sensors */
    119 	while (Serial.available() <= 0) {
    120 		rx = sensor_read(0);
    121 		dsp_print_result(rx);
    122 		Serial.print("\e[1;1H\e[2J");
    123 		Serial.print("Sensor: ");
    124 		Serial.print(rx);
    125 		delay(500);
    126 	}
    127 
    128 	/* don't clog buffer */
    129 	if (Serial.available() > 0)
    130 		in = Serial.parseInt();
    131 
    132 	Serial.print("\n\r");
    133 }
    134 
    135 void
    136 menu_main(void)
    137 {
    138 	int input = 0;
    139 
    140 	print_main();
    141 	input = get_input();
    142 	select_menu_item(input);
    143 	Serial.println("You're not supposed to be here!");
    144 }
    145