 #define WHEEL_LENGTH	2.050	// Длина окружности колеса в метрах
 #define BIP_DELAY		4		// Сколько итераций пищать (* 500 / 10000)
 
+/*Аналоговые выводы*/
+#define ACTION_BUTTON	2
 #define BUTTON_OK		256
 #define BUTTON_LEFT		680
 #define BUTTON_RIGHT	341
 
 /*Цифровые выводы*/
 #define BIP				4
-
-/*Аналоговые выводы*/
-
-
-bool			alarm_state = false;	// Для сигнализации
+#define BUTTON_CANCEL	341
+#define BUTTON_SIGNAL	341
+
+bool			alarm_state		= false,	// Для сигнализации
+				bat_external	= true;
 
 unsigned long	lastturn;	// Время последнего обращения
 
-float			speed_now,	// Скорость
-				distance;	// Расстояние
-
-byte			system_state = 0;
+float			speed_now		= 0.0,	// Скорость
+				distance		= 0.0;	// Расстояние
+
+byte			bat_percent		= 100,
+				system_state	= 0;
+
+#define LOAD_STATE		0
+#define SPEED_STATE		1
+#define MENU_STATE		2
+#define SETTINGS_STATE	3
 
 sys_conf		btc_config;	// Конфигурация системы
+
+unsigned int key_pressed() {
+	int key;
+
+	while (true) {
+
+		while ((key = analogRead(ACTION_BUTTON)) > 1000);
+
+		#ifdef DEBUG
+		Serial.println(key);
+		#endif
+
+		if ((key >= BUTTON_OK - 10) && (key <= BUTTON_OK + 10)) {
+			key	= BUTTON_OK;
+			break;
+		} else if ((key >= BUTTON_LEFT - 10) && (key <= BUTTON_LEFT + 10)) {
+			key	= BUTTON_LEFT;
+			break;
+		} else if ((key >= BUTTON_RIGHT - 10) && (key <= BUTTON_RIGHT + 10)) {
+			key	= BUTTON_RIGHT;
+			break;
+		}
+	}
+
+	while (analogRead(ACTION_BUTTON) < 1000);
+
+	delay(10);
+
+	return key;
+}
+
+void road_mode() {	// Режим спидометра
+	float	speed_old		= 0.0;
+
+	lcd.clear();
+	lcd.print("km/h: ");
+
+	lcd.setCursor(0, 1);
+	lcd.print("km:");
+
+	lcd.setCursor(15, 1);
+	lcd.write(0);
+
+	while (true) {
+		if (speed_old > speed_now) {
+			lcd.setCursor(5, 0);
+			lcd.print("    ");
+		}
+		lcd.setCursor(5, 0);
+		lcd.print(speed_now);
+		speed_old	= speed_now;
+
+		lcd.setCursor(11, 0);
+		lcd.print("00:00");
+
+		lcd.setCursor(3, 1);
+		lcd.print(distance);
+
+		lcd.setCursor(12, 1);
+		if (bat_percent == 100) {
+			lcd.print("100");
+		} else if ((bat_percent > 100) && (bat_percent <= 10)){
+			lcd.print(" ");
+			lcd.print(bat_percent);
+		} else if (bat_percent > 10){
+			lcd.print("  ");
+			lcd.print(bat_percent);
+		}
+
+		if ((analogRead(ACTION_BUTTON) >= BUTTON_OK - 10) && (analogRead(ACTION_BUTTON) <= BUTTON_OK + 10)) {
+			while (analogRead(ACTION_BUTTON) < 1000);
+			delay(50);
+			lcd.clear();
+			system_state	= MENU_STATE;
+			break;
+		}
+
+		delay(500);
+	}
+}
+
+byte settings(byte all_element, char settings_array[][15]) {
+	lcd.clear();
+
+	byte	selected		= 0,
+			on_display		= 0;
+
+	bool	key_pressed_ok	= true;
+
+	while (true) {
+		if (key_pressed_ok) {
+			if (selected == on_display) {
+				lcd.setCursor(0,0);
+				lcd.print(">");
+				lcd.setCursor(0,1);	
+				lcd.print(" ");
+			} else {
+				lcd.setCursor(0,1);	
+				lcd.print(">");
+				lcd.setCursor(0,0);
+				lcd.print(" ");
+			}
+
+			lcd.setCursor(1,0);
+			lcd.print(settings_array[on_display]);
+
+			if (on_display + 1 < all_element) {
+				lcd.setCursor(1,1);
+				lcd.print(settings_array[on_display + 1]);
+			}
+		}
+
+		key_pressed_ok	= true;
+
+		switch (key_pressed()) {
+
+			case BUTTON_OK:		return selected;
+								break;
+
+			case BUTTON_LEFT:	if (selected != 0) {
+									if (selected == on_display) {
+										lcd.clear();
+										on_display	-= 2;
+									}
+
+									selected--;
+								}
+								break;
+
+			case BUTTON_RIGHT:	if (selected < all_element - 1) {
+									if (selected == (on_display + 1)) {
+										lcd.clear();
+										on_display	+= 2;
+									}
+
+									selected++;
+								}
+								break;
+
+			default:			key_pressed_ok	= false;
+								break;
+		}
+	}
+}
 
 void setup() {
 	#ifdef DEBUG




void input_password() {
	lcd.clear();			// Очистка экрана
	lcd.setCursor(0, 0);	// Установка указателя в левый верхний угол
	lcd.print("Password:");

	lcd.setCursor(0,0);
	lcd.print("Complete!");
	delay(2000);
}*/