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 ClearIRCommand(void);
void ClearIR(void);
void SetShiftReg_inline (unsigned char b1, unsigned char b2, unsigned char b3);
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
{
IRStatus = STATUS_COMMAND; // 129600 - 110400
print("STATUS_COMMAND\n");
// print("STATUS_COMMAND\n");
}
else
{
@ -65,19 +65,19 @@ void IR_handler() // SONY (SIRC) protocol 12 bit (7+5)
if (currentIR_Pulse < 37440) // 0.78 ms 37440
{
IR_Command &= ~((1 << IR_IndexBitCommand) & 0xFF);
print("0");
// print("0");
}
else
{
IR_Command |= ((1 << IR_IndexBitCommand) & 0xFF);
print("1");
// print("1");
}
IR_IndexBitCommand++;
if (IR_IndexBitCommand == 7)
{
IRStatus = STATUS_ADDRESS;
print(" STATUS_ADDRESS ");
// print(" STATUS_ADDRESS ");
}
else
{
@ -93,19 +93,20 @@ void IR_handler() // SONY (SIRC) protocol 12 bit (7+5)
if (currentIR_Pulse < 37440) // 0.78 <20><>
{
IR_Address &= ~((1 << IR_IndexBitAddress) & 0xFF);
print("0");
// print("0");
}
else
{
IR_Address |= ((1 << IR_IndexBitAddress) & 0xFF);
print("1");
// print("1");
}
IR_IndexBitAddress++;
if (IR_IndexBitAddress == 5)
{
// printNumber(IR_Command);
IRStatus = STATUS_REPEAT;
print("\n\n\n");
// print("\n\n\n");
}
else
{
@ -118,7 +119,7 @@ void IR_handler() // SONY (SIRC) protocol 12 bit (7+5)
break;
case STATUS_ERROR:
print("STATUS_ERROR\n\n");
// print("STATUS_ERROR\n\n");
default:
ClearIRStatus();
@ -158,6 +159,11 @@ void ClearIR()
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])
{
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);
}
}

View File

@ -23,10 +23,10 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "usbd_cdc_if.h"
#include "pca9685.h"
#include "IR.h"
#include "EEPROM.h"
#include "usbd_cdc_if.h"
#include "pca9685.h"
#include "IR.h"
#include "EEPROM.h"
#include "Print.h"
/* USER CODE END Includes */
@ -76,19 +76,16 @@ uint16_t vi = 0;
uint16_t timing1 = 0;
uint16_t timing2 = 0;
uint8_t MYIR_command = 0;
volatile uint32_t millisCounter = 0;
uint32_t previousMillis = 0;
uint32_t previousMillis = 0;
struct StructShot BufShots[MAX_NUMBER_SHOTS];
struct StructProgram BufPrograms;
struct StructMacro BufMacro;
struct StructShot BufShots[MAX_NUMBER_SHOTS];
struct StructProgram BufPrograms;
struct StructMacro BufMacro;
extern PCD_HandleTypeDef hpcd_USB_FS;
extern PCD_HandleTypeDef hpcd_USB_FS;
/* USER CODE END PV */
@ -113,9 +110,16 @@ static void MX_USART3_UART_Init(void);
* @brief The application entry point.
* @retval int
*/
unsigned char b1 = 1;
unsigned char b2 = 1;
unsigned char b3 = 1;
IRMenu menu();
int main(void)
{
menu.foo();
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
@ -134,10 +138,10 @@ int main(void)
/* USER CODE BEGIN SysInit */
// Установка приоритета прерывания
// NVIC_SetPriority(SysTick_IRQn, 0);
// NVIC_SetPriority(SysTick_IRQn, 0);
// Настройка SysTick таймера на 1 мс
SysTick->LOAD = 479999; // 1ms Sys timer
// SysTick_Config(SystemCoreClock / 1000);
// SysTick_Config(SystemCoreClock / 1000);
__HAL_RCC_USB_FORCE_RESET();
HAL_Delay(10);
@ -202,101 +206,196 @@ initcomlete = 1;
/* USER CODE BEGIN WHILE */
while (1)
{
if (IRStatus == STATUS_REPEAT) {
if (IR_Address == 0x01) MYIR_command = IR_Command;
CDC_Transmit_FS(&MYIR_command, 1);
if (IRStatus == STATUS_REPEAT)
{
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();
}
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';
txdata[2] = '1'; CDC_Transmit_FS(txdata, 3); break; }
case 1:
{
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';
txdata[2] = '2'; CDC_Transmit_FS(txdata, 3); break; }
case 2:
{
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';
txdata[2] = '3'; CDC_Transmit_FS(txdata, 3); break; }
case 3:
{
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
Vz2 = rxdata[5]; //rolic niz 0..200
Vz1 = rxdata[4]; // rolic verh 0..200
Vz2 = rxdata[5]; // rolic niz 0..200
vi = 0;
//shnek 0..100
if (rxdata[6] < 101) { TIM1->CCR1 = 0; TIM1->CCR2 = (uint16_t)(40*rxdata[6]); } else
{ TIM1->CCR1 = 0; TIM1->CCR2 = 4000;}
// shnek 0..100
if (rxdata[6] < 101)
{
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) ;
CDC_Transmit_FS(txdata, 3); break; }
case 6: { CDC_Transmit_FS(velosety, 600); break; }
case 5:
{
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
for (uint8_t i = 0; i < rejim[0]; i++)
{
rejim[(i*6)+1] = rxdata[(i*6)+2];
rejim[(i*6)+2] = rxdata[(i*6)+3];
rejim[(i*6)+3] = rxdata[(i*6)+4];
rejim[(i*6)+4] = rxdata[(i*6)+5];
rejim[(i*6)+5] = rxdata[(i*6)+6];
rejim[(i*6)+6] = rxdata[(i*6)+7];
rejim[(i * 6) + 1] = rxdata[(i * 6) + 2];
rejim[(i * 6) + 2] = rxdata[(i * 6) + 3];
rejim[(i * 6) + 3] = rxdata[(i * 6) + 4];
rejim[(i * 6) + 4] = rxdata[(i * 6) + 5];
rejim[(i * 6) + 5] = rxdata[(i * 6) + 6];
rejim[(i * 6) + 6] = rxdata[(i * 6) + 7];
}
// set rejim #1
SetServo(0, rejim[1] );
SetServo(1, rejim[2] );
SetServo(2, rejim[3] );
SetServo(0, rejim[1]);
SetServo(1, rejim[2]);
SetServo(2, rejim[3]);
Vz1 = rejim[4];
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
rejim_number = 1;
avto = 1;
break; }
case 8: { // stop avto
avto = 0; rejim_number = 1;
break;
}
case 8:
{ // stop avto
avto = 0;
rejim_number = 1;
// stop mecanics
SetServo(0, 90);
SetServo(1, 90);
SetServo(2, 90);
Vz1 = 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;
CDC_Transmit_FS(txdata, 3);
break; }
default: break;
break;
}
default:
break;
}
rxcomlite = 0;
// // HAL_Delay(1000);
// // HAL_Delay(1000);
}
uint32_t currentMillis = millisCounter;
if (currentMillis - previousMillis >= 500) {
if (currentMillis - previousMillis >= 500)
{
previousMillis = currentMillis;
GPIOC->ODR ^= GPIO_PIN_13;
// unsigned char text[] = "Hello\n";
// printNumber(SysTick->LOAD);
// CDC_Transmit_FS(text, sizeof(text));
// unsigned char text[] = "Hello\n";
// printNumber(SysTick->LOAD);
// CDC_Transmit_FS(text, sizeof(text));
}
/* USER CODE END WHILE */
@ -333,8 +432,7 @@ void SystemClock_Config(void)
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
@ -383,7 +481,6 @@ static void MX_I2C1_Init(void)
/* USER CODE BEGIN 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 */
HAL_TIM_MspPostInit(&htim1);
}
/**
@ -533,7 +629,6 @@ static void MX_TIM2_Init(void)
/* USER CODE END TIM2_Init 2 */
HAL_TIM_MspPostInit(&htim2);
}
/**
@ -595,7 +690,6 @@ static void MX_TIM3_Init(void)
/* USER CODE BEGIN 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 END USART3_Init 2 */
}
/**
@ -639,8 +732,8 @@ static void MX_USART3_UART_Init(void)
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
@ -652,7 +745,7 @@ static void MX_GPIO_Init(void)
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, LED_DATA_Pin|LED_CLK_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, LED_DATA_Pin | LED_CLK_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin : PC13 */
GPIO_InitStruct.Pin = GPIO_PIN_13;
@ -662,7 +755,7 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : LED_DATA_Pin LED_CLK_Pin */
GPIO_InitStruct.Pin = LED_DATA_Pin|LED_CLK_Pin;
GPIO_InitStruct.Pin = LED_DATA_Pin | LED_CLK_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
@ -687,8 +780,8 @@ static void MX_GPIO_Init(void)
HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
/* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */
/* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */
}
/* USER CODE BEGIN 4 */
@ -704,10 +797,9 @@ void Error_Handler(void)
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
// GPIOC->ODR &= ~GPIO_PIN_13;
// GPIOC->ODR &= ~GPIO_PIN_13;
while (1)
{
}
/* USER CODE END Error_Handler_Debug */
}