Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Funktion mit Übergabe- und Ausgabewert


von Markus P. (sebastianwurst)


Lesenswert?

Hi,
ich brauche Hilfe beim Erstellen einer Funktion.
Und zwar will ich einer Funktion ein Bit übergeben. Dieses Bit soll in 
Form eines Bool's übergeben werden. Wenn dieser Boolsche "Eingang" an 
der Funktion anliegt soll der Returnwert ("rw") wieder ausgegeben 
werden. Wie mach ich das denn ? Ich stelle mir das so vor, aber das 
klappt noch nicht. (Natürlich ...;-(
1
char taster(bool bit)
2
{
3
    static unsigned char zustand;
4
    char rw = 0;
5
 
6
    if(zustand == 0 && (bit))   //Taster wird gedrueckt (steigende Flanke)
7
    {
8
        zustand = 1;
9
    //usart_write_str("hallo");
10
        rw = 1;
11
    }
12
    else if (zustand == 1 && (bit))   //Taster wird gehalten
13
    {
14
         zustand = 2;
15
         rw = 0;
16
    }
17
    else if (zustand == 2 && !(bit))   //Taster wird losgelassen (fallende Flanke)
18
    {
19
        zustand = 3;
20
        rw = 0;
21
    }
22
    else if (zustand == 3 && !(bit))   //Taster losgelassen
23
    {
24
        zustand = 0;
25
        rw = 0;
26
    }
27
 
28
    return rw;
29
}

in der Main würde das dann in etwa so aussehen :
1
bool Eingang;
2
3
taster(Eingang);
4
5
If (taster() == 1) then ....
6
7
If (taster() == 2) then ....
8
9
If (taster() == 3) then ....


Sehr sehr vielen Dank für die Hilfe von Euch !!!!

Danke ...

von Floh (Gast)


Lesenswert?

Es ist egal, ob du den Rückgabewert einer Funktion verwendest oder 
nicht, daher brauchst du die beiden Fälle nicht verschieden behandeln.
1
int foo()
2
{
3
  return 0;
4
}
5
6
7
int main()
8
{
9
//kann so aufgerufen werden:
10
  foo();
11
12
//oder so (rückgabe verwendet):
13
14
  if(foo() == 0)
15
  ;
16
//  ...
17
}

von Markus P. (sebastianwurst)


Lesenswert?

Hi,
dann müsste das doch so schon klappen:




1
taster(Eingang) ;
2
3
4
if (taster() == 1)
5
usart_write_str("--1--");

Kommt aber eine Fehlermeldung :

main.c:506: error: too few arguments to function 'taster'

von Klaus W. (mfgkw)


Lesenswert?

du kannst den Rückgabewert ignorieren, aber nicht
die Funktion mit zu wenigen Argumenten aufrufen.

von holger (Gast)


Lesenswert?

static unsigned char zustand;

Lokale statische Variablen haben einen zufälligen Wert.
Das führt dazu das keine deiner if() wahr wird.
Also immer einen Wert zuweisen.

    static unsigned char zustand = 0;

von Markus P. (sebastianwurst)


Lesenswert?

Klaus Wachtler schrieb:
> du kannst den Rückgabewert ignorieren, aber nicht
> die Funktion mit zu wenigen Argumenten aufrufen.

Also würde das so funktionieren? Leider kann ich es nicht mehr 
übersetzen und testen
1
if (taster(Eingang) == 1)
2
usart_write_str("--1--");

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.