Forum: Mikrocontroller und Digitale Elektronik arduino lambda function


von Jan V. (cameljoe)


Lesenswert?

Hi Leute, vielleicht könnt ihr mir hierbei etwas helfen... ich bin schon 
am verzweifeln.
1
int isKeyPressed() {
2
  //char b [20];
3
  Tasten t=NN; // this key is pressed
4
  Tasten ret=NN; // no key pressed
5
  for( int i=0; i<LEN_ALLETASTEN; i++ ) {
6
    if( digitalRead([i])==LOW ) {
7
      // t speichert die gedrückte Tastet
8
      t=(Tasten)alleTasetn[i];
9
      //sprintf( b, "%d: %d==LOW (%d)\n ", i, t, keypressed ); 
10
      //Serial.print(b);
11
      if( keypressed!=t ) {
12
        keypressed=t; // ist gültig solange die Taste gedrückt ist.
13
        ret = t;
14
      }
15
      break;
16
    }
17
  }
18
  if( t==NN && ret==NN ) { // wenn keine Taste gedrückt ist wird keypressed zurückgesetzt
19
    keypressed=NN;
20
  }  
21
  return ret;
22
}

Beim kompilieren meckert dann diese blöde IDE rum:
1
tinyrtc_test.ino: In lambda function:
2
tinyrtc_test.ino:148:24: error: expected '{' before ')' token
3
tinyrtc_test.ino: In function 'int isKeyPressed()':
4
tinyrtc_test.ino:148:24: error: cannot convert 'isKeyPressed()::__lambda0' to 'uint8_t {aka unsigned char}' for argument '1' to 'int digitalRead(uint8_t)'
5
tinyrtc_test.ino: In function 'void getDate2Lcd(DateTime)':
6
tinyrtc_test.ino:184:133: error: cannot pass objects of non-trivially-copyable type 'class String' through '...'
7
Fehler beim Kompilieren.

: Gesperrt durch Moderator
von Tom (Gast)


Lesenswert?

Jan V. schrieb:
> meckert dann diese blöde IDE

Die blöde IDE hat wohl auch die sinnlosen eckigen Klammern eingebaut 
(die in aktuellem C++ für Lambdas verwendet werden).

von Max H. (hartl192)


Lesenswert?

Jan V. schrieb:
> int isKeyPressed() {
> ...
> }
Und welche davon ist Zeile 184?

von Dr. Sommer (Gast)


Lesenswert?

Tom schrieb:
> Die blöde IDE hat wohl auch die sinnlosen eckigen Klammern eingebaut
> (die in aktuellem C++ für Lambdas verwendet werden).
Die blöde IDE verwendet einfach nur C++, und daher sind das Klammern für 
Lambdas, und die sind sehr sinnvoll.

Jan V. schrieb:
> if( digitalRead([i])==LOW ) {
Offensichtlich ist hier der Fehler, denn [i] beginnt ein Lambda. 
Vermutlich war einfach nur digitalRead(i) gemeint.

von Jan V. (cameljoe)


Lesenswert?

Tatsache.... vielen vielen Dank für die schnelle Hilfe!

von Oliver J. (skriptkiddy)


Lesenswert?

Wieder mal ganz klar ein Fehler in der HID-Bedieneinheit und nicht im 
Tool.

scnr :P

Grüße Oliver

von name (Gast)


Lesenswert?

digitalRead([i]) ist ein Fehler
du soltest digitalRead(i) verwenden

Grüße

von Yalu X. (yalu) (Moderator)


Lesenswert?

name schrieb:
> digitalRead([i]) ist ein Fehler du soltest digitalRead(i) verwenden

Nur dumm, dass das Problem schon vor über 2½ Jahren gelöst worden ist :)

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.