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
:
Gesperrt durch User
Eine void Funktion gibt nichts per return zurück.
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.
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 ...
Hallo, ich glaub die Abfrage innerhalb dieser Funktion haut noch nicht so ganz hin !
1 | (PINC & 0b00000100) |
2 | == 0b00000011 |
damit werden die falschen Bits maskiert und abgefragt.
Dein Tasten einlesen ist nicht richtig. (PINC & 0b00000100) == 0b00000011 Das in Klammern liefert die eine 1 wenn du die Taste an PC2 drückst. Aber eine 1 ist immer ungleich 3 (0b00000011).
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
Hallo Malte, ich kenn mich jetzt nicht so mit dem GNU Compiler aus, aber ich hätte gedacht das (PINC & 0b00000100) eine 0 oder 4 als Ergebnis liefert? Gruß, Steffen
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 :)
>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.
kann mir jemand noch mal bitte die returnfunktion erklären?^^ ich versteh das noch nicht ganz, was sie zurück gibt & an wen. tobias
Es ist keine Funktion. Zurückgegeben wird das, was hinter "return" steht - und zwar an den Aufrufer. Literaturhinweis: "Programmieren in C" Im übrigen ist das Ausbuddeln alter Threads hier nicht erwünscht, wenn Du Fragen hast, dann mach doch bitte dafür einen neuen, eigenen Thread auf.