Files
STMRepo/TrafficLightsPlus/Core/Src/breadboard.c

83 lines
1.6 KiB
C

/*
* breadboard.c
*
* Created on: Sep 17, 2025
* Author: ja
*/
/*
* #define RedLight_Pin GPIO_PIN_2
* #define RedLight_GPIO_Port GPIOE
*
* #define YellowLight_Pin GPIO_PIN_3
* #define YellowLight_GPIO_Port GPIOE
*
* #define GreenLight_Pin GPIO_PIN_4
* #define GreenLight_GPIO_Port GPIOE
*
* RedLight: PE2
* YellowLight: PE3
* GreenLight: PE4
* WalkLight: PE5
*
* Done: Traffic Light
* TODO: Light Dimmer
*/
#include "main.h"
#include "breadboard.h"
#define R_Pin RedLight_Pin
#define Y_Pin YellowLight_Pin
#define G_Pin GreenLight_Pin
#define W_Pin WalkLight_Pin
#define R_Prt RedLight_GPIO_Port
#define Y_Prt YellowLight_GPIO_Port
#define G_Prt GreenLight_GPIO_Port
#define W_Prt WalkLight_GPIO_Port
uint32_t trafftick_last;
uint32_t walktick_last;
uint8_t trafflight_index = 0;
void
starttick(void)
{
trafftick_last = HAL_GetTick();
walktick_last = HAL_GetTick();
}
void
trafflight(int traffSPD, int walkSPD)
{
uint32_t trafftick_curr = HAL_GetTick();
if ((trafftick_curr - trafftick_last) >= traffSPD) {
HAL_GPIO_WritePin(R_Prt, R_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(Y_Prt, Y_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(G_Prt, G_Pin, GPIO_PIN_RESET);
switch (trafflight_index) {
case 0:
HAL_GPIO_WritePin(R_Prt, R_Pin, GPIO_PIN_SET);
break;
case 1:
HAL_GPIO_WritePin(Y_Prt, Y_Pin, GPIO_PIN_SET);
break;
case 2:
HAL_GPIO_WritePin(G_Prt, G_Pin, GPIO_PIN_SET);
break;
}
trafflight_index = (trafflight_index + 1) % 3;
trafftick_last = trafftick_curr;
}
if ((trafftick_curr - walktick_last) >= walkSPD) {
HAL_GPIO_TogglePin(W_Prt, W_Pin);
walktick_last = trafftick_curr;
}
}