Перейти к содержанию

Проблема с индикацией таймера


befrikpa

Рекомендуемые сообщения

Добрый день товарищи!
У меня такая проблема:
Я хочу сделать штуку которая будет замыкать реле через определённое время(после подачи питания на него), реле времени так сказать. В принципе устройство работает, но у меня не получается сделать так, что бы светодиод (HL_4) мигал каждые пол секунды пока не включено реле, а после включения соответственно  светодиод горел постоянно.
Сейчас у меня условие находится в бесконечном цикле, и при включении устройства, светодиод просто горит постоянно и всё.
Скажу честно, я в программировании пока что зелёный, так что не судите строго за код))

Прикрепил код:

Скрытый текст

 

/* USER CODE BEGIN Header */
/**
 ******************************************************************************
 * @file           : main.c
 * @brief          : Main program body
 ******************************************************************************
 * @attention
 *
 * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
 * All rights reserved.</center></h2>
 *
 * This software component is licensed by ST under BSD 3-Clause license,
 * the "License"; You may not use this file except in compliance with the
 * License. You may obtain a copy of the License at:
 *                        opensource.org/licenses/BSD-3-Clause
 *
 ******************************************************************************
 */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "adc.h"
#include "dma.h"
#include "rtc.h"
#include "tim.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef DateToUpdate = {0};    // Without date reading, time reading does not work
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
volatile uint16_t ADCRESULT[1];                // ADC result
uint16_t SettingsR = 0;                // Setting parameter R1
uint8_t Diode_Mod = Rele_Light_Diode_ON;
uint8_t counter = 0;
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
 * @brief  The application entry point.
 * @retval int
 */
