bekomme ich folgende Warnung, in bezug auf die Variable uint8_t quantity :
In file included from C:\Users\desit\Documents\Arduino\Sketchbook\CoctailMaker_v4_RFID-COINKasse_TEST1\CoctailMaker_v4_RFID-COINKasse_TEST1.ino:111:0:
C:\Users\desit\AppData\Local\Temp\arduino_build_20729\sketch\Functions.h: In function 'byte getMessage(byte, uint8_t)':
C:\Users\desit\AppData\Local\Temp\arduino_build_20729\sketch\Functions.h:152:33: warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
Wire.requestFrom(7, quantity); // request 1 byte from slave arduino (7)
^
In file included from C:\Users\desit\Documents\Arduino\Sketchbook\CoctailMaker_v4_RFID-COINKasse_TEST1\CoctailMaker_v4_RFID-COINKasse_TEST1.ino:3:0:
C:\Users\desit\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.1\libraries\Wire\src/Wire.h:64:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int)
uint8_t requestFrom(int, int);
^~~~~~~~~~~
C:\Users\desit\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.1\libraries\Wire\src/Wire.h:61:13: note: candidate 2: uint8_t TwoWire::requestFrom(uint8_t, uint8_t)
uint8_t requestFrom(uint8_t, uint8_t);
^~~~~~~~~~~
Laut Wire.h / Wire.cpp scheint Wire aber als 2.es Argument einen uint8_t zu erwarten.
biete ich aber diesen an, bekomme ich die Warnung. Setze ich für quantity aber anstelle des uint8_t einen unsigned int oder uint16_t ein, bleibt die Warnung aus.
ja, Du hast Recht, laut Wire erwartet Wire.request sowohl für die Adresse als auch für die Anzahl zu lesender Bytes einen uint8_t.
Die Warnung ist auch erst aufgetreten, nachdem ich die fixe Anzahl (1) zu lesender Bytes durch eine Variable ersetzt habe.
Anscheinend ergab sich dadurch eine Diskrepanz in den Typen der beiden Argumente von Wire.request .
Kam wohl daher, dass ich dann den Typ des Adress-Arguments eben nicht spezifiziert habe.
Hab es jetzt so gefixt, dass ich die Adresse am Anfang der Funktion als 'uint8_t adr' deklariere , und überal wo die Adresse gebraucht wird, die 7 durch 'adr' ersetzt habe, damit ist der Compiler jetzt zufrieden.
Danke combie, für den Stups in die richtige Richtung. Wieder was gelernt.
Ach sooo!
Jetzt verstehe ich erst richtig, danke combie.
Kommt halt davon, wenn man gar kein englisch kann, so wie ich. (hatte ich nie unterrichtet darin bekommen), zudem hab ichs nicht so mit Sprachen. Hab schon mit Hochdeutsch/Schriftdeutsch (wie das in meiner Schule genannt wurde) so meine Probleme.
Hallo combie,
oh, ich hab google-translator benutzt, nur schien es diesmal wohl weniger an der Übersetzung selbst, als eher an meiner Fehlinterpretation derer gelegen zu haben (schäm).
Hab es jetzt so gefixt, dass ich die Adresse am Anfang der Funktion als 'uint8_t adr' deklariere , und überal wo die Adresse gebraucht wird, die 7 durch 'adr' ersetzt habe, damit ist der Compiler jetzt zufrieden.
So verleitet einen der Compiler dazu, ein guter Mensch zu werden
Da die Slave Adresse mehrfach gebraucht wird und fest ist, würde sich ein
const byte SLAVEADR = 7;
oder so was ähnliches irgendwo am Code-Anfang geradezu anbieten. (Damit kann der Compiler prima arbeiten: Er kennt den Datentyp und kann optimalen Code mit der festen ((uint8_t)7) generieren.
Und als Mensch fragt man sich nicht nach der Bedeutung dieser 7.