This commit is contained in:
DashyFox 2024-08-23 00:23:25 +03:00
parent 2c2ebd7137
commit 55e8424f78
3 changed files with 326 additions and 194 deletions

View File

@ -16,4 +16,37 @@ void IR_handler(void);
void ClearIRStatus(void); void ClearIRStatus(void);
void ClearIRCommand(void); void ClearIRCommand(void);
void ClearIR(void); void ClearIR(void);
void SetShiftReg_inline (unsigned char b1, unsigned char b2, unsigned char b3);
void SetShiftReg (unsigned char shiftreg[3]); void SetShiftReg (unsigned char shiftreg[3]);
enum IR_CMD_LIST {
IR_FRONT_LEFT = 20,
IR_FRONT_MID = 58,
IR_FONT_RIGHT = 21,
IR_MACRO = 63,
IR_PROG = 37,
IR_SHOT = 56,
IR_NUM_1 = 0,
IR_NUM_2 = 1,
IR_NUM_3 = 2,
IR_NUM_4 = 3,
IR_NUM_5 = 4,
IR_NUM_6 = 5,
IR_NUM_7 = 6,
IR_NUM_8 = 7,
IR_NUM_9 = 8,
IR_NUM_0 = 9,
IR_DEBUG = 29, // -/--
IR_PAUSE = 43,
IR_STOP = 116,
IR_START = 124,
IR_F_BTN = 23,
IR_ESC = 117,
IR_ENTER = 97,
IR_TEMPO_INC = 60,
IR_TEMPO_DEC = 54,
IR_ENGINE_UP_INC = 18, // скорость верхнего мотора
IR_ENGINE_UP_DEC = 19,
IR_ENGINE_DOWM_INC = 16,
IR_ENGINE_DOWM_DEC = 17
};

View File