int main(void)
{
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */


/* MCU Configuration--------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC_Init();
MX_RTC_Init();
MX_TIM2_Init();
MX_TIM21_Init();
/* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start (&hadc, ADC_SINGLE_ENDED);
HAL_ADC_Start_DMA(&hadc,(uint32_t *)ADCRESULT, 1);            // Start DMA for ADC
HAL_TIM_Base_Start(&htim2);                                    // Start Timer2 (for ADC)
HAL_TIM_Base_Start(&htim21);
HAL_TIM_Base_Start_IT(&htim21);

HAL_GPIO_WritePin(HL_6_GPIO_Port, HL_6_Pin, GPIO_PIN_SET);

/*------------ SET TIME ------------*/
if(4095 >= ADCRESULT[0] && ADCRESULT[0] >= 4011){
SettingsR = 1;
}
if(4010 >= ADCRESULT[0] && ADCRESULT[0] >= 3861){
SettingsR = 2;
}
if(3860 >= ADCRESULT[0] && ADCRESULT[0] >= 3725){
SettingsR = 3;
}
if(3724 >= ADCRESULT[0] && ADCRESULT[0] >= 3571){
SettingsR = 4;
}
if(3570 >= ADCRESULT[0] && ADCRESULT[0] >= 3389){
SettingsR = 5;
}
if(3388 >= ADCRESULT[0] && ADCRESULT[0] >= 3247){
SettingsR = 6;
}
if(3246 >= ADCRESULT[0] && ADCRESULT[0] >= 3142){
SettingsR = 7;
}
if(3141 >= ADCRESULT[0] && ADCRESULT[0] >= 2994){
SettingsR = 8;
}
if(2993 >= ADCRESULT[0] && ADCRESULT[0] >= 2841){
SettingsR = 9;
}
if(2840 >= ADCRESULT[0] && ADCRESULT[0] >= 2724){
SettingsR = 10;
}
if(2723 >= ADCRESULT[0] && ADCRESULT[0] >= 2628){
SettingsR = 11;
}
if(2627 >= ADCRESULT[0] && ADCRESULT[0] >= 2519){
SettingsR = 12;
}
if(2518 >= ADCRESULT[0] && ADCRESULT[0] >= 2423){
SettingsR = 13;
}
if(2422 >= ADCRESULT[0] && ADCRESULT[0] >= 2355){
SettingsR = 14;
}
if(2354 >= ADCRESULT[0] && ADCRESULT[0] >= 2276){
SettingsR = 15;
}
if(2275 >= ADCRESULT[0] && ADCRESULT[0] >= 2187){
SettingsR = 16;
}
if(2186 >= ADCRESULT[0] && ADCRESULT[0] >= 2115){
SettingsR = 17;
}
if(2114 >= ADCRESULT[0] && ADCRESULT[0] >= 2055){
SettingsR = 18;
}
if(2054 >= ADCRESULT[0] && ADCRESULT[0] >= 1977){
SettingsR = 19;
}
if(1976 >= ADCRESULT[0] && ADCRESULT[0] >= 1905){
SettingsR = 20;
}
if(1904 >= ADCRESULT[0] && ADCRESULT[0] >= 1840){
SettingsR = 21;
}
if(1839 >= ADCRESULT[0] && ADCRESULT[0] >= 1780){
SettingsR = 22;
}
if(1779 >= ADCRESULT[0] && ADCRESULT[0] >= 1726){
SettingsR = 23;
}
if(1725 >= ADCRESULT[0] && ADCRESULT[0] >= 1674){
SettingsR = 24;
}
if(1673 >= ADCRESULT[0] && ADCRESULT[0] >= 1623){
SettingsR = 25;
}
if(1622 >= ADCRESULT[0] && ADCRESULT[0] >= 1577){
SettingsR = 26;
}
if(1576 >= ADCRESULT[0] && ADCRESULT[0] >= 1529){
SettingsR = 27;
}
if(1528 >= ADCRESULT[0] && ADCRESULT[0] >= 1476){
SettingsR = 28;
}
if(1475 >= ADCRESULT[0] && ADCRESULT[0] >= 1431){
SettingsR = 29;
}
if(1430 >= ADCRESULT[0] && ADCRESULT[0] >= 1388){
SettingsR = 30;
}
if(1387 >= ADCRESULT[0] && ADCRESULT[0] >= 1345){
SettingsR = 31;
}
if(1344 >= ADCRESULT[0] && ADCRESULT[0] >= 1302){
SettingsR = 32;
}
if(1301 >= ADCRESULT[0] && ADCRESULT[0] >= 1262){
SettingsR = 33;
}
if(1261 >= ADCRESULT[0] && ADCRESULT[0] >= 1217){
SettingsR = 34;
}
if(1216 >= ADCRESULT[0] && ADCRESULT[0] >= 1174){
SettingsR = 35;
}
if(1173 >= ADCRESULT[0] && ADCRESULT[0] >= 1131){
SettingsR = 36;
}
if(1130 >= ADCRESULT[0] && ADCRESULT[0] >= 1089){
SettingsR = 37;
}
if(1088 >= ADCRESULT[0] && ADCRESULT[0] >= 1055){
SettingsR = 38;
}
if(1054 >= ADCRESULT[0] && ADCRESULT[0] >= 1013){
SettingsR = 39;
}
if(1012 >= ADCRESULT[0] && ADCRESULT[0] >= 968){
SettingsR = 40;
}
if(967 >= ADCRESULT[0] && ADCRESULT[0] >= 929){
SettingsR = 41;
}
if(928 >= ADCRESULT[0] && ADCRESULT[0] >= 892){
SettingsR = 42;
}
if(891 >= ADCRESULT[0] && ADCRESULT[0] >= 852){
SettingsR = 43;
}
if(851 >= ADCRESULT[0] && ADCRESULT[0] >= 812){
SettingsR = 44;
}
if(811 >= ADCRESULT[0] && ADCRESULT[0] >= 769){
SettingsR = 45;
}
if(768 >= ADCRESULT[0] && ADCRESULT[0] >= 725){
SettingsR = 46;
}
if(724 >= ADCRESULT[0] && ADCRESULT[0] >= 679){
SettingsR = 47;
}
if(678 >= ADCRESULT[0] && ADCRESULT[0] >= 635){
SettingsR = 48;
}
if(634 >= ADCRESULT[0] && ADCRESULT[0] >= 591){
SettingsR = 49;
}
if(590 >= ADCRESULT[0] && ADCRESULT[0] >= 544){
SettingsR = 50;
}
if(543 >= ADCRESULT[0] && ADCRESULT[0] >= 494){
SettingsR = 51;
}
if(493 >= ADCRESULT[0] && ADCRESULT[0] >= 440){
SettingsR = 52;
}
if(439 >= ADCRESULT[0] && ADCRESULT[0] >= 385){
SettingsR = 53;
}
if(384 >= ADCRESULT[0] && ADCRESULT[0] >= 326){
SettingsR = 54;
}
if(325 >= ADCRESULT[0] && ADCRESULT[0] >= 265){
SettingsR = 55;
}
if(264 >= ADCRESULT[0] && ADCRESULT[0] >= 199){
SettingsR = 56;
}
if(198 >= ADCRESULT[0] && ADCRESULT[0] >= 132){
SettingsR = 57;
}
if(131 >= ADCRESULT[0] && ADCRESULT[0] >= 62){
SettingsR = 58;
}
if(61 >= ADCRESULT[0] && ADCRESULT[0] >= 13){
SettingsR = 59;
}
if(12 >= ADCRESULT[0] && ADCRESULT[0] >= 0){
SettingsR = 60;
}
/*------------ SET_TIME ------------*/

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1){
HAL_RTC_GetTime(&hrtc, &sTime,RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BIN);

if (HAL_GPIO_ReadPin(Rele_GPIO_Port, Rele_Pin) == GPIO_PIN_RESET){
HAL_GPIO_TogglePin(HL_4_GPIO_Port, HL_4_Pin);
HAL_Delay(500);
}
if (HAL_GPIO_ReadPin(Rele_GPIO_Port, Rele_Pin) == GPIO_PIN_SET){
HAL_GPIO_WritePin(HL_4_GPIO_Port, HL_4_Pin, GPIO_PIN_SET);
}

if (sTime.Seconds >= SettingsR || sTime.Minutes > 0){
Rele_ON;

sTime.Hours = 0;
sTime.Minutes = 1;
sTime.Seconds = 0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
}

else
Rele_OFF;
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}

