Skocz do zawartości

Przycisk z wykorzystaniem systicka


olek623

Pomocna odpowiedź

Witam, tak jak w temacie chcę wykorzystać systicka przy przycisku tzn. aby uniknąć w while zmiany kilka razy wartości (np przy funkcji toggle zmianna może nastąpić kilka razy przy jednym wciśnięciu). Dlatego robię zmienną buttonczas, którą w momencie wciśnięcia ustawiam na 50 i systick liczy, jak skoczy zmienną flagową a ustawi na 1. Niestety mój program od razu przypisuje a=1 i cały program działa nieprawidłowo. Proszę o pomoc

 #include <stm32f0xx_rcc.h>
#include "stm32f0xx_gpio.h"

uint8_t buttonczas;
uint32_t time;
int a=0;

void init(void)
{
SystemInit();
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock/1000);

}

void SysTick_Handler(void)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))
{
	buttonczas=50;
}

if (buttonczas>0)
{
	buttonczas--;
}
else
{
	a=1;
}

}


void LED()
{

	GPIO_InitTypeDef GPIO_InitStructure;

	  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	  GPIO_Init(GPIOC, &GPIO_InitStructure);
}


void PRZYCISK()
{
	GPIO_InitTypeDef MGPIO;


	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
	MGPIO.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
	MGPIO.GPIO_Mode = GPIO_Mode_IN;
	MGPIO.GPIO_OType = GPIO_OType_PP;
	MGPIO.GPIO_Speed = GPIO_Speed_50MHz;
	MGPIO.GPIO_PuPd = GPIO_PuPd_DOWN;
	GPIO_Init(GPIOA, &MGPIO);

}



int main(void)
{
PRZYCISK();
LED();
init();

while(1)
   {

	if(a==1)
	{
		GPIO_SetBits(GPIOC, GPIO_Pin_8);
		GPIO_ResetBits(GPIOC, GPIO_Pin_9 );
	}
	else
	{
		GPIO_SetBits(GPIOC, GPIO_Pin_9);
		GPIO_ResetBits(GPIOC, GPIO_Pin_8 );

	}


   }
}
Link do komentarza
Share on other sites

Twój kod potrzebuje przebudowy, w ten sposób nie ma prawa zadziałać.

 if (buttonczas>0) 
   { 
       buttonczas--; 
   } 
   else 
   { 
       a=1; 
   } 

W tym miejscu jest powód dla którego odrazu przypisywana jest wartość a=1. Nie przypisujesz wartości początkowej dla zmiennej buttonczas, a nawet jeśli byś to zrobił to by i tak po chwili się wyzerowała. Dziwi mnie trochę, że to wogóle coś robi skoro te zmienne nie są typu volatile.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...