Integrate the rotary encoder/button encoder into the project.
Work with exported Pico projects
In the AppScreen__Generated.c file, add a function called
checkHardwareUpdate()
:
enum KnobRotaryStatus
{
KnobRotaryLeft = -1,
KnobRotaryNoAction = 0,
KnobRotaryRight = 1
};
enum KnobButtonStatus
{
KnobButtonNotSuccess = -1,
KnonButtonNoAction = 0,
KnobButtonPressed = 1,
KnobButtonReleased = 2
};
void checkHardwareUpdate()
{
int dataRotary = KnobRotaryNoAction;
encoder_read(&dataRotary);
if (dataRotary == KnobRotaryRight)
{
//Implement code to handle right rotation here
}
else if (dataRotary == KnobRotaryLeft)
{
//Implement code to handle left rotation here
}
int dataButton = KnonButtonNoAction;
button_read(&dataButton);
if (dataButton == KnobButtonReleased)
{
//Implement code to handle button released here
}
}
In the AppScreen__Generated.c file, call
checkHardwareUpdate()
inAppScreen_Update(AppScreen *context)
mothod:
void AppScreen_Update(AppScreen *context)
{
void *owner = context->Owner;
checkHardwareUpdate();
if (context->Main_Page && !context->Main_Page->Widget.Active)
{
AppScreen__Main_Page__Destroy(context);
}
Ft_Esd_Widget_Update((Ft_Esd_Widget *)context);
}
Explain about this code:
Enum
KnobRotaryStatus
: This enumeration represents the possible states for the rotary encoder:
KnobRotaryLeft = -1
: The knob has been rotated to the left.KnobRotaryNoAction = 0
: No rotation or neutral state.KnobRotaryRight = 1
: The knob has been rotated to the right.
Enum KnobButtonStatus: This enumeration represents the possible states for the button:
KnobButtonNotSuccess = -1
: The button press was unsuccessful (could represent an error).KnonButtonNoAction = 0
: No button action.KnobButtonPressed = 1
: The button has been pressed.KnobButtonReleased = 2
: The button has been released.
checkHardwareUpdate()
Function: This function checks the status of the rotary encoder and the button and handles the events based on their statuses.
Rotary Encoder:
dataRotary is initialized to KnobRotaryNoAction.
encoder_read(&dataRotary) updates dataRotary with the current state of the rotary encoder.
If dataRotary equals KnobRotaryRight, it indicates a right rotation, and custom code should be added to handle it.
If dataRotary equals KnobRotaryLeft, it indicates a left rotation, and custom code should handle that event as well.
Button:
dataButton is initialized to KnonButtonNoAction (neutral state).
button_read(&dataButton) updates dataButton with the current button status.
If dataButton equals KnobButtonReleased, custom code can be implemented to handle the button release event.
AppScreen_Update()
is a loop function. InAppScreen_Update()
, we callcheckHardwareUpdate()
to check the rotary encoder and button encoder states .
Summary:
The
checkHardwareUpdate()
function monitors the state of the rotary encoder and button, handling actions based on rotation and button release events.The
AppScreen_Update()
function is called regularly to update the user interface and process hardware events.
Work with ESD projects
In the ESD project browser, create a file titled AppScreen.c.
Add the following source code to AppScreen.c:
#include "Ft_Esd.h"
#include "AppScreen.h"
enum KnobRotaryStatus
{
KnobRotaryLeft = -1,
KnobRotaryNoAction = 0,
KnobRotaryRight = 1
};
enum KnobButtonStatus
{
KnobButtonNotSuccess = -1,
KnonButtonNoAction = 0,
KnobButtonPressed = 1,
KnobButtonReleased = 2
};
ESD_METHOD(AppScreen_Update_Signal, Context = AppScreen)
void AppScreen_Update_Signal(AppScreen *context)
{
checkHardwareUpdate();
}
void checkHardwareUpdate()
{
#if !ESD_SIMULATION
int dataRotary = KnobRotaryNoAction;
encoder_read(&dataRotary);
if (dataRotary == KnobRotaryRight)
{
//Implement code to handle right rotation here
}
else if (dataRotary == KnobRotaryLeft)
{
//Implement code to handle left rotation here
}
int dataButton = KnonButtonNoAction;
button_read(&dataButton);
if (dataButton == KnobButtonReleased)
{
//Implement code to handle button released here
}
#endif
}
In ESD project browser, click AppScreen.page.
In ESD Screen Editor of AppScreen.page, add a
Update
slot.Connect the
Update
slot toAppScreen_Update_Signal
mothod.
Note
Since the emulator cannot simulate the rotary encoder and button encoder, we need to wrap content of the function checkHardwareUpdate()
fu with a !ESD_SIMULATION macros to prevent compilation errors.