/**
 * @brief System Clock Configuration
 * @retval None
 */
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
    /** Configure the main internal regulator output voltage
 */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/** Configure LSE Drive Capability
 */
HAL_PWR_EnableBkUpAccess();
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
/** Initializes the CPU, AHB and APB busses clocks
 */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
RCC_OscInitStruct.MSICalibrationValue = 0;
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB busses clocks
 */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
 * @brief  This function is executed in case of error occurrence.
 * @retval None
 */
void Error_Handler(void)
{
    /* USER CODE BEGIN Error_Handler_Debug */
    /* User can add his own implementation to report the HAL error return state */

    /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
 * @brief  Reports the name of the source file and the source line number
 *         where the assert_param error has occurred.
 * @param  file: pointer to the source file name
 * @param  line: assert_param error line source number
 * @retval None
 */
void assert_failed(uint8_t *file, uint32_t line)

    /* USER CODE BEGIN 6 */
    /* User can add his own implementation to report the file name and line number,
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
    /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

 


 

Ссылка на комментарий
Поделиться на другие сайты

это ж не лень было столько if-ов писать... А один case бы не прокатил?

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 час назад, IMXO сказал:

да что вы знаете о лени...

Это похоже на автоматический генератор кода. Да, уже есть такие IDE, что сами могут писать код, правда получается страшнее чем у индусов.

4 часа назад, befrikpa сказал:

Я хочу сделать штуку которая будет замыкать реле через определённое время(после подачи питания на него), реле времени так сказать.

Измеряйте время в морганиях светика, особой точности видимо там не требуется. 

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

14 часов назад, AVI-crak Home сказал:

Это похоже на автоматический генератор кода. Да, уже есть такие IDE, что сами могут писать код, правда получается страшнее чем у индусов.

Измеряйте время в морганиях светика, особой точности видимо там не требуется. 

а как это реализовать? я просто не особо пока соображаю в программировании

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Тогда нужно учиться http://dfe.petrsu.ru/koi/posob/c/c.htm . Используйте цикл с переключением светодиода, функцию задержки между переключениями светика. После включения реле - вечный цикл.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...