@ -50,7 +50,7 @@ void IR_handler() // SONY (SIRC) protocol 12 bit (7+5)
if ((currentIR_Pulse < 130000) && (currentIR_Pulse > 110000)) // 2,7 ms - 2,3 ms if ((currentIR_Pulse < 130000) && (currentIR_Pulse > 110000)) // 2,7 ms - 2,3 ms
{ {
IRStatus = STATUS_COMMAND; // 129600 - 110400 IRStatus = STATUS_COMMAND; // 129600 - 110400
print("STATUS_COMMAND\n"); // print("STATUS_COMMAND\n");
} }
else else
{ {
@ -65,19 +65,19 @@ void IR_handler() // SONY (SIRC) protocol 12 bit (7+5)
if (currentIR_Pulse < 37440) // 0.78 ms 37440 if (currentIR_Pulse < 37440) // 0.78 ms 37440
{ {
IR_Command &= ~((1 << IR_IndexBitCommand) & 0xFF); IR_Command &= ~((1 << IR_IndexBitCommand) & 0xFF);
print("0"); // print("0");
} }
else else
{ {
IR_Command |= ((1 << IR_IndexBitCommand) & 0xFF); IR_Command |= ((1 << IR_IndexBitCommand) & 0xFF);
print("1"); // print("1");
} }
IR_IndexBitCommand++; IR_IndexBitCommand++;
if (IR_IndexBitCommand == 7) if (IR_IndexBitCommand == 7)
{ {
IRStatus = STATUS_ADDRESS; IRStatus = STATUS_ADDRESS;
print(" STATUS_ADDRESS "); // print(" STATUS_ADDRESS ");
} }
else else
{ {
@ -93,19 +93,20 @@ void IR_handler() // SONY (SIRC) protocol 12 bit (7+5)
if (currentIR_Pulse < 37440) // 0.78 <20><> if (currentIR_Pulse < 37440) // 0.78 <20><>
{ {
IR_Address &= ~((1 << IR_IndexBitAddress) & 0xFF); IR_Address &= ~((1 << IR_IndexBitAddress) & 0xFF);
print("0"); // print("0");
} }
else else
{ {
IR_Address |= ((1 << IR_IndexBitAddress) & 0xFF); IR_Address |= ((1 << IR_IndexBitAddress) & 0xFF);
print("1"); // print("1");
} }
IR_IndexBitAddress++; IR_IndexBitAddress++;
if (IR_IndexBitAddress == 5) if (IR_IndexBitAddress == 5)
{ {
// printNumber(IR_Command);
IRStatus = STATUS_REPEAT; IRStatus = STATUS_REPEAT;
print("\n\n\n"); // print("\n\n\n");
} }
else else
{ {
@ -118,7 +119,7 @@ void IR_handler() // SONY (SIRC) protocol 12 bit (7+5)
break; break;
case STATUS_ERROR: case STATUS_ERROR:
print("STATUS_ERROR\n\n"); // print("STATUS_ERROR\n\n");
default: default:
ClearIRStatus(); ClearIRStatus();
@ -158,6 +159,11 @@ void ClearIR()
ClearIRStatus(); ClearIRStatus();
} }
void SetShiftReg_inline(unsigned char b1, unsigned char b2, unsigned char b3){
unsigned char shiftreg[3] = {b1,b2,b3};
SetShiftReg(shiftreg);
}
void SetShiftReg(unsigned char shiftreg[3]) void SetShiftReg(unsigned char shiftreg[3])
{ {
for (unsigned char i = 0; i < 3; i++) for (unsigned char i = 0; i < 3; i++)
@ -197,3 +203,4 @@ void SetShiftReg(unsigned char shiftreg[3])
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
} }
} }

View File

@ -76,14 +76,11 @@ uint16_t vi = 0;
uint16_t timing1 = 0; uint16_t timing1 = 0;
uint16_t timing2 = 0; uint16_t timing2 = 0;
uint8_t MYIR_command = 0; uint8_t MYIR_command = 0;
volatile uint32_t millisCounter = 0; volatile uint32_t millisCounter = 0;
uint32_t previousMillis = 0; uint32_t previousMillis = 0;
struct StructShot BufShots[MAX_NUMBER_SHOTS]; struct StructShot BufShots[MAX_NUMBER_SHOTS];
struct StructProgram BufPrograms; struct StructProgram BufPrograms;
struct StructMacro BufMacro; struct StructMacro BufMacro;
@ -113,9 +110,16 @@ static void MX_USART3_UART_Init(void);
* @brief The application entry point. * @brief The application entry point.
* @retval int * @retval int
*/ */
unsigned char b1 = 1;
unsigned char b2 = 1;
unsigned char b3 = 1;
IRMenu menu();
int main(void) int main(void)
{ {
menu.foo();
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */
/* USER CODE END 1 */ /* USER CODE END 1 */
@ -202,44 +206,131 @@ initcomlete = 1;
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN WHILE */
while (1) while (1)
{ {
if (IRStatus == STATUS_REPEAT) { if (IRStatus == STATUS_REPEAT)
if (IR_Address == 0x01) MYIR_command = IR_Command; {
CDC_Transmit_FS(&MYIR_command, 1); if (IR_Address == 0x01)
{
MYIR_command = IR_Command;
printNumber(MYIR_command);
// CDC_Transmit_FS(&MYIR_command, 1);
switch (MYIR_command)
{
case IR_FONT_RIGHT:
// if(!(b1>64 || b2> 64|| b3>64)) b1 = 64;
// else
// {
// b1 = b1>>1;
// b2 = b2<<1;
// b3 = b3<<1;
// }
SetShiftReg_inline(b1, b2, b3);
break;
case IR_FRONT_MID:
SetShiftReg_inline(0, 0, 0);
b1=b2=b3=0;
break;
case IR_FRONT_LEFT:
// if(!b3)
// b3 = 128;
// b3 = b3>>1;
// if(!b3)
// b2 = 64;
SetShiftReg_inline(++b1, ++b2, ++b3);
break;
default:
break;
}
}
ClearIRStatus(); ClearIRStatus();
} }
if (rxcomlite == 1) { if (rxcomlite == 1)
{
txdata[0] = 'O'; txdata[1] = 'K'; txdata[2] = '?'; txdata[0] = 'O';
txdata[1] = 'K';
txdata[2] = '?';
switch (rxdata[0]) { switch (rxdata[0])
{
case 1: { SetServo(0, rxdata[1] ); txdata[0] = 'O'; txdata[1] = 'K'; case 1:
txdata[2] = '1'; CDC_Transmit_FS(txdata, 3); break; } {
SetServo(0, rxdata[1]);
txdata[0] = 'O';
txdata[1] = 'K';
txdata[2] = '1';
CDC_Transmit_FS(txdata, 3);
break;
}
case 2: { SetServo(1, rxdata[1] ); txdata[0] = 'O'; txdata[1] = 'K'; case 2:
txdata[2] = '2'; CDC_Transmit_FS(txdata, 3); break; } {
SetServo(1, rxdata[1]);
txdata[0] = 'O';
txdata[1] = 'K';
txdata[2] = '2';
CDC_Transmit_FS(txdata, 3);
break;
}
case 3: { SetServo(2, rxdata[1] ); txdata[0] = 'O'; txdata[1] = 'K'; case 3:
txdata[2] = '3'; CDC_Transmit_FS(txdata, 3); break; } {
SetServo(2, rxdata[1]);
txdata[0] = 'O';
txdata[1] = 'K';
txdata[2] = '3';
CDC_Transmit_FS(txdata, 3);
break;
}
case 4: { SetServo(0, rxdata[1] ); SetServo(1, rxdata[2] ); SetServo(2, rxdata[3] ); case 4:
{
SetServo(0, rxdata[1]);
SetServo(1, rxdata[2]);
SetServo(2, rxdata[3]);
Vz1 = rxdata[4]; // rolic verh 0..200 Vz1 = rxdata[4]; // rolic verh 0..200
Vz2 = rxdata[5]; // rolic niz 0..200 Vz2 = rxdata[5]; // rolic niz 0..200
vi = 0; vi = 0;
// shnek 0..100 // shnek 0..100
if (rxdata[6] < 101) { TIM1->CCR1 = 0; TIM1->CCR2 = (uint16_t)(40*rxdata[6]); } else if (rxdata[6] < 101)
{ TIM1->CCR1 = 0; TIM1->CCR2 = 4000;} {
TIM1->CCR1 = 0;
TIM1->CCR2 = (uint16_t)(40 * rxdata[6]);
}
else
{
TIM1->CCR1 = 0;
TIM1->CCR2 = 4000;
}
txdata[0] = 'O'; txdata[1] = 'K'; txdata[2] = '4'; CDC_Transmit_FS(txdata, 3); break; } txdata[0] = 'O';
txdata[1] = 'K';
txdata[2] = '4';
CDC_Transmit_FS(txdata, 3);
break;
}
case 5: {txdata[0] = LOBYTE(timing1) ; txdata[1] = HIBYTE(timing1) ; case 5:
CDC_Transmit_FS(txdata, 3); break; } {
case 6: { CDC_Transmit_FS(velosety, 600); break; } txdata[0] = LOBYTE(timing1);
txdata[1] = HIBYTE(timing1);
CDC_Transmit_FS(txdata, 3);
break;
}
case 6:
{
CDC_Transmit_FS(velosety, 600);
break;
}
case 7: { rejim[0] = rxdata[1]; case 7:
{
rejim[0] = rxdata[1];
// copy to buffer // copy to buffer
for (uint8_t i = 0; i < rejim[0]; i++) for (uint8_t i = 0; i < rejim[0]; i++)
{ {
@ -256,42 +347,50 @@ initcomlete = 1;
SetServo(2, rejim[3]); SetServo(2, rejim[3]);
Vz1 = rejim[4]; Vz1 = rejim[4];
Vz2 = rejim[5]; Vz2 = rejim[5];
TIM1->CCR1 = 0; TIM1->CCR2 = (uint16_t)(40*rejim[6]); TIM1->CCR1 = 0;
TIM1->CCR2 = (uint16_t)(40 * rejim[6]);
// set avto // set avto
rejim_number = 1; rejim_number = 1;
avto = 1; avto = 1;
break; } break;
case 8: { // stop avto }
avto = 0; rejim_number = 1; case 8:
{ // stop avto
avto = 0;
rejim_number = 1;
// stop mecanics // stop mecanics
SetServo(0, 90); SetServo(0, 90);
SetServo(1, 90); SetServo(1, 90);
SetServo(2, 90); SetServo(2, 90);
Vz1 = 100; Vz1 = 100;
Vz2 = 100; Vz2 = 100;
TIM1->CCR1 = 0; TIM1->CCR2 = 0; TIM1->CCR1 = 0;
TIM1->CCR2 = 0;
break; } break;
}
case 9: { txdata[0] = avto ; case 9:
{
txdata[0] = avto;
txdata[1] = rejim_number; txdata[1] = rejim_number;
CDC_Transmit_FS(txdata, 3); CDC_Transmit_FS(txdata, 3);
break; } break;
default: break;
} }
default:
break;
}
rxcomlite = 0; rxcomlite = 0;
// // HAL_Delay(1000); // // HAL_Delay(1000);
} }
uint32_t currentMillis = millisCounter; uint32_t currentMillis = millisCounter;
if (currentMillis - previousMillis >= 500) { if (currentMillis - previousMillis >= 500)
{
previousMillis = currentMillis; previousMillis = currentMillis;
GPIOC->ODR ^= GPIO_PIN_13; GPIOC->ODR ^= GPIO_PIN_13;
// unsigned char text[] = "Hello\n"; // unsigned char text[] = "Hello\n";
@ -333,8 +432,7 @@ void SystemClock_Config(void)
/** Initializes the CPU, AHB and APB buses clocks /** Initializes the CPU, AHB and APB buses clocks
*/ */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
@ -383,7 +481,6 @@ static void MX_I2C1_Init(void)
/* USER CODE BEGIN I2C1_Init 2 */ /* USER CODE BEGIN I2C1_Init 2 */
/* USER CODE END I2C1_Init 2 */ /* USER CODE END I2C1_Init 2 */
} }
/** /**
@ -462,7 +559,6 @@ static void MX_TIM1_Init(void)
/* USER CODE END TIM1_Init 2 */ /* USER CODE END TIM1_Init 2 */
HAL_TIM_MspPostInit(&htim1); HAL_TIM_MspPostInit(&htim1);
} }
/** /**
@ -533,7 +629,6 @@ static void MX_TIM2_Init(void)
/* USER CODE END TIM2_Init 2 */ /* USER CODE END TIM2_Init 2 */
HAL_TIM_MspPostInit(&htim2); HAL_TIM_MspPostInit(&htim2);
} }
/** /**
@ -595,7 +690,6 @@ static void MX_TIM3_Init(void)
/* USER CODE BEGIN TIM3_Init 2 */ /* USER CODE BEGIN TIM3_Init 2 */
/* USER CODE END TIM3_Init 2 */ /* USER CODE END TIM3_Init 2 */
} }
/** /**
@ -628,7 +722,6 @@ static void MX_USART3_UART_Init(void)
/* USER CODE BEGIN USART3_Init 2 */ /* USER CODE BEGIN USART3_Init 2 */
/* USER CODE END USART3_Init 2 */ /* USER CODE END USART3_Init 2 */
} }
/** /**
@ -707,7 +800,6 @@ void Error_Handler(void)
// GPIOC->ODR &= ~GPIO_PIN_13; // GPIOC->ODR &= ~GPIO_PIN_13;
while (1) while (1)
{ {
} }
/* USER CODE END Error_Handler_Debug */ /* USER CODE END Error_Handler_Debug */
} }