#include "static.h" #include "tools.h" #define u8 uint8_t u8 mode = mode_bluetooth; //0: nrf, 1: ble, 2: debug #include BleX blex("Gamecontrolle","pikiexe"); //loop time unsigned long lastTime = 0; unsigned long currentTime = 0; //light CRGB leds[NUM_LEDS]; bool firstLaunch = true; #include Preferences preferences; #include "input.h" #include "mode.h" bool radio_connected = false; bool bluetooth_connected = false; void setup() { pinMode(relay_1, OUTPUT); digitalWrite(relay_1, HIGH); delay(100); pinMode(relay_2, OUTPUT); Serial.begin(115200); //init storage and reading settings preferences.begin("data", false); firstLaunch = preferences.getUChar("first",1); preferences.putUChar("first",0); //mode = preferences.getChar("mode",mode_bluetooth); delay(100); iniInput(); iniNRF(); iniBLE(); changeMode(mode_bluetooth); } bool power_btn_last_state = true; bool power_btn_dble_possible = false; unsigned long power_btn_since = 0; bool shutdown = false; unsigned long shutdown_since = 0; u8 rpiStatus = rpi_off; bool rpiTarget = false; //true -> running unsigned long rpiSince = 0; void loop() { handelInput(); handelRpi(); if(power_btn_last_state != state[4]){ if(power_btn_since==0){ power_btn_since=millis(); power_btn_last_state = false; }else if(power_btn_last_state){ /*if(shutdown== true){ digitalWrite(relay_1, LOW); delay(10000); }*/ unsigned long click_time = millis()-power_btn_since; if(click_timeshutdown"); SYSshutdown(); } } power_btn_last_state = state[4]; power_btn_since=millis(); } if(!power_btn_last_state && power_btn_dble_possible && (millis()-power_btn_since >= double_click_brake)){ power_btn_since=millis(); power_btn_dble_possible = false; Serial.println("single_click"); innerModeClick(); } /*if(shutdown&&millis()-shutdown_since>30000){ digitalWrite(relay_1, LOW); delay(10000); }*/ } void SYSshutdown(){ LEDsetShutdown(); NRFshutdown(); if(rpiStatus == rpi_starting||rpiStatus==rpi_on||rpiStatus==rpi_stoping){ rpiShutdown(); power_btn_last_state = false; bool crash = false; while(rpiStatus!=rpi_off&&rpiStatus!=rpi_unknown&&!crash){ btns.readAll(state,values); if(power_btn_last_state != state[4]){ if(!state[4]){ crash = true; } } power_btn_last_state = state[4]; handelRpi(); } } delay(500); digitalWrite(relay_2, LOW); digitalWrite(relay_1, LOW); delay(10000); } void rpiShutdown(){ rpiTarget = false; if(rpiStatus==rpi_unknown){ rpiStatus=rpi_off; } handelRpi(); } void rpiBoot(){ rpiTarget = true; handelRpi(); } #include "handelSerial.h" void handelRpi(){ if(rpiStatus==rpi_starting){ if(millis()-rpiSince>rpi_max_boot_time){ rpiStatus = rpi_unknown; rpiSince = millis(); } }else if(rpiStatus==rpi_stoping){ if(millis()-rpiSince>rpi_stop_time){ rpiStatus = rpi_off; digitalWrite(relay_2, LOW); rpiSince = millis(); } }else if(rpiStatus == rpi_off){ if(rpiTarget){ rpiStatus = rpi_starting; rpiSince = millis(); digitalWrite(relay_2, HIGH); } }else if(rpiStatus == rpi_on){ if(!rpiTarget){ Serial.println("shutdown"); rpiStatus = rpi_stoping; rpiSince = millis(); } if(millis()-rpiSince>rpi_max_black_time){ rpiStatus = rpi_unknown; rpiSince = millis(); } } if (Serial.available()>0){ handelSerial(); } //digitalWrite(relay_2, HIGH); } /*void handelSerial(){ byte cmd = Serial.read(); if(cmd==cmd_check){ Serial.write(cmd_check); Serial.write(Serial_end); } if(cmd==cmd_setMode){ byte nmode = Serial.read(); Serial.write(cmd_setMode); if(nmode<3){ mode = nmode; preferences.putChar("mode",mode); Serial.write(1); }else{ Serial.write(0); } Serial.write(Serial_end); } if(cmd==cmd_getStatus){ Serial.write(cmd_getStatus); if(mode == mode_radio){ Serial.write(radio_connected&1); }else if(mode == mode_bluetooth){ Serial.write(blex.isConnected()&1); }else{ Serial.write(Serial_end); } } while(Serial.available()>0&&Serial.read()!=Serial_end){delayMicroseconds(10);} } */