file cpp come scheda

Ciao e grazie in anticipo
Premetto che programmo per hobby.
Vorrei inserire una scheda che contenga il file .CPP che attualmente si trova nella directory delle librerie, ma ottengo il messaggio di errore seguente.
Qiuale accorgimento?, dove sbaglio?

Arduino:1.8.10 (Windows 10), Scheda:"Arduino Nano, ATmega328P (Old Bootloader)"

C:\Users\stefano\AppData\Local\Temp\ccDQ2G6a.ltrans0.ltrans.o: In function `global constructors keyed to 65535_0_AS7263_BulbReadings.ino.cpp.o.1660':

<artificial>:(.text.startup+0x24): undefined reference to `AS726X::AS726X()'

C:\Users\stefano\AppData\Local\Temp\ccDQ2G6a.ltrans0.ltrans.o: In function `setup':

D:\Arduino sketches\AS7263_BulbReadings/AS7263_BulbReadings.ino:44: undefined reference to `AS726X::begin(TwoWire&, unsigned char, unsigned char)'

C:\Users\stefano\AppData\Local\Temp\ccDQ2G6a.ltrans0.ltrans.o: In function `loop':

D:\Arduino sketches\AS7263_BulbReadings/AS7263_BulbReadings.ino:48: undefined reference to `AS726X::takeMeasurementsWithBulb()'

