mirror of
https://github.com/DashyFox/StackSport.git
synced 2025-06-28 05:09:32 +00:00
upd
This commit is contained in:
@ -14,10 +14,7 @@
|
||||
enum IR_MENU {
|
||||
IR_MENU_Home,
|
||||
|
||||
IR_MENU_SHOT,
|
||||
IR_MENU_PROGR,
|
||||
IR_MENU_MACRO,
|
||||
IR_MENU_,
|
||||
IR_MENU_SHOT, IR_MENU_PROGR, IR_MENU_MACRO, IR_MENU_,
|
||||
|
||||
};
|
||||
|
||||
@ -30,13 +27,13 @@ extern uint16_t inputParam; // current input parameter
|
||||
extern IRData data;
|
||||
|
||||
// ()
|
||||
extern void NullFunc(); // null func for paramEnter(NullFunc);
|
||||
extern void paramEnter(void(*onEnter_)()); // setParamFunc for enter
|
||||
extern void NullFunc(); // null func for paramEnter(NullFunc);
|
||||
extern void paramEnter(void (*onEnter_)()); // setParamFunc for enter
|
||||
|
||||
void IR_ShotPrepared();
|
||||
|
||||
void onSelectShot(){
|
||||
if(prepareShot(inputParam)){
|
||||
void onSelectShot() {
|
||||
if (prepareShot(inputParam)) {
|
||||
InputHandler = IR_ShotPrepared;
|
||||
} else {
|
||||
paramEnter(onSelectShot);
|
||||
@ -45,8 +42,6 @@ void onSelectShot(){
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
unsigned char b1 = 1;
|
||||
unsigned char b2 = 1;
|
||||
unsigned char b3 = 1;
|
||||
@ -96,92 +91,96 @@ void IR_Home_Process() {
|
||||
break;
|
||||
|
||||
case IR_PAUSE:
|
||||
{
|
||||
uint8_t buf[32];
|
||||
|
||||
uint16_t blockAddr16 = 0; // Начальный адрес блока в EEPROM
|
||||
uint8_t blockAddr[2] = {HIBYTE(blockAddr16), LOBYTE(blockAddr16)}; // Адрес в формате 2 байта
|
||||
|
||||
// Отправляем адрес в EEPROM
|
||||
if (HAL_I2C_Master_Transmit(&hi2c1, (AT24C_ADRESS << 1), blockAddr, 2, 1000) == HAL_OK) {
|
||||
HAL_Delay(1); // Небольшая задержка
|
||||
|
||||
// Читаем данные из EEPROM
|
||||
if (HAL_I2C_Master_Receive(&hi2c1, (AT24C_ADRESS << 1), buf, sizeof(buf), 1000) == HAL_OK) {
|
||||
// Выводим считанные данные
|
||||
for (int i = 0; i < sizeof(buf); ++i) {
|
||||
if (!(i % 8)) print(" ");
|
||||
if (!(i % 32)) print("\n");
|
||||
|
||||
char buffer[16];
|
||||
snprintf(buffer, sizeof(buffer), "%02X ", buf[i]); // Преобразуем байт в шестнадцатеричную строку
|
||||
CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer));
|
||||
}
|
||||
} else {
|
||||
print("Read Error EEPROM\n");
|
||||
}
|
||||
} else {
|
||||
print("Address TX Error EEPROM\n");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case IR_DEBUG:
|
||||
{
|
||||
uint8_t i2c_address;
|
||||
HAL_StatusTypeDef result;
|
||||
uint8_t buf[128]; // Буфер для чтения данных размером 128 байт
|
||||
uint16_t blockAddr16 = 0; // Начальный адрес EEPROM
|
||||
uint8_t blockAddr[2] = { (uint8_t)(blockAddr16 >> 8), (uint8_t)(blockAddr16 & 0xFF) }; // Адрес в формате 2 байта
|
||||
int max_attempts = 15; // Максимальное количество попыток для операции
|
||||
int attempts = 0; // Счетчик попыток
|
||||
HAL_StatusTypeDef status;
|
||||
|
||||
print("Scan\n");
|
||||
|
||||
// Перебираем все возможные адреса на шине I2C (7 бит, от 0x08 до 0x77)
|
||||
for (i2c_address = 0x08; i2c_address <= 0x77; i2c_address++) {
|
||||
// Отправляем запрос на указанный адрес (HAL_I2C_Master_Transmit без данных)
|
||||
result = HAL_I2C_IsDeviceReady(&hi2c1, (i2c_address << 1), 1, 100);
|
||||
|
||||
if (result == HAL_OK) {
|
||||
// Если устройство отвечает, выводим его адрес
|
||||
print("Found I2C at: ");
|
||||
printNumber(i2c_address);
|
||||
print("\n");
|
||||
} else {
|
||||
// Если устройство не отвечает, продолжаем сканирование
|
||||
print(".");
|
||||
do {
|
||||
// Отправляем адрес в EEPROM
|
||||
status = HAL_I2C_Master_Transmit(&hi2c1, (AT24C_ADRESS << 1), blockAddr, 2, 1000);
|
||||
if (status != HAL_OK) {
|
||||
HAL_Delay(5); // Задержка перед повтором
|
||||
attempts++;
|
||||
continue; // Переход к следующей попытке
|
||||
}
|
||||
HAL_Delay(10); // Задержка для стабильности сканирования
|
||||
}
|
||||
|
||||
print("\nScanning completed.\n");
|
||||
HAL_Delay(1); // Небольшая задержка
|
||||
|
||||
// Читаем 128 байт данных из EEPROM
|
||||
status = HAL_I2C_Master_Receive(&hi2c1, (AT24C_ADRESS << 1) | 1, buf, sizeof(buf), 1000);
|
||||
if (status == HAL_OK) {
|
||||
// Данные успешно считаны, выводим их
|
||||
char buffer[16];
|
||||
for (int i = 0; i < sizeof(buf); ++i) {
|
||||
if (i % 8 == 0) print(" ");
|
||||
if (i % 32 == 0) print("\n");
|
||||
|
||||
// snprintf(buffer, sizeof(buffer), "%02X ", buf[i]); // Преобразуем байт в шестнадцатеричную строку
|
||||
CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer));
|
||||
}
|
||||
break; // Выход из попыток, если чтение успешно
|
||||
} else {
|
||||
print("Read Error EEPROM\n");
|
||||
HAL_Delay(5); // Задержка перед повтором
|
||||
attempts++;
|
||||
}
|
||||
} while (attempts < max_attempts);
|
||||
|
||||
if (status != HAL_OK) {
|
||||
print("Failed to read EEPROM after multiple attempts\n");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case IR_DEBUG: {
|
||||
uint8_t i2c_address;
|
||||
HAL_StatusTypeDef result;
|
||||
|
||||
print("Scan\n");
|
||||
|
||||
// Перебираем все возможные адреса на шине I2C (7 бит, от 0x08 до 0x77)
|
||||
for (i2c_address = 0x08; i2c_address <= 0x77; i2c_address++) {
|
||||
// Отправляем запрос на указанный адрес (HAL_I2C_Master_Transmit без данных)
|
||||
result = HAL_I2C_IsDeviceReady(&hi2c1, (i2c_address << 1), 1, 100);
|
||||
|
||||
if (result == HAL_OK) {
|
||||
// Если устройство отвечает, выводим его адрес
|
||||
print("Found I2C at: ");
|
||||
printNumber(i2c_address);
|
||||
print("\n");
|
||||
} else {
|
||||
// Если устройство не отвечает, продолжаем сканирование
|
||||
print(".");
|
||||
}
|
||||
HAL_Delay(10); // Задержка для стабильности сканирования
|
||||
}
|
||||
|
||||
print("\nScanning completed.\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case IR_NUM_1:
|
||||
setRollersSpeed(speedUP+=1, speedDown);
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
|
||||
break;
|
||||
case IR_NUM_2:
|
||||
setScrewkSpeed(screwSpeed+=1);
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
break;
|
||||
case IR_NUM_3:
|
||||
setRollersSpeed(speedUP, speedDown+=1);
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
|
||||
break;
|
||||
|
||||
case IR_NUM_7:
|
||||
setRollersSpeed(speedUP-=1, speedDown);
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
break;
|
||||
case IR_NUM_8:
|
||||
setScrewkSpeed(screwSpeed-=1);
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
break;
|
||||
case IR_NUM_9:
|
||||
setRollersSpeed(speedUP, speedDown-=1);
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
break;
|
||||
|
||||
case IR_NUM_5:
|
||||
setRollersSpeed(100,100);
|
||||
break;
|
||||
|
||||
case IR_STOP:
|
||||
@ -191,20 +190,62 @@ void IR_Home_Process() {
|
||||
stopShooting();
|
||||
break;
|
||||
|
||||
case IR_TEMPO_INC:
|
||||
if (screwSpeed < 100) {
|
||||
setScrewkSpeed(++screwSpeed);
|
||||
}
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
break;
|
||||
|
||||
case IR_TEMPO_DEC:
|
||||
if (screwSpeed > 0) {
|
||||
setScrewkSpeed(--screwSpeed);
|
||||
}
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
break;
|
||||
|
||||
case IR_ENGINE_UP_INC:
|
||||
if (speedUP < 200) {
|
||||
setRollersSpeed(++speedUP, speedDown);
|
||||
}
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
break;
|
||||
|
||||
case IR_ENGINE_UP_DEC:
|
||||
if (speedUP > 0) {
|
||||
setRollersSpeed(--speedUP, speedDown);
|
||||
}
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
break;
|
||||
|
||||
case IR_ENGINE_DOWM_INC:
|
||||
if (speedDown < 200) {
|
||||
setRollersSpeed(speedUP, ++speedDown);
|
||||
}
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
break;
|
||||
|
||||
case IR_ENGINE_DOWM_DEC:
|
||||
if (speedDown > 0) {
|
||||
setRollersSpeed(speedUP, --speedDown);
|
||||
}
|
||||
onHoldRepeat = IR_Home_Process;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void IR_ShotPrepared(){
|
||||
void IR_ShotPrepared() {
|
||||
InputHandler = IR_ShotPrepared;
|
||||
switch (data.command) {
|
||||
case IR_START:
|
||||
startShooting();
|
||||
break;
|
||||
default:
|
||||
InputHandler();
|
||||
break;
|
||||
case IR_START:
|
||||
startShooting();
|
||||
break;
|
||||
default:
|
||||
InputHandler();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user