// ======================== ВЫБОР ПИНОВ ============ //======= OUTPUT RELAY ======= #define FAN_1 4 //pd4 почему то не работает... #define FAN_2 19 //pd3 #define FAN_3 2 //pd2 #define LIGHT 3 //pc5 //======= OUTPUT LED ======= //-======это индикация==== #define LED_POWER 6 //pd6, led6 #define LED_1 5 //pd5, led5 #define LED_2 11 //pd4, led4 #define LED_3 9 //pd3, led3 #define LED_MAX 8 //pd2, led2 #define LED_LIGHT 7 //pd1, led1 #define BUZZER 10 //pb2, buzzer //======= INPUT ======= #define BUZZER_INPUT 13 //pb5, input_buzzer #define SDA 16 //pc2, sda input #define SCLK 15 //pc1, sclk #include "pitches.h" #define prescal 1 #define mcs 12 #define SENS 8 //------виртуальные кнопки---- bool powerKey = false; bool key_1 = false; bool key_2 = false; bool key_3 = false; bool maxFan_Key = false; bool light_Key = false; bool power = false; bool light = false; bool maxFan = false; byte speedFan = 0, sens = SENS; byte KeyState, oldKeyState; void setup() { Serial.begin(9600); pinMode(FAN_1, OUTPUT); pinMode(FAN_2, OUTPUT); pinMode(FAN_3, OUTPUT); pinMode(LIGHT, OUTPUT); pinMode(LED_POWER, OUTPUT); pinMode(LED_1, OUTPUT); pinMode(LED_2, OUTPUT); pinMode(LED_3, OUTPUT); pinMode(LED_MAX, OUTPUT); pinMode(LED_LIGHT, OUTPUT); pinMode(BUZZER, OUTPUT); pinMode(BUZZER_INPUT, INPUT); pinMode(SDA, OUTPUT); pinMode(SCLK, OUTPUT); digitalWrite(LED_POWER, HIGH); digitalWrite(LED_1, HIGH); digitalWrite(LED_2, HIGH); digitalWrite(LED_3, HIGH); digitalWrite(LED_MAX, HIGH); digitalWrite(LED_LIGHT, HIGH); digitalWrite(SCLK, HIGH); startup(); ledState(false); setSensiv(sens); pinMode(SDA, INPUT); } bool flag = false; uint32_t btnTimer = 0; void loop() { oldKeyState = KeyState; Serial.println(KeyState); ledState(power); KeyState = read_key_data(); //Read the key information of the touch key // powerKey = bitRead(KeyState, 2); // key_1 = bitRead(KeyState, 1); // key_2 = bitRead(KeyState, 0); // key_3 = bitRead(KeyState, 5); // maxFan_Key = bitRead(KeyState, 4); // light_Key = bitRead(KeyState, 3); // // if (powerKey && !flag && millis() - btnTimer > 100) { // flag = true; // btnTimer = millis(); // Serial.println("press"); // // power = true; // } // if (!powerKey && flag && millis() - btnTimer > 100) { // flag = false; // btnTimer = millis(); // Serial.println("release"); // } delay(500); } byte read_key_data(void) { byte KeyValue = 0; bool inikey = false; // ------ Start bit setting ------ digitalWrite(SCLK, LOW); delayMicroseconds(mcs); if (digitalRead(SDA == LOW)) { digitalWrite(SCLK, HIGH); delayMicroseconds(mcs); if (digitalRead(SDA == LOW)) { inikey = true; } } // -----------Read 8 bit touch key information bit----------- if (inikey) { for ( int i = 0; i < 8; i++) { digitalWrite(SCLK, LOW); delayMicroseconds(mcs); Serial.print(digitalRead(SDA)); digitalWrite(SCLK, HIGH); bitWrite(KeyValue, i, digitalRead(SDA)); Serial.print(digitalRead(SDA)); delayMicroseconds(mcs); } } digitalWrite(SCLK, LOW); delayMicroseconds(mcs); digitalWrite(SCLK, HIGH); delayMicroseconds(mcs); if (digitalRead(SDA == HIGH)) { return KeyValue; } else { return 0; } inikey = false; } void setSensiv(byte sens) { // ------ Start bit setting ------ digitalWrite(SDA, LOW); delayMicroseconds(mcs); digitalWrite(SCLK, LOW); delayMicroseconds(mcs); digitalWrite(SCLK, HIGH); delayMicroseconds(mcs); // -----------Set 8 bit sensivity----------- for ( int i = 0; i < 8; i++) { digitalWrite(SDA, bitRead(sens, i)); digitalWrite(SCLK, LOW); delayMicroseconds(mcs); digitalWrite(SCLK, HIGH); delayMicroseconds(mcs); } digitalWrite(SDA, HIGH); digitalWrite(SCLK, LOW); delayMicroseconds(mcs); digitalWrite(SCLK, HIGH); delayMicroseconds(mcs); delay(100); } void startup() { digitalWrite(LED_POWER, 0); delay(100); digitalWrite(LED_1, 0); delay(100); digitalWrite(LED_2, 0); delay(100); digitalWrite(LED_3, 0); delay(100); digitalWrite(LED_MAX, 0); delay(100); digitalWrite(LED_LIGHT, 0); delay(100); digitalWrite(LED_POWER, 1); delay(100); digitalWrite(LED_1, 1); delay(100); digitalWrite(LED_2, 1); delay(100); digitalWrite(LED_3, 1); delay(100); digitalWrite(LED_MAX, 1); delay(100); digitalWrite(LED_LIGHT, 1); delay(100); ledState(false); } void ledState(bool state) { if (!state) { digitalWrite(LED_POWER, 1); digitalWrite(LED_1, 1); digitalWrite(LED_2, 1); digitalWrite(LED_3, 1); digitalWrite(LED_MAX, 1); digitalWrite(LED_LIGHT, 1); } else { digitalWrite(LED_POWER, 0); digitalWrite(LED_1, 0); digitalWrite(LED_2, 0); digitalWrite(LED_3, 0); digitalWrite(LED_MAX, 0); digitalWrite(LED_LIGHT, 0); } }