return Befehl - Werterückgabe nutzen aber wie?

Gast #1225013
Lesenswert?

Hallo,
bisher habe ich um "return" einen großen Bogen gemacht ... aber ein 
Kollege hat mich auf den Geschmak gebracht, allerdings habe ich nicht 
wirklich etwas gefunden, was das Ganze ausführlich erklärt.

meine Funktion lautet:

void lkey(void)
{
  if ((PINC & 0b00000100) == 0b00000011) return 1; // Taste links
  return 0;
}

jetzt will ich im Programm etwas solange ausführen bis jemand die Taste 
links gedrückt gedrückt hat, also solange return 0. Aber wie mache ich 
das?

while ( rkey() == 1 )    //
  {
                 // Anweisung
        }

../setup.c:239: error: void value not ignored as it ought to be

beschwert sich das AVR-Studio, aber für euch ist das doch ein leichtes 
oder?
Danke
Persönliche Seite #1225017
Lesenswert?

1
void lkey(void)
Fast. Du musst dem Compiler sagen, von welchem Datentyp der Wert ist, 
den du zurückgeben willst. "void" bedeutet "nichts", also dass du nichts 
zurück geben willst. Wenn du also einen integer zurückgeben willst, 
schreibst du:
1
int lkey (void) {
Die while-Schleife sieht so schonmal ganz gut aus.
Edit: Wenn du jedoch nur 1 oder 0 zurückgeben willst, solltest du 
vielleicht char statt int nehmen, dann sparst du ein byte.
Gast #1225044
Lesenswert?

also mit:

unsigned char mkey(void)
{}

läßt es sich compailieren, aber es funzt ned :(

if (mkey() == 1) PORTE |= (1<<PE5);

sprich wenn ich den Knopf für mkey() drücke sollte die LED angehen, tut 
se aber nicht, aber eine andere LED zeigt mir an, daß ich diesen 
Programmteil auf jeden Fall erreiche.

if ( mkey() ) ändert auch nix, kommt mir so vor, wie wenn das mit dem 
return irgendwie nicht gehen würde ...
#1225060
Lesenswert?

Hallo Jens,

ich weiß nicht was in deiner mkey() Funktion steht, wenn es aber das 
gleiche wie in lkey() ist, wundert es mich nicht das es nicht 
funktioniert.

// if ((PINC & 0b00000100) == 0b00000011) return 1; // Taste links

Schau dir mal die Bits an, diese if() Abfrage wird wohl nie TRUE 
ergeben...

Viele Grüße,
Steffen
Gast #1225073
Lesenswert?

als bin ich echt de Held - hab die Funktion bei meinem Kollegen 
abgeschrieben, allerdings wollte er bei SICH verhindern, daß mehrere 
Knöpfe gleichzeitig gedrückt sind und ich hab das bei der Portierung zu 
meinem Projekt ned bedacht und daher stand da Käse drin ... und dann als 
das Problem beim retrun-Befehl gesucht ...

danke :)
Gast #1225077
Lesenswert?

>hab die Funktion bei meinem Kollegen
>abgeschrieben

Abschreiben war noch nie eine gute Idee.
Zwischen deinen Ohren befindet sich eine Masse
mit der einige Menschen scheinbar dazu
in der Lage sind selbstständig zu denken.
Einfache logische Verknüpfungen sollen selbst
Affen schaffen: Feuer = Aua, kein Feuer kein Aua.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.