#include <stddef.h>
#include "main.h"
// typedef struct {
// char* scene_name;
// // pointer to the function
// void (*scene_function)();
// } Scene;
void ledThread(void const * argument) {
while(1) {
// Toggle LED
turnSprinklerOn(1);
osDelay(500);
}
}
// Initializing the GPIO pins and timer
void initialize(void) {
HAL_Init();
// Enable the clock for GPIOA, GPIOC
RCC->AHBENR |= RCC->IOPENR |= RCC_IOPENR_GPIOAEN | RCC_IOPENR_GPIOBEN;
GPIOA->MODER &= ~(3U << (2 * SPRINKLER1));
GPIOA->MODER |= (1U << (2 * SPRINKLER1));
GPIOA->MODER &= ~(3U << (2 * SPRINKLER2));
GPIOA->MODER |= (1U << (2 * SPRINKLER2));
GPIOA->MODER &= ~(3U << (2 * SPRINKLER3));
GPIOA->MODER |= (1U << (2 * SPRINKLER3));
GPIOB->MODER &= ~(3U << (2 * SPRINKLER4));
GPIOB->MODER |= (1U << (2 * SPRINKLER4));
}
// Functions to switch the sprinklers and LED on and off
void turnSprinklerOn(uint8_t sprinkler) {
switch (sprinkler) {
case 1:
GPIOA->BSRR = (1U << SPRINKLER1);
break;
case 2:
GPIOA->BSRR = (1U << SPRINKLER2);
break;
case 3:
GPIOA->BSRR = (1U << SPRINKLER3);
break;
case 4:
GPIOB->BSRR = (1U << SPRINKLER4);
break;
default:
// Invalid sprinkler number
break;
}
}
void turnSprinklerOff(uint8_t sprinkler) {
switch (sprinkler) {
case 1:
GPIOA->BSRR = (1U << (SPRINKLER1 + 16));
break;
case 2:
GPIOA->BSRR = (1U << (SPRINKLER2 + 16));
break;
case 3:
GPIOA->BSRR = (1U << (SPRINKLER3 + 16));
break;
case 4:
GPIOB->BSRR = (1U << (SPRINKLER4 + 16));
break;
default:
// Invalid sprinkler number
break;
}
}
int main(void) {
// Call the initialize function
initialize();
// Initialize Kernel
osKernelInitialize();
// Create the thread
osThreadNew(ledThread, NULL, NULL);
// Start Kernel
// osKernelStart();
while (1);
}