Jak umieścić blok programu w funkcji, jak zwrócić wartości?

0

Witam.
Programuję właśnie mikrokontroler MSP430G2. Napisałem program który rozpoznaje długość wciśnięcia przycisku (czy wciśnięcie krótkie czy długie).
Problem w tym, że ten blok kodu będzie w programie wykorzystany kilkanaście razy, dlatego chciałbym wlepić kod do funkcji i zamiast całego kodu wywoływać jedynie funkcję

Poniżej jest kod programu, gdzie K=1 oznacza, że było kliknięcie krótkie a D=1 oznacza kliknięcie długie. Chciałbym aby funkcja zwracała K lub D lub jakiś inny sposób przekazania rodzaju kliknięcia do programu.

Jaki typ funkcji?
Jak to zapisać w funkcji, jak wywołać i jak zwrócić wartości?
Jak to najlepiej zrobić?

// kod programu

if ( !(P1IN & BIT3)) // jeśli wciśnięto przycisk
{
a=a+1;
}

if((P1IN & BIT3) && (a>0) && (a < 15000)) //jesli zwolniono przycisk oraz a<15000 (wciśnięcie krótkie)
{
a=0;
K=1;

}

if ((P1IN & BIT3) && (a >= 15000)) // jesli zwolniono przycisk oraz a >=15000 (wciśnięcie długie)
{
a=0;
D=1;
}
0

Pragnę zaznaczyć że jest to program na mikrokontroler i funkcja ma zliczać cykle programu (to nie C na komputer, że funkcja wykona się raz i po wszystkim).
Ona ma się wykonywać dopóki odpowiednie warunki są nie spełnione.
I w tym właśnie jest największy problem- bo każde wywowałanie funkcji to 1 cykl programu. A każde wywołanie przypisuje (jeśli to funkcja typu int) stałe do parametrów funkcji...
a to nie o to chodzi, bo z każdym cyklem te stałem powinny być większe

0
#include <iostream>
using namespace std;

#define K_TIME 15000
#define D_TIME 30000

int petla();
bool f_K(int &a);
bool f_D(int &a);

int petla(){
    int a=0, D=0, K=0;
    while(true)
    {
        if (!(P1IN & BIT3))
         a = a + 1;
        if(f_K(a))
         K = 1;
        if(f_D(a))
         D = 1;
    }
}
bool f_K(int &a){
    if((P1IN & BIT3) && (a>0) && (a < K_TIME)){
        a=0;
        return true;
    }
    return false;
}
bool f_D(int &a){
    if((P1IN & BIT3) && (a>0) && (a < D_TIME)){
        a=0;
        return true;
    }
    return false;
}

int main()
{
    return petla();
}

 

Oczywiście zamiast true w warunku while wstaw odpowiedni warunek, no chyba że kończysz program odcinając zasilanie xd

1 użytkowników online, w tym zalogowanych: 0, gości: 1