replaced 7Seg Library
This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| #define FREQUENCY_868 | ||||
|  | ||||
| #include <Arduino.h> | ||||
| #include <TM1637Display.h> | ||||
| #include <TM1637.h> | ||||
| #include <Ticker.h> | ||||
| #include <DNSServer.h> | ||||
| #include <ESP8266WiFi.h> | ||||
| @@ -39,9 +39,9 @@ PCF8574 i2c_io(I2C_IO_ADDRESS); | ||||
| Adafruit_INA219 ina219; | ||||
| LoRa_E220 e220ttl(GPIO_LORA_TX, GPIO_LORA_RX, GPIO_LORA_AUX, 3, 4); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX AUX M0 M1 | ||||
|  | ||||
| TM1637Display disp_FAC_1(GPIO_7SEG_CLK, GPIO_7SEG_EN_FAC1); | ||||
| TM1637Display disp_FAC_2(GPIO_7SEG_CLK, GPIO_7SEG_EN_FAC2); | ||||
| TM1637Display disp_FAC_3(GPIO_7SEG_CLK, GPIO_7SEG_EN_FAC3); | ||||
| TM1637 disp_FAC_1(GPIO_7SEG_CLK, GPIO_7SEG_EN_FAC1); | ||||
| TM1637 disp_FAC_2(GPIO_7SEG_CLK, GPIO_7SEG_EN_FAC2); | ||||
| TM1637 disp_FAC_3(GPIO_7SEG_CLK, GPIO_7SEG_EN_FAC3); | ||||
|  | ||||
| #ifdef CAPTIVE | ||||
| DNSServer dnsServer; | ||||
| @@ -57,6 +57,7 @@ void SystemShutdown(); | ||||
| void SetBatteryType(batteryType_t type); | ||||
| void ProcessKeyCombos(bool *btnState); | ||||
| void OverrideDisplay(const uint8_t *message, uint32_t time); | ||||
| uint32_t getESPChipID(); | ||||
|  | ||||
| void tmrCallback_StatusSender(); | ||||
| Ticker tmrStatusSender(tmrCallback_StatusSender, 30000, 0, MILLIS); | ||||
| @@ -74,24 +75,11 @@ void tmrCallback_WiFiMaintainConnection(); | ||||
| Ticker tmrWiFiMaintainConnection(tmrCallback_WiFiMaintainConnection, 1000, 0, MILLIS); | ||||
| #endif | ||||
|  | ||||
| uint32_t getESPChipID(); | ||||
|  | ||||
| uint8_t Faction_1_dot = 0; | ||||
| uint8_t Faction_2_dot = 0; | ||||
| uint8_t Faction_3_dot = 0; | ||||
|  | ||||
| uint32_t DisplayOverrideFlag = 0; | ||||
| uint8_t *DisplayOverrideValue = 0; | ||||
| char DisplayOverrideValue[5] = {0}; | ||||
|  | ||||
| Globals_t globals; | ||||
|  | ||||
| const uint8_t sevenSeg_bat[] = {0x00, 0b01111100, 0b01110111, 0b01111000}; | ||||
| const uint8_t sevenSeg_low[] = {0b00111000, 0b01011100, 0x00, 0x00}; | ||||
| const uint8_t sevenSeg_net[] = {0b01010100, 0b01111001, 0b01111000, 0x00}; | ||||
| const uint8_t sevenSeg_ota[] = {0x3F, 0x78, 0x77, 0x00}; | ||||
| const uint8_t sevenSeg_flsh[] = {0x71, 0x38, 0x6D, 0x76}; | ||||
| const uint8_t sevenSeg_file[] = {0x71, 0x30, 0x38, 0x79}; | ||||
|  | ||||
| void setMPins_Helper(int pin, int status) | ||||
| { | ||||
| 	i2c_io.write(pin, status); | ||||
| @@ -146,7 +134,7 @@ void setup() | ||||
| 	ResponseStructContainer cMi; | ||||
| 	cMi = e220ttl.getModuleInformation(); | ||||
| 	// It's important get information pointer before all other operation | ||||
| 	ModuleInformation mi = *(ModuleInformation *)cMi.data; | ||||
| 	// ModuleInformation mi = *(ModuleInformation *)cMi.data; | ||||
|  | ||||
| 	Serial.println(cMi.status.getResponseDescription()); | ||||
| 	Serial.println(cMi.status.code); | ||||
| @@ -203,31 +191,30 @@ void setup() | ||||
|  | ||||
| 	ArduinoOTA.onStart([]() | ||||
| 					   { | ||||
|                        disp_FAC_1.setBrightness(7); | ||||
|                        disp_FAC_2.setBrightness(7); | ||||
|                        disp_FAC_3.setBrightness(7); | ||||
|                        disp_FAC_1.setSegments(sevenSeg_ota); | ||||
|                        disp_FAC_3.clear(); | ||||
|                        disp_FAC_1.setBrightness(5); | ||||
|                        disp_FAC_2.setBrightness(5); | ||||
|                        disp_FAC_3.setBrightness(5); | ||||
|                        disp_FAC_1.display("OTA "); | ||||
|                        disp_FAC_3.clearScreen(); | ||||
|                         | ||||
|                        if (ArduinoOTA.getCommand() == U_FLASH) | ||||
|                        { | ||||
|                          disp_FAC_2.setSegments(sevenSeg_flsh); | ||||
|                          disp_FAC_2.display("FLSH"); | ||||
|                        } | ||||
|                        else | ||||
|                        { | ||||
|                          disp_FAC_2.setSegments(sevenSeg_file); | ||||
|                          disp_FAC_2.display("FILE"); | ||||
|                          LittleFS.end(); | ||||
|                        } }); | ||||
|  | ||||
| 	ArduinoOTA.onEnd([]() | ||||
| 					 {  | ||||
|                        const uint8_t seg_done[] = {0x5E, 0x3F, 0x54, 0x79}; | ||||
|                        disp_FAC_1.setSegments(seg_done); | ||||
|                        disp_FAC_2.clear(); | ||||
|                        disp_FAC_3.clear(); }); | ||||
|                        disp_FAC_1.display("DONE"); | ||||
|                        disp_FAC_2.clearScreen(); | ||||
|                        disp_FAC_3.clearScreen(); }); | ||||
|  | ||||
| 	ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) | ||||
| 						  { disp_FAC_3.showNumberDecEx((progress / (total / 100))); }); | ||||
| 						  { disp_FAC_3.display((progress / (total / 100))); }); | ||||
|  | ||||
| 	ArduinoOTA.onError([](ota_error_t error) | ||||
| 					   { | ||||
| @@ -250,6 +237,13 @@ void setup() | ||||
|  | ||||
| 	initWebUI(); | ||||
|  | ||||
| 	disp_FAC_1.init(); | ||||
| 	disp_FAC_1.setBrightness(5); | ||||
| 	disp_FAC_2.init(); | ||||
| 	disp_FAC_2.setBrightness(5); | ||||
| 	disp_FAC_3.init(); | ||||
| 	disp_FAC_3.setBrightness(5); | ||||
|  | ||||
| 	tmrEEPROMCyclicPDS.start(); | ||||
| 	tmrFactionTicker.start(); | ||||
| 	tmrInputGetter.start(); | ||||
| @@ -258,6 +252,7 @@ void setup() | ||||
|  | ||||
| void loop() | ||||
| { | ||||
|  | ||||
| 	if (e220ttl.available() > 1) | ||||
| 	{ | ||||
| 		ResponseContainer rc = e220ttl.receiveMessageRSSI(); | ||||
| @@ -279,13 +274,13 @@ void loop() | ||||
| 	tmrEEPROMCyclicPDS.update(); | ||||
| 	tmrFactionTicker.update(); | ||||
| 	tmrInputGetter.update(); | ||||
| 	tmrStatusSender.update(); | ||||
| 	tmrPowerMonitor.update(); | ||||
|  | ||||
| 	ArduinoOTA.handle(); | ||||
| 	SevenSeg_Output(); | ||||
| 	EEPROM_Process(); | ||||
|  | ||||
| 	tmrStatusSender.update(); | ||||
| 	tmrPowerMonitor.update(); | ||||
|  | ||||
| #ifdef CAPTIVE | ||||
| 	dnsServer.processNextRequest(); | ||||
| #endif | ||||
| @@ -294,6 +289,7 @@ void loop() | ||||
| #endif | ||||
| 	if (globals.systemStatus == sysStat_Shutdown) | ||||
| 		SystemShutdown(); | ||||
|  | ||||
| 	yield(); | ||||
| } | ||||
|  | ||||
| @@ -307,39 +303,51 @@ String macToString(const unsigned char *mac) | ||||
|  | ||||
| void SevenSeg_Output() | ||||
| { | ||||
| 	char sevenSegBuff[5] = ""; | ||||
|  | ||||
| 	if (DisplayOverrideFlag > millis()) | ||||
| 	{ | ||||
| 		disp_FAC_1.setBrightness(7); | ||||
| 		disp_FAC_2.setBrightness(7); | ||||
| 		disp_FAC_3.setBrightness(7); | ||||
| 		disp_FAC_1.setSegments(DisplayOverrideValue); | ||||
| 		disp_FAC_2.clear(); | ||||
| 		disp_FAC_3.clear(); | ||||
| 		disp_FAC_1.setBrightness(5); | ||||
| 		disp_FAC_2.setBrightness(5); | ||||
| 		disp_FAC_3.setBrightness(5); | ||||
| 		disp_FAC_1.display(String(DisplayOverrideValue)); | ||||
| 		disp_FAC_2.clearScreen(); | ||||
| 		disp_FAC_3.clearScreen(); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (globals.battery_level < BAT_LOW_PERCENT && millis() % 10000 > 7000) | ||||
| 		{ | ||||
| 			disp_FAC_1.setBrightness(0); | ||||
| 			disp_FAC_2.setBrightness(0); | ||||
| 			disp_FAC_3.setBrightness(0); | ||||
|  | ||||
| 			disp_FAC_1.setSegments(sevenSeg_bat); | ||||
| 			disp_FAC_2.setSegments(sevenSeg_low); | ||||
| 			if (millis() % 3000 < 1500) | ||||
| 				disp_FAC_3.showNumberDec(globals.battery_level); | ||||
| 				snprintf(sevenSegBuff, sizeof(sevenSegBuff), "%4d", globals.battery_level); | ||||
| 			else | ||||
| 				disp_FAC_3.showNumberDecEx(globals.loadvoltage * 100, 0x40); | ||||
| 				snprintf(sevenSegBuff, sizeof(sevenSegBuff), "%4s", String(globals.loadvoltage, 1).c_str()); | ||||
|  | ||||
| 			disp_FAC_1.setBrightness(1); | ||||
| 			disp_FAC_1.display(" BAT"); | ||||
|  | ||||
| 			disp_FAC_2.setBrightness(1); | ||||
| 			disp_FAC_2.display("LOW "); | ||||
|  | ||||
| 			disp_FAC_3.setBrightness(1); | ||||
| 			disp_FAC_3.display(String(sevenSegBuff)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			disp_FAC_1.setBrightness(PersistenceData.activeFaction == FACTION_1 ? 7 : 0); | ||||
| 			disp_FAC_2.setBrightness(PersistenceData.activeFaction == FACTION_2 ? 7 : 0); | ||||
| 			disp_FAC_3.setBrightness(PersistenceData.activeFaction == FACTION_3 ? 7 : 0); | ||||
| 			disp_FAC_1.setBrightness(PersistenceData.activeFaction == FACTION_1 ? 5 : 1); | ||||
| 			disp_FAC_1.refresh(); | ||||
| 			snprintf(sevenSegBuff, sizeof(sevenSegBuff), "%4d", PersistenceData.faction_1_timer / 60); | ||||
| 			disp_FAC_1.display(String(sevenSegBuff), false, false); | ||||
|  | ||||
| 			disp_FAC_1.showNumberDecEx(PersistenceData.faction_1_timer / 60, Faction_1_dot, true, 4, 0); | ||||
| 			disp_FAC_2.showNumberDecEx(PersistenceData.faction_2_timer / 60, Faction_2_dot, true, 4, 0); | ||||
| 			disp_FAC_3.showNumberDecEx(PersistenceData.faction_3_timer / 60, Faction_3_dot, true, 4, 0); | ||||
| 			disp_FAC_2.setBrightness(PersistenceData.activeFaction == FACTION_2 ? 5 : 1); | ||||
| 			disp_FAC_2.refresh(); | ||||
| 			snprintf(sevenSegBuff, sizeof(sevenSegBuff), "%4d", PersistenceData.faction_2_timer / 60); | ||||
| 			disp_FAC_2.display(String(sevenSegBuff), false, false); | ||||
|  | ||||
| 			disp_FAC_3.setBrightness(PersistenceData.activeFaction == FACTION_3 ? 5 : 1); | ||||
| 			disp_FAC_3.refresh(); | ||||
| 			snprintf(sevenSegBuff, sizeof(sevenSegBuff), "%4d", PersistenceData.faction_3_timer / 60); | ||||
| 			disp_FAC_3.display(String(sevenSegBuff), false, false); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -350,23 +358,14 @@ void tmrCallback_FactionTicker() | ||||
| 	{ | ||||
| 	case FACTION_1: | ||||
| 		PersistenceData.faction_1_timer++; | ||||
| 		Faction_1_dot = Faction_1_dot == 0x80 || Faction_1_dot == 0x00 ? 0x10 : Faction_1_dot << 1; | ||||
| 		Faction_2_dot = 0; | ||||
| 		Faction_3_dot = 0; | ||||
| 		break; | ||||
|  | ||||
| 	case FACTION_2: | ||||
| 		PersistenceData.faction_2_timer++; | ||||
| 		Faction_2_dot = Faction_2_dot == 0x80 || Faction_2_dot == 0x00 ? 0x10 : Faction_2_dot << 1; | ||||
| 		Faction_1_dot = 0; | ||||
| 		Faction_3_dot = 0; | ||||
| 		break; | ||||
|  | ||||
| 	case FACTION_3: | ||||
| 		PersistenceData.faction_3_timer++; | ||||
| 		Faction_3_dot = Faction_3_dot == 0x80 || Faction_3_dot == 0x00 ? 0x10 : Faction_3_dot << 1; | ||||
| 		Faction_1_dot = 0; | ||||
| 		Faction_2_dot = 0; | ||||
| 		break; | ||||
|  | ||||
| 	default: | ||||
| @@ -377,7 +376,7 @@ void tmrCallback_FactionTicker() | ||||
| void tmrCallback_InputGetter() | ||||
| { | ||||
| 	static bool btnState[3]; | ||||
| 	static bool btnlastState[3]; | ||||
| 	uint8_t keysPressed = 0; | ||||
|  | ||||
| 	btnState[0] = i2c_io.readButton(I2C_IO_BTN_FAC1); | ||||
| 	btnState[1] = i2c_io.readButton(I2C_IO_BTN_FAC2); | ||||
| @@ -385,20 +384,9 @@ void tmrCallback_InputGetter() | ||||
|  | ||||
| 	ProcessKeyCombos(btnState); | ||||
|  | ||||
| 	for (int i = 0; i < sizeof(btnState); i++) | ||||
| 	{ | ||||
| 		if (btnlastState[i] != btnState[i]) | ||||
| 		{ | ||||
| 			btnlastState[i] = btnState[i]; | ||||
| 			Serial.printf("Button %d changed to %d\n", i, btnState[i]); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	uint8_t keysPressed = 0; | ||||
|  | ||||
| 	keysPressed = +btnState[0] == FAC_1_TRG_PRESSED ? 1 : 0; | ||||
| 	keysPressed = +btnState[1] == FAC_2_TRG_PRESSED ? 1 : 0; | ||||
| 	keysPressed = +btnState[2] == FAC_3_TRG_PRESSED ? 1 : 0; | ||||
| 	keysPressed = keysPressed + (btnState[0] == FAC_1_TRG_PRESSED ? 1 : 0); | ||||
| 	keysPressed = keysPressed + (btnState[1] == FAC_2_TRG_PRESSED ? 1 : 0); | ||||
| 	keysPressed = keysPressed + (btnState[2] == FAC_3_TRG_PRESSED ? 1 : 0); | ||||
|  | ||||
| 	if (keysPressed > 1) | ||||
| 	{ | ||||
| @@ -408,13 +396,31 @@ void tmrCallback_InputGetter() | ||||
| 	} | ||||
|  | ||||
| 	if (btnState[0] == FAC_1_TRG_PRESSED) | ||||
| 	{ | ||||
| 		if (PersistenceData.activeFaction != FACTION_1) | ||||
| 		{ | ||||
| 			Serial.println("Faction 1 captured !"); | ||||
| 		} | ||||
| 		PersistenceData.activeFaction = FACTION_1; | ||||
| 	} | ||||
|  | ||||
| 	if (btnState[1] == FAC_2_TRG_PRESSED) | ||||
| 	{ | ||||
| 		if (PersistenceData.activeFaction != FACTION_2) | ||||
| 		{ | ||||
| 			Serial.println("Faction 2 captured !"); | ||||
| 		} | ||||
| 		PersistenceData.activeFaction = FACTION_2; | ||||
| 	} | ||||
|  | ||||
| 	if (btnState[2] == FAC_3_TRG_PRESSED) | ||||
| 	{ | ||||
| 		if (PersistenceData.activeFaction != FACTION_3) | ||||
| 		{ | ||||
| 			Serial.println("Faction 3 captured !"); | ||||
| 		} | ||||
| 		PersistenceData.activeFaction = FACTION_3; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void printParameters(struct Configuration configuration) | ||||
| @@ -513,15 +519,15 @@ void tmrCallback_PowerMonitor() | ||||
| 	const int bat_max_3s = 1260; | ||||
|  | ||||
| 	float shuntvoltage = 0; | ||||
| 	//float current_mA = 0; | ||||
| 	// float current_mA = 0; | ||||
| 	float busvoltage = 0; | ||||
| 	//float power_mW = 0; | ||||
| 	// float power_mW = 0; | ||||
| 	int battery_level = 0; | ||||
|  | ||||
| 	shuntvoltage = ina219.getShuntVoltage_mV(); | ||||
| 	busvoltage = ina219.getBusVoltage_V(); | ||||
| 	//current_mA = ina219.getCurrent_mA(); | ||||
| 	//power_mW = ina219.getPower_mW(); | ||||
| 	// current_mA = ina219.getCurrent_mA(); | ||||
| 	// power_mW = ina219.getPower_mW(); | ||||
| 	globals.loadvoltage = busvoltage + (shuntvoltage / 1000); | ||||
| 	switch (ConfigData.batteryType) | ||||
| 	{ | ||||
| @@ -607,10 +613,10 @@ void SetBatteryType(batteryType_t type) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void OverrideDisplay(const uint8_t *message, uint32_t time) | ||||
| void OverrideDisplay(const char *message, uint32_t time) | ||||
| { | ||||
| 	DisplayOverrideFlag = millis() + time; | ||||
| 	DisplayOverrideValue = (uint8_t *)message; | ||||
| 	strcpy(DisplayOverrideValue, message); | ||||
| } | ||||
|  | ||||
| uint32_t getESPChipID() | ||||
| @@ -629,58 +635,59 @@ uint32_t getESPChipID() | ||||
|  | ||||
| void ProcessKeyCombos(bool *btnState) | ||||
| { | ||||
|   typedef enum | ||||
|   { | ||||
|     KEY_PRESSED, | ||||
|     KEY_RELEASED | ||||
|   } keyStatus_t; | ||||
| 	typedef enum | ||||
| 	{ | ||||
| 		KEY_PRESSED, | ||||
| 		KEY_RELEASED | ||||
| 	} keyStatus_t; | ||||
|  | ||||
|   static keyStatus_t keyStatus_Fac1 = KEY_RELEASED; | ||||
|   static uint8_t keyCount_Fac1 = 0; | ||||
|   static keyStatus_t keyStatus_Fac2 = KEY_RELEASED; | ||||
|   static uint8_t keyCount_Fac2 = 0; | ||||
|   static keyStatus_t keyStatus_Fac3 = KEY_RELEASED; | ||||
| 	static keyStatus_t keyStatus_Fac1 = KEY_RELEASED; | ||||
| 	static uint8_t keyCount_Fac1 = 0; | ||||
| 	static keyStatus_t keyStatus_Fac2 = KEY_RELEASED; | ||||
| 	static uint8_t keyCount_Fac2 = 0; | ||||
| 	static keyStatus_t keyStatus_Fac3 = KEY_RELEASED; | ||||
|  | ||||
|   if (btnState[2] == FAC_3_TRG_PRESSED) | ||||
|   { | ||||
|     keyStatus_Fac3 = KEY_PRESSED; | ||||
| 	if (btnState[2] == FAC_3_TRG_PRESSED) | ||||
| 	{ | ||||
| 		keyStatus_Fac3 = KEY_PRESSED; | ||||
|  | ||||
|     // Process FactionKey 1 ComboCounter | ||||
|     if (btnState[0] == FAC_1_TRG_PRESSED && keyStatus_Fac1 == KEY_RELEASED) | ||||
|     { | ||||
|       keyStatus_Fac1 = KEY_PRESSED; | ||||
|       keyCount_Fac1++; | ||||
|     } | ||||
| 		// Process FactionKey 1 ComboCounter | ||||
| 		if (btnState[0] == FAC_1_TRG_PRESSED && keyStatus_Fac1 == KEY_RELEASED) | ||||
| 		{ | ||||
| 			keyStatus_Fac1 = KEY_PRESSED; | ||||
| 			keyCount_Fac1++; | ||||
| 		} | ||||
|  | ||||
|     if (btnState[0] != FAC_1_TRG_PRESSED) | ||||
|       keyStatus_Fac1 = KEY_RELEASED; | ||||
| 		if (btnState[0] != FAC_1_TRG_PRESSED) | ||||
| 			keyStatus_Fac1 = KEY_RELEASED; | ||||
|  | ||||
|     // Process FactionKey 2 ComboCounter | ||||
|     if (btnState[1] == FAC_2_TRG_PRESSED && keyStatus_Fac2 == KEY_RELEASED) | ||||
|     { | ||||
|       keyStatus_Fac2 = KEY_PRESSED; | ||||
|       keyCount_Fac2++; | ||||
|     } | ||||
| 		// Process FactionKey 2 ComboCounter | ||||
| 		if (btnState[1] == FAC_2_TRG_PRESSED && keyStatus_Fac2 == KEY_RELEASED) | ||||
| 		{ | ||||
| 			keyStatus_Fac2 = KEY_PRESSED; | ||||
| 			keyCount_Fac2++; | ||||
| 		} | ||||
|  | ||||
|     if (btnState[1] != FAC_2_TRG_PRESSED) | ||||
|       keyStatus_Fac2 = KEY_RELEASED; | ||||
|   } | ||||
| 		if (btnState[1] != FAC_2_TRG_PRESSED) | ||||
| 			keyStatus_Fac2 = KEY_RELEASED; | ||||
| 	} | ||||
|  | ||||
|   if (btnState[2] != FAC_3_TRG_PRESSED && keyStatus_Fac3 == KEY_PRESSED) | ||||
|   { | ||||
|     Serial.printf("KeyCombo 1: %d | 2: %d\n", keyCount_Fac1, keyCount_Fac2); | ||||
| 	if (btnState[2] != FAC_3_TRG_PRESSED && keyStatus_Fac3 == KEY_PRESSED) | ||||
| 	{ | ||||
| 		if (keyCount_Fac1 > 0 || keyCount_Fac2 > 0) | ||||
| 			Serial.printf("KeyCombo 1: %d | 2: %d\n", keyCount_Fac1, keyCount_Fac2); | ||||
|  | ||||
|     if (keyCount_Fac1 == 2 && keyCount_Fac2 == 2) | ||||
|     { | ||||
|       Serial.println("KeyCombo: WiFi AP ON"); | ||||
|       OverrideDisplay(sevenSeg_net, 5000); | ||||
|       toggleWiFiAP(false); | ||||
|     } | ||||
| 		if (keyCount_Fac1 == 2 && keyCount_Fac2 == 2) | ||||
| 		{ | ||||
| 			Serial.println("KeyCombo: WiFi AP ON"); | ||||
| 			OverrideDisplay("NET ", 5000); | ||||
| 			toggleWiFiAP(false); | ||||
| 		} | ||||
|  | ||||
|     keyCount_Fac1 = 0; | ||||
|     keyCount_Fac2 = 0; | ||||
|     keyStatus_Fac1 = KEY_RELEASED; | ||||
|     keyStatus_Fac2 = KEY_RELEASED; | ||||
|     keyStatus_Fac3 = KEY_RELEASED; | ||||
|   } | ||||
| 		keyCount_Fac1 = 0; | ||||
| 		keyCount_Fac2 = 0; | ||||
| 		keyStatus_Fac1 = KEY_RELEASED; | ||||
| 		keyStatus_Fac2 = KEY_RELEASED; | ||||
| 		keyStatus_Fac3 = KEY_RELEASED; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user