/*
Добавить кнопку перехода пешехода в светофор. Алгоритм работы:
1.Пешеход нажимает кнопку.
2.Через определенное программно время (например, 5 секунд) светофор для машин переходит в
режим мигающий-желтый 3 раза.
3.Красный для перехода пешеходов горит строго определенное время, сколько бы раз кнопку не
нажимали.
4.После "зеленого" с установленным временем задержки (5 секунд) происходит разрешение нажатия
кнопки (до этого кнопка не реагирует).
Светофор готов к новому циклу.
*/
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stm32l0xx_hal.h>
#define LED_PORT GPIOA
#define RED_PIN GPIO_PIN_0
#define YELLOW_PIN GPIO_PIN_1
#define GREEN_PIN GPIO_PIN_3
#define LED_PORT2 GPIOB
#define RED_PIN2 GPIO_PIN_1
#define YELLOW_PIN2 GPIO_PIN_6
#define GREEN_PIN2 GPIO_PIN_7
#define BUTTON_PORT GPIOB
#define BUTTON_PIN GPIO_PIN_0
#define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
#define VCP_TX_Pin GPIO_PIN_2
#define VCP_RX_Pin GPIO_PIN_15
void initGPIO(int port,int led)
{
GPIO_InitTypeDef GPIO_Config;
GPIO_Config.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Config.Pull = GPIO_NOPULL;
GPIO_Config.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_Config.Pin = led;
LED_PORT_CLK_ENABLE();
HAL_GPIO_Init(port, &GPIO_Config);
__HAL_RCC_GPIOB_CLK_ENABLE();
}
int main(void)
{
HAL_Init();
SystemClock_Config();
initGPIO(LED_PORT ,RED_PIN);
initGPIO(LED_PORT ,YELLOW_PIN);
initGPIO(LED_PORT ,GREEN_PIN);
initGPIO(LED_PORT2 ,RED_PIN2);
initGPIO(LED_PORT2 ,YELLOW_PIN2);
initGPIO(LED_PORT2 ,GREEN_PIN2);
while (1)
{
HAL_GPIO_WritePin(LED_PORT ,RED_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT ,YELLOW_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT ,GREEN_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_PORT2 ,RED_PIN2, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_PORT2 ,YELLOW_PIN2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT2 ,GREEN_PIN2, GPIO_PIN_RESET);
if (HAL_GPIO_ReadPin(BUTTON_PORT,BUTTON_PIN)==GPIO_PIN_SET)
{
HAL_GPIO_WritePin(LED_PORT ,GREEN_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT ,YELLOW_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_PORT2 ,RED_PIN2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT2 ,YELLOW_PIN2, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(LED_PORT ,YELLOW_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT ,RED_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_PORT2 ,YELLOW_PIN2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT2 ,GREEN_PIN2, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(LED_PORT ,YELLOW_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_PORT ,RED_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_PORT2 ,YELLOW_PIN2, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_PORT2 ,GREEN_PIN2, GPIO_PIN_RESET);
HAL_Delay(1000);
};
};
return 0;
}
Loading
st-nucleo-l031k6
st-nucleo-l031k6