D:\Arduino sketches\AS7263_BulbReadings/AS7263_BulbReadings.ino:49: undefined reference to `AS726X::printMeasurements()'

collect2.exe: error: ld returned 1 exit status

Più di una libreria trovata per "AS726X.h"
Usata: D:\Arduino
Più di una libreria trovata per "Wire.h"
Usata: C:\Program
exit status 1
Errore durante la compilazione per la scheda Arduino Nano.

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

Secondo me hai dei casini con le librerie, installate male e addirittura doppie:

Più di una libreria trovata per "AS726X.h"
Usata: D:\Arduino
Più di una libreria trovata per "Wire.h"
Usata: C:\Program

E cosa vuol dire: "Vorrei inserire una scheda che contenga il file .CPP che attualmente si trova nella directory delle librerie" ?? Una libreria la "prende" Arduino IDE e la copia (tutti i file necessari) nella cartella temp e la compila da se.

Grazie
Provo a spiegare
Questo è lo sketch

/*
  This is a library written for the AS726X Spectral Sensor (Visible or IR) with I2C firmware
  specially loaded. SparkFun sells these at its website: www.sparkfun.com

  Written by Nathan Seidle & Andrew England @ SparkFun Electronics, July 12th, 2017

  https://github.com/sparkfun/Qwiic_Spectral_Sensor_AS726X

  Do you like this library? Help support SparkFun. Buy a board!

  Development environment specifics:
  Arduino IDE 1.8.1

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "AS726X.h"
AS726X sensor;//Creates the sensor object

byte GAIN = 3;
/*
  Pass in a 0, 1, 2 or 3 to change the gain.
  0: 1x
  1: 3.7x
  2: 16x
  3: 64x (power-on default)
*/
byte MEASUREMENT_MODE = 2;
/*
  0: Continuous reading of VBGY (Visible) / STUV (IR)
  1: Continuous reading of GYOR (Visible) / RTUX (IR)
  2: Continuous reading of all channels
  3: One-shot reading of all channels (power-on default)
*/

void setup()
{
  sensor.begin(Wire, GAIN, MEASUREMENT_MODE);
}

void loop()
{
  sensor.takeMeasurementsWithBulb();
  sensor.printMeasurements();
}

il programma cosi come è funziona, ma molto ridotto nell loop()
Volendo modificare il print non volevo tutte le volte editare la libreria .cpp.
Vorrei portare tutta la .cpp come scheda aggiunta al programma principale scegliendo aggiungi scheda.

Non puoi farlo. E' come se mettessi due volte lo stesso pezzo di programma. Mettiti nei panni del compilatore C++ Troverà la libreria con la printMeasurements() della libreria e poi quella che metti tu come cpp, quale prende ?

Se vuoi modificare la libreria
#include “AS726X.h”
devi copiare sia il cpp che il .h quindi fai partire l’IDE e carica lo sketch
Te li ritroverai entrambi come schede. Nello sketch non devi cambiare nulla, fai quindi i cambiamenti che ti pare nelle altre 2 schede, sempre dall’IDE. Oppure puoi usare quello che ti pare.
Per come hai scritto l’include dovrebbe prendere prima quella nella stessa cartella del .ino
scritto così invece va a prendere quella nella cartella delle librerie.
#include <AS726X.h>

mna scusa, per fare cosa? in cosa la libreria attuale non ti soddisfa?

anche perchè la printMeasurements() si limita a fare da wrapper ad altri metodi pubblici di quella libreria

ti basta copiarne brutalmente il testo e ri-portarlo modificato dentro dove ti serve, senza fare "magheggi" strani con le librerie, che sei già abbastanza "intortato" dato che ne hai varii doppioni

zoomx:
Se vuoi modificare la libreria
#include “AS726X.h”
devi copiare sia il cpp che il .h quindi fai partire l’IDE e carica lo sketch
Te li ritroverai entrambi come schede. Nello sketch non devi cambiare nulla, fai quindi i cambiamenti che ti pare nelle altre 2 schede, sempre dall’IDE. Oppure puoi usare quello che ti pare.
Per come hai scritto l’include dovrebbe prendere prima quella nella stessa cartella del .ino
scritto così invece va a prendere quella nella cartella delle librerie.
#include <AS726X.h>

ho copiato il .h e il .cpp come schede con questa istruzione nello sketch e nel .cpp

#include <AS726X.h>

nello sketch ho questo errore

S7263_BulbReadings:24:10: error: AS726X.h: No such file or directory

 #include <AS726X.h> // libreria nella scheda

          ^~~~~~~~~~

compilation terminated.

exit status 1
AS726X.h: No such file or directory

@nid69ita quando cercavo di usare la .cpp nella scheda spostavo il .cpp dalla directory

Devi usare
#include “AS726X.h”
non
#include <AS726X.h>
L’avevo scritto sopra.

Forse sto dando informazioni sbagliate
Questo è lo sketch originale con le librerie .h e .cpp nella directory e compila

/*
  This is a library written for the AS726X Spectral Sensor (Visible or IR) with I2C firmware
  specially loaded. SparkFun sells these at its website: www.sparkfun.com

  Written by Nathan Seidle & Andrew England @ SparkFun Electronics, July 12th, 2017

  https://github.com/sparkfun/Qwiic_Spectral_Sensor_AS726X

  Do you like this library? Help support SparkFun. Buy a board!

  Development environment specifics:
  Arduino IDE 1.8.1

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "AS726X.h" //libreria nella directory
AS726X sensor;//Creates the sensor object

byte GAIN = 3;
/*
  Pass in a 0, 1, 2 or 3 to change the gain.
  0: 1x
  1: 3.7x
  2: 16x
  3: 64x (power-on default)
*/
byte MEASUREMENT_MODE = 2;
/*
  0: Continuous reading of VBGY (Visible) / STUV (IR)
  1: Continuous reading of GYOR (Visible) / RTUX (IR)
  2: Continuous reading of all channels
  3: One-shot reading of all channels (power-on default)
*/

void setup()
{
  sensor.begin(Wire, GAIN, MEASUREMENT_MODE);
}

void loop()
{
  sensor.takeMeasurementsWithBulb();
  sensor.printMeasurements();
}

se copio le librerie .cpp e .h nello sketch come schede e compilo mi segnala che ho + di una libreria e questo lo capisco

Se tolgo le librerie . cpp e .h dalla directory e compilo ho questo errore

Arduino:1.8.10 (Windows 10), Scheda:"Arduino Nano, ATmega328P (Old Bootloader)"

AS7263_BulbReadings:23:10: error: AS726X.h: No such file or directory

 #include "AS726X.h" //libreria nella directory

          ^~~~~~~~~~

compilation terminated.

exit status 1
AS726X.h: No such file or directory

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

@stefa, il consiglio che ti danno di mettere il .h e il .cpp nella cartella del tuo .ino, spiego megli, credo, vuol dire che ti copi la libreria e la fai diventare "parte" del tuo codice. Non hai "la libreria" globale modificata. Nella tua cartella hai copiato tutta la libreria, .h e .cpp ??

Se copi i due file ti segnala che hai pèù di una libreria ma dovrebbe anche dirti quale userà e dovrebbe essere quella che si trova nella cartella dello sketch.

Se togli i file ti da errore proprio perché se l’include sta tra le virgolette (e non < e >) l’IDE si aspetta di trovarlo nella stessa cartella dello sketch e non lo trova.

Probabilmente nella caccia alle librerie la parte che cerca nella cartella dello sketch viene prima e se fallisce si ferma. Se invece non fallisce continua andando a cercare dove si trovano di solito le librerie e quindi segnala l’esistenza di più librerie. Però dovrebbe poi dirti che userà quella che si trova nello sketch e che potrai quindi modificare a piacimento.

Io posso dirti solamente che fino ad oggi se uso l’include con le virgolette usa sempre la libreria che sta nella cartella dello sketch.

A questo punto spero di non essere esasperante
Nel mio ultimo post ho dimenticato di dire che ho tolto le librerie dalla directory ma le ho copiate in una scheda .h e una scheda .cpp nel .ino e quello è l’errore che ho che ripeto qua sotto

S7263_BulbReadings:24:10: error: AS726X.h: No such file or directory

 #include <AS726X.h> // libreria nella scheda

          ^~~~~~~~~~

compilation terminated.

exit status 1
AS726X.h: No such file or directory

Devo mettere tutto nella unica cartella dello sketch?

Si, i due file vanno nella stessa cartella dello sketch, non in sottocartelle. E l'include va scritto con le virgolette

#include "AS726X.h"

Quando apri lo sketch avrai gli altri file in altre 2 schede dell'IDE mentre nella prima scheda ci sarà lo sketch.

Perfetto grazie adesso ho quello che mi serve Grazie ancora buon Natale

Allora, chiariamo l’uso della #include

#include <moduli_di_sistema>

oppure

#includemoduli_dell’_utente

Una definizione un po’ più “rigorosa” la si trova QUI :wink:

Guglielmo