Analysis of OH Leuven vs Anderlecht Match
The upcoming football match between OH Leuven and Anderlecht on September 26, 2025, presents intriguing betting opportunities across various segments. With a detailed analysis of historical data and current team performance, this breakdown offers insights into potential outcomes, focusing on key betting categories. The match is scheduled for 18:45, providing ample time for strategic betting decisions.
OH Leuven
Anderlecht
Predictions:
Market | Prediction | Odd | Result |
---|---|---|---|
Both Teams Not To Score In 2nd Half | 87.70% | 1.33 Make Bet | |
Over 1.5 Goals | 87.20% | 1.29 Make Bet | |
Both Teams Not To Score In 1st Half | 72.80% | 1.18 Make Bet | |
Home Team To Score In 1st Half | 73.10% | Make Bet | |
Sum of Goals 2 or 3 | 73.30% | 1.95 Make Bet | |
First Goal Between Minute 0-29 | 73.30% | 1.83 Make Bet | |
Away Team To Score In 2nd Half | 67.30% | Make Bet | |
Away Team Not To Score In 1st Half | 67.00% | Make Bet | |
Under 2.5 Goals | 61.10% | 1.91 Make Bet | |
Goal In Last 15 Minutes | 61.20% | Make Bet | |
Last Goal 73+ Minutes | 64.70% | 1.83 Make Bet | |
Away Team To Win | 55.30% | 2.00 Make Bet | |
Under 4.5 Cards | 60.20% | Make Bet | |
Under 5.5 Cards | 57.70% | Make Bet | |
Avg. Total Goals | 3.38% | Make Bet | |
Yellow Cards | 3.78% | Make Bet | |
Avg. Goals Scored | 2.49% | Make Bet | |
Avg. Conceded Goals | 2.38% | Make Bet | |
Red Cards | 1.34% | Make Bet |
Betting Segments Analysis
Score Predictions
- Over 1.5 Goals (87.70): With an average total goals of 3.58 per match and an average goals scored of 2.49 by the home team, this prediction seems promising.
- Under 2.5 Goals (65.10): While the odds are lower compared to over 1.5 goals, the average conceded goals of 1.48 by the home team suggests a tighter match.
- Sum of Goals 2 or 3 (77.70): Given the average total goals, this prediction aligns well with expected match dynamics.
First Half Insights
- Both Teams Not To Score In 1st Half (74.70): This segment offers a moderate chance, considering both teams’ defensive capabilities.
- Home Team To Score In 1st Half (76.60): With OH Leuven’s average goals scored being 2.49, early scoring is a plausible scenario.
Second Half Insights
- Both Teams Not To Score In 2nd Half (86.00): The high odds reflect the potential for a goal-sparse second half.
- Away Team To Score In 2nd Half (65.60): Anderlecht’s ability to capitalize in the latter stages could make this a viable option.
Timing and Late Goals
- First Goal Between Minute 0-29 (70.90): Early goals are likely given both teams’ offensive records.
- Goal In Last 15 Minutes (60.60): Matches often see late goals due to fatigue or strategic shifts.
- Last Goal 73+ Minutes (63.40): The odds suggest a strong possibility for late-game drama.
</un#include “main.h”
void init_spi()
{
SPI_InitTypeDef spi_init_struct;
GPIO_InitTypeDef gpio_init_struct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE);
// Configure GPIO pins
gpio_init_struct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
gpio_init_struct.GPIO_Mode = GPIO_Mode_AF_PP;
gpio_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_init_struct);
// Configure CS pin
gpio_init_struct.GPIO_Pin = GPIO_Pin_4;
gpio_init_struct.GPIO_Mode = GPIO_Mode_Out_PP;
gpio_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_init_struct);
SPI_CS_HIGH();
// Configure SPI
spi_init_struct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
spi_init_struct.SPI_Mode = SPI_Mode_Master;
spi_init_struct.SPI_DataSize = SPI_DataSize_8b;
spi_init_struct.SPI_CPOL = SPI_CPOL_Low;
spi_init_struct.SPI_CPHA = SPI_CPHA_1Edge;
spi_init_struct.SPI_NSS = SPI_NSS_Soft;
spi_init_struct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; // fAPB / fSCK = fAPB / (fAPB / fSCK) = fSCK
spi_init_struct.SPI_FirstBit = SPI_FirstBit_MSB;
spi_init_struct.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &spi_init_struct);
// Enable SPI1
SPI_Cmd(SPI1, ENABLE);
}
void write_spi(uint8_t data)
{
while(!SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE));
SPI_I2S_SendData(SPI1, data);
while(!SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE));
uint8_t dummy_data = SPI_I2S_ReceiveData(SPI1);
}
uint8_t read_spi(void)
{
uint8_t data;
while(!SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE));
SPI_I2S_SendData(SPI1, READ_COMMAND);
while(!SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE));
data = SPI_I2S_ReceiveData(SPI1);
return data;
}
void read_reg(uint8_t reg_address, uint8_t *reg_data)
{
SPI_CS_LOW();
write_spi(reg_address | READ_COMMAND);
*reg_data = read_spi();
SPI_CS_HIGH();
}
void write_reg(uint8_t reg_address, uint8_t reg_data)
{
SPI_CS_LOW();
write_spi(reg_address | WRITE_COMMAND);
write_spi(reg_data);
SPI_CS_HIGH();
}
uint8_t get_slave_select(void)
{
return slave_select;
}
void set_slave_select(uint8_t slave_select_in)
{
slave_select = slave_select_in;
if(slave_select == SLAVE_SELECT_LIS302DL)
{
SLAVE_SELECT_LIS302DL_HIGH();
}
else if(slave_select == SLAVE_SELECT_MPU6050)
{
SLAVE_SELECT_MPU6050_HIGH();
}
else if(slave_select == SLAVE_SELECT_HMC5883L)
{
SLAVE_SELECT_HMC5883L_HIGH();
}
else
{
SLAVE_SELECT_NONE_HIGH();
}
}
void select_slave(void)
{
switch(slave_select)
{
case SLAVE_SELECT_LIS302DL:
LIS302DL_CS_LOW();
break;
case SLAVE_SELECT_MPU6050:
MPU6050_CS_LOW();
break;
case SLAVE_SELECT_HMC5883L:
HMC5883L_CS_LOW();
break;
default:
NONE_CS_LOW();
break;
}
}
void deselect_slave(void)
{
switch(slave_select)
{
case SLAVE_SELECT_LIS302DL:
LIS302DL_CS_HIGH();
break;
case SLAVE_SELECT_MPU6050:
MPU6050_CS_HIGH();
break;
case SLAVE_SELECT_HMC5883L:
HMC5883L_CS_HIGH();
break;
default:
NONE_CS_HIGH();
break;
}
}benjimc/Embedded-Coursework/accelerometer_code/accelerometer_code/accelerometer.c
#include “main.h”
void init_accelerometer()
{
init_spi();
set_slave_select(SLAVE_SELECT_LIS302DL);
select_slave();
write_reg(CTRL_REG1_ADDR, CTRL_REG1_VALUE);
write_reg(CTRL_REG4_ADDR, CTRL_REG4_VALUE);
deselect_slave();
read_reg(STATUS_REG_ADDR, &status_reg);
printf(“STATUS_REG: %dn”, status_reg);
}#include “main.h”
#define DEFAULT_TIMER_PERIOD_MS (100)
void init_timer()
{
TIM_TimeBaseInitTypeDef timer_base_config;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6 , ENABLE);
timer_base_config.TIM_Prescaler = ((SystemCoreClock / TIMER_FREQUENCY) – 1);
timer_base_config.TIM_Period = DEFAULT_TIMER_PERIOD_MS * TIMER_FREQUENCY / TIMER_PERIOD_MS_TO_FREQUENCY_RATIO – 1;
timer_base_config.TIM_ClockDivision = TIM_CKD_DIV1;
timer_base_config.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM6 , &timer_base_config);
TIM_ITConfig(TIM6 , TIM_IT_Update , ENABLE);
NVIC_EnableIRQ(TIM6_DAC_IRQn);
TIM_Cmd(TIM6 , ENABLE);
}
void TIM6_DAC_IRQHandler()
{
static int16_t count_ms;
if(TIM_GetITStatus(TIM6 , TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM6 , TIM_IT_Update);
count_ms++;
printf(“ms: %dn”, count_ms);
}
}benjimc/Embedded-Coursework/mpu6050_code/mpu6050_code/main.c
#include “main.h”
int main(void)
{
init_leds();
init_usart();
init_timer();
init_accelerometer();
init_gyroscope();
printf(“MPU6050 init complete.n”);
while(1) {
get_accelerometer_data();
get_gyroscope_data();
printf(“x_acc: %dty_acc: %dtz_acc: %dn”, x_accelerometer_data, y_accelerometer_data,
z_accelerometer_data);
printf(“x_gyro: %dty_gyro: %dtz_gyro: %dn”, x_gyroscope_data,
y_gyroscope_data,
z_gyroscope_data);
printf(“n”);
delay_ms(500);
reset_system_variables();
printf(“done.n”);
delay_ms(500);
printf(“n”);
}
}#include “main.h”
int main(void)
{
init_leds();
init_usart();
init_timer();
init_accelerometer();
printf(“LIS302DL init complete.n”);
while(1) {
get_accelerometer_data();
printf(“x_acc: %dty_acc: %dtz_acc: %dn”, x_accelerometer_data,
y_accelerometer_data,
z_accelerometer_data);
printf(“n”);
delay_ms(500);
reset_system_variables();
printf(“done.n”);
delay_ms(500);
printf(“n”);
}
}benjimc/Embedded-Coursework/compass_code/compass_code/main.c
#include “main.h”
int main(void)
{
init_leds();
init_usart();
init_timer();
init_compass();
printf(“HMC5883L init complete.n”);
while(1) {
get_compass_data();
printf(“x_compass: %dty_compass: %dtz_compass: %dn”, x_compass_data,
y_compass_data,
z_compass_data);
printf(“n”);
delay_ms(500);
reset_system_variables();
printf(“done.n”);
delay_ms(500);
printf(“n”);
}
}#include “main.h”
#define DEFAULT_TIMER_PERIOD_MS (100)
static volatile int16_t count_ms;
static volatile int16_t count_us;
void init_timer()
{
TIM_TimeBaseInitTypeDef timer_base_config;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6 , ENABLE);
timer_base_config.TIM_Prescaler = ((SystemCoreClock / TIMER_FREQUENCY) – 1); // pre-scaled counter frequency is SystemCoreClock/TIMER_FREQUENCY Hz
timer_base_config.TIM_Period = DEFAULT_TIMER_PERIOD_MS * TIMER_FREQUENCY / TIMER_PERIOD_MS_TO_FREQUENCY_RATIO – 1; // timer frequency is TIMER_FREQUENCY/TIMER_PERIOD_MS_TO_FREQUENCY_RATIO Hz
timer_base_config.TIM_ClockDivision = TIM_CKD_DIV1;
timer_base_config.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM6 , &timer_base_config);
TIM_ITConfig(TIM6 , TIM_IT_Update , ENABLE);
NVIC_EnableIRQ(TIM6_DAC_IRQn);
TIM_Cmd(TIM6 , ENABLE);
}
void init_microsecond_timer()
{
TIM_TimeBaseInitTypeDef timer_base_config_us;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7 , ENABLE);
timer_base_config_us.TIM_Prescaler = ((SystemCoreClock / TIMER_FREQUENCY) – 1); // pre-scaled counter frequency is SystemCoreClock/TIMER_FREQUENCY Hz
timer_base_config_us.TIM_Period = DEFAULT_TIMER_PERIOD_US * TIMER_FREQUENCY / TIMER_PERIOD_US_TO_FREQUENCY_RATIO – 1; // timer frequency is TIMER_FREQUENCY/TIMER_PERIOD_US_TO_FREQUENCY_RATIO Hz
timer_base_config_us.TIM_ClockDivision = TIM_CKD_DIV1;
timer_base_config_us.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM7 , &timer_base_config_us);
TIM_ITConfig(TIM7 , TIM_IT_Update , ENABLE);
NVIC_EnableIRQ(TIM7_IRQn);
TIM_Cmd(TIM7 , ENABLE);
}
void TIM7_IRQHandler()
{
if(TIM_GetITStatus(TIM7 , TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM7 , TIM_IT_Update);
count_us++;
}
}
void TIM6_DAC_IRQHandler()
{
if(TIM_GetITStatus(TIM6 , TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM6 , TIM_IT_Update);
count_ms++;
}
}#ifndef MAIN_H_
#define MAIN_H_
#include
#include
#include “stm32f10x_conf.h”
#include “stm32f10x_rcc.h”
#include “stm32f10x_gpio.h”
#include “stm32f10x_usart.h”
#include “stm32f10x_tim.h”
#include “misc.h”
// Timer settings
#define TIMER_FREQUENCY (48000000)
#define TIMER_PERIOD_MS_TO_FREQUENCY_RATIO (1000)
#define TIMER_PERIOD_US_TO_FREQUENCY_RATIO (1000000)
// USART settings
#define USART_BAUD_RATE (115200)
// Accelerometer settings
#define ACCELEROMETER_SPI_CLOCK_SPEED (10000000)
#define ACCELEROMETER_ADDRESS (0b11000000)
#define ACCELEROMETER_READ_COMMAND (0b00000001)
#define ACCELEROMETER_WRITE_COMMAND (0b00000000)
#define ACCELEROMETER_X_AXIS_DATA_LSB_ADDR (0b00111001)
#define ACCELEROMETER_Y_AXIS_DATA_LSB_ADDR (0b00111010)
#define ACCELEROMETER_Z_AXIS_DATA_LSB_ADDR (0b00111101)
#define ACCELEROMETER_WHO_AM_I_ADDR (0b00011000)
// Gyroscope settings
#define GYROSCOPE_SPI_CLOCK_SPEED (10000000)
#define GYROSCOPE_ADDRESS (0b11010000)
#define GYROSCOPE_READ_COMMAND (0b00000001)
#define GYROSCOPE_WRITE_COMMAND (0b00000000)
// Compass settings
#define COMPASS_SPI_CLOCK_SPEED (10000000)
#define COMPASS_ADDRESS (0b00111100)
#define COMPASS_READ_COMMAND (0b00000001)
#define COMPASS_WRITE_COMMAND (0b00000000)
// I/O definitions
// LEDs
// Red LED
#define RED_LED_GPIO_PORT GPIOB
#define RED_LED_GPIO_CLK RCC_APB2Periph_GPIOB
#define RED_LED_GPIO_PIN GPIO_Pin_5
// Green LED
#define GREEN_LED_GPIO_PORT GPIOB
#define GREEN_LED_GPIO_CLK RCC_APB2Periph_GPIOB
#define GREEN_LED_GPIO_PIN GPIO_Pin_4
// Blue LED
#define BLUE_LED_GPIO_PORT GPIOC
#define BLUE_LED_GPIO_CLK RCC_APB2Periph_GPIOC
// Blue LED pin is not defined as an output pin in the stm32f103c8t6 board schematic.
// Therefore it must be defined manually.
#ifdef USE_BLUE_LED
# define BLUE_LED_GPIO_PIN GPIO_Pin_13
#endif /* USE_BLUE_LED */
// Buttons
// Push button connected to PA15 must be used as input.
// Switches connected to PA12 and PA13 must be used as inputs.
// Other push buttons and switches must be used as outputs.
// Push button connected to PB12 must be used as input.
// Push button connected to PC13 must be used as input.
// Switch connected to PC14 must be used as input.
// Push button connected to PD14 must be used as input.
// Push button connected to PD15 must be used as input.
#ifdef USE_BUTTON_PA15_AS_INPUT
# define BUTTON_PA15_GPIO_PORT GPIOA
# define BUTTON_PA15_GPIO_CLK RCC_APB2Periph_GPIOA
# define BUTTON_PA15_GPIO_PIN GPIO_Pin_15
#endif /* USE_BUTTON_PA15_AS_INPUT */
#ifdef USE_SWITCH_PA12_AS_INPUT
# define SWITCH_PA12_GPIO_PORT GPIOA
# define SWITCH_PA12_GPIO_CLK RCC_APB2Periph_GPIOA
# define SWITCH_PA12_GPIO_PIN GPIO_Pin_12
#endif /* USE_SWITCH_PA12_AS_INPUT */
#ifdef USE_SWITCH_PA13_AS_INPUT
# define SWITCH_PA13_GPIO_PORT GPIOA
# define SWITCH_PA13_GPIO_CLK RCC_APB2Periph_GPIOA
# define SWITCH_PA13_GPIO_PIN GPIO_Pin_13
#endif /* USE_SWITCH_PA13_AS_INPUT */
#ifdef USE_BUTTON_PB12_AS_INPUT
# define BUTTON_PB12_GPIO_PORT GPIOB
# define BUTTON_PB12_GPIO_CLK RCC_APB2Periph_GPIOB
# define BUTTON_PB12_GPIO_PIN GPIO_Pin_12
#endif /* USE_BUTTON_PB12_AS_INPUT */
#ifdef USE_BUTTON_PC13_AS_INPUT
# define BUTTON_PC13_GPIO_PORT GPIOC
# define BUTTON_PC13_GPIO_CLK RCC_APB2Periph_GPIOC
# define BUTTON_PC13_GPIO_PIN GPIO_Pin_13
#endif /* USE_BUTTON_PC13_AS_INPUT */
#ifdef USE_SWITCH_PC14_AS_INPUT
# define SWITCH_PC14_GPIO_PORT GPIOC
# define SWITCH_PC14_GPIO_CLK RCC_APB2Periph_GPIOC
# define SWITCH_PC14_GPIO_PIN GPIO_Pin_14
#endif /* USE_SWITCH_PC14_AS_INPUT */
#ifdef USE_BUTTON_PD14_AS_INPUT
# define BUTTON_PD14_GPIO_PORT GPIOD
# define BUTTON_PD14_GPIO_CLK RCC_APB2Periph_GPIOD
# define BUTTON_PD14_GPIO_PIN GPIOD_Pin_14
#endif /* USE_BUTTON_PD14_AS_INPUT */
#ifdef USE_BUTTON_PD15_AS_INPUT
# define BUTTON_PD15_GPIO_PORT GPIOD