У нас есть встроенное программирование на C, где мы должны реализовать конечный автомат, который меняет серию светодиодов в зависимости от входа джойстика. Два условия: «если левый светодиод включен и нажата кнопка« Вниз », перейдите на правый светодиод» и «если правый светодиод включен, а кнопка« Вниз нажата », перейдите в левый светодиод». Я знаю, как включить определенные светодиодные индикаторы при нажатии кнопок, но не знаю, как проверить состояние вывода / светодиода GPIO и изменить другой светодиод в зависимости от состояния при использовании джойстика. Я просто хочу знать, как «вызвать» состояние светодиода.
На данный момент это пример кода конечного автомата:
void
StateMachine ()
{
// REPLACE THE FOLLOW CODE WITH YOUR SOLUTION
// This code just toggles top LED and set left or right LED.
//
// Solution.
uint8_t Joystick;
uint8_t Toggle = 0;
while (1)
{
Joystick = GetJoystick();
if (Joystick == 'L')
{
WriteLED ('L', LED_ON);
WriteLED ('R', LED_OFF);
}
else if (Joystick == 'R')
{
WriteLED ('L', LED_OFF);
WriteLED ('R', LED_ON);
}
if (Toggle == 0)
{
WriteLED ('T', LED_ON);
Toggle = 1;
}
else
{
WriteLED ('T', LED_OFF);
Toggle = 0;
}
}
}
Обновление: это мой WriteLED
метод
void
WriteLED (uint8_t LED, uint8_t State)
{
// Check for correct state
if ((State != LED_OFF) && (State != LED_ON))
{
return;
}
// Turn on/off the LED
switch (LED)
{
case 'L':
HAL_GPIO_WritePin (LD4_GPIO_Port, LD4_Pin, State);
break;
case 'T':
HAL_GPIO_WritePin (LD3_GPIO_Port, LD3_Pin, State);
break;
case 'B':
HAL_GPIO_WritePin (LD6_GPIO_Port, LD6_Pin, State);
break;
case 'R':
HAL_GPIO_WritePin (LD5_GPIO_Port, LD5_Pin, State);
break;
}
return;
}