uint8_t light_On = 0;
uint8_t assist_level = 4;
uint8_t max_speed = 60;
uint8_t wheel_size = 20;
uint8_t p1 = 253;
uint8_t p2 = 5;
uint8_t p3 = 1;
uint8_t p4 = 1;
uint8_t p5 = 30;
uint8_t c1 = 5;
uint8_t c2 = 0;
uint8_t c4 = 3;
uint8_t c5 = 9;
uint8_t c12 = 6;
uint8_t c13 = 4;
uint8_t c14 = 2;
uint8_t ui8_tx_buffer[12];
uint8_t l1 = 2;
uint8_t l2 = 0;
uint8_t l3 = 0;
uint8_t ui8_j;
uint8_t ui8_crc;
uint8_t ui8_k;
#define PIN 9 // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#include "GyverButton.h"
#include <TimerMs.h>
GButton butt1(PIN);
const int REDled = 7; // красный светодиод // зеленый светодиод
const int BLUEled = 6; // синий светодиод
TimerMs tmr(100, 1, 0);
void setup() {
Serial.begin(9600);
tmr.setPeriodMode();
butt1.setDebounce(50); // настройка антидребезга (по умолчанию 80 мс)
butt1.setTimeout(300); // настройка таймаута на удержание (по умолчанию 500 мс)
butt1.setClickTimeout(600); // настройка таймаута между кликами (по умолчанию 300 мс)
butt1.setType(HIGH_PULL);
butt1.setDirection(NORM_OPEN);
pinMode(BLUEled, OUTPUT);
pinMode(REDled, OUTPUT);
}
void loop() {
butt1.tick();
if (butt1.isSingle()) {
assist_level++;
digitalWrite(REDled, HIGH);
if (assist_level > 5) {
assist_level = 5;
digitalWrite(REDled, HIGH);
delay(2000);
digitalWrite(REDled, LOW);
}
};
if (butt1.isDouble()) {
assist_level--;
digitalWrite(BLUEled, HIGH);
if (assist_level < 1) {
assist_level = 1;
digitalWrite(BLUEled, HIGH);
delay(2000);
digitalWrite(BLUEled, LOW);
}
};
if (butt1.isTriple()) {
assist_level = 0;
digitalWrite(REDled, HIGH);
digitalWrite(BLUEled, HIGH);
};
if (butt1.isHold()) {
assist_level = 6;
};
if (tmr.tick()) {
ui8_tx_buffer[0] = p5;
ui8_tx_buffer[1] = (light_On << 7) | assist_level ;
ui8_tx_buffer[2] = ((max_speed & 0x1F) << 3) | ((wheel_size & 0x1F) >> 2);
ui8_tx_buffer[4] = (max_speed & 0x20) | (wheel_size << 6) | (p2 & 0x07) | (p3 << 3) | (p4 << 4) ;
ui8_tx_buffer[3] = p1;
ui8_tx_buffer[6] = (c1 << 3) | c2;
ui8_tx_buffer[7] = c5 | (c14 << 5);
ui8_tx_buffer[8] = c4 << 5;
ui8_tx_buffer[9] = c12;
ui8_tx_buffer[10] = (c13 << 2) | l3;
ui8_tx_buffer[11] = l1 << 6;
ui8_tx_buffer[12] = 0x0E;
ui8_crc = 0;
for (ui8_j = 0; ui8_j <= 12; ui8_j++) {
if (ui8_j == 5) continue; // don't xor B5
ui8_crc ^= ui8_tx_buffer[ui8_j];
};
ui8_tx_buffer[5] = ui8_crc ^ 2;
ui8_k = 0;
for (ui8_k = 0; ui8_k <= 12; ui8_k++) {
Serial.print(ui8_tx_buffer[ui8_k], HEX);
Serial.print(' ');
}
Serial.println(' ');
};
digitalWrite(REDled, LOW);
digitalWrite(BLUEled, LOW);
};