Add switch press logic
Add GPIO PortF Handler Add Button Press measurement
This commit is contained in:
parent
3577fe4128
commit
c394652d00
|
@ -1,11 +1,13 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "tm4c123gh6pm.h"
|
#include "tm4c123gh6pm.h"
|
||||||
|
|
||||||
|
|
||||||
// Global Variables
|
// Global Variables
|
||||||
volatile int duty = 50; // Initial duty cycle
|
volatile int duty = 50; // Initial duty cycle
|
||||||
volatile bool buttonPressed = false; // Track button state
|
volatile bool buttonPressed = false; // Track button state
|
||||||
volatile uint32_t pressDuration = 0; // Track how long the button is pressed
|
volatile uint32_t pressDuration = 0; // Track how long the button is pressed
|
||||||
const long int PWM_PERIOD = 1000000; // Period for 100kHz in microseconds (10ms)
|
const long int PWM_PERIOD = 1000; // Period for 100kHz in microseconds (10ms)
|
||||||
#define STCTRL *((volatile uint32_t *) 0xE000E010) // Control and status
|
#define STCTRL *((volatile uint32_t *) 0xE000E010) // Control and status
|
||||||
#define STRELOAD *((volatile uint32_t *) 0xE000E014) // Reload value
|
#define STRELOAD *((volatile uint32_t *) 0xE000E014) // Reload value
|
||||||
#define STCURRENT *((volatile uint32_t *) 0xE000E018) // Current value
|
#define STCURRENT *((volatile uint32_t *) 0xE000E018) // Current value
|
||||||
|
@ -61,4 +63,49 @@ void SystickHandler(void)
|
||||||
{
|
{
|
||||||
ontime = 0; // Reset counter after one period
|
ontime = 0; // Reset counter after one period
|
||||||
}
|
}
|
||||||
}
|
// Handle button press duration measurement
|
||||||
|
if (buttonPressed) {
|
||||||
|
pressDuration++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void GPIOF_interruptHandler(void) {
|
||||||
|
// Check if PF0 (SW1) is pressed (interrupt)
|
||||||
|
//long int i = 0;
|
||||||
|
//for (i=0; i < 100000 ; i++){ }
|
||||||
|
if (!(GPIO_PORTF_DATA_R & 0x01))
|
||||||
|
{
|
||||||
|
if (!buttonPressed) { // If button was not already pressed
|
||||||
|
buttonPressed = true;
|
||||||
|
pressDuration = 0; // Reset press duration
|
||||||
|
}
|
||||||
|
} else { // Button released
|
||||||
|
if (buttonPressed) { // Only if button was previously pressed
|
||||||
|
buttonPressed = false;
|
||||||
|
|
||||||
|
// Determine press duration
|
||||||
|
if (pressDuration > 100) { // Long press (>1 sec if using 10 ms ticks)
|
||||||
|
duty -= 5; // Decrease duty cycle
|
||||||
|
if (duty < 0)
|
||||||
|
{duty = 0;
|
||||||
|
// Ensure duty cycle doesn't gor below 0%
|
||||||
|
|
||||||
|
}
|
||||||
|
} else if (pressDuration < 100){ // Short press
|
||||||
|
duty += 5; // decrease duty cycle
|
||||||
|
if (duty > 100)
|
||||||
|
{duty = 100;
|
||||||
|
// Ensure duty cycle doesn't exceed 100%
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear the interrupt flag for PF0 (Switch 1)
|
||||||
|
GPIO_PORTF_ICR_R = 0x01; // Clear interrupt flag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue