inclusioni header

:slight_smile:
salve amici di arduino se creo un file di header e lo chiamo --fileuno.h–
poi lo richiamo tramite funzione nel void loop la IDE mi richiama errore
with no type [fpermissive] dove sbaglio non e questo il modo per
creare dei file di header?
in internet leggevo attraverso strutture struct ma non riesco a capire come si fa

grazie

#include <Arduino.h>
#include "fileuno.h"

//int i=10;

void setup () {
  Serial.begin(9600);

}

void loop () {

funzione();

}

************************ fileuno.h *****************************
#ifndef FILEUNO_H_INCLUDED
#define FILEUNO_H_INCLUDED
int i=10;
funzione(){
  Serial.println(i);
}

#endif // FILEUNO_H_INCLUDED

Il file “fileuno.h” lo hai messo nella stessa cartella dove si trova il .ino ?

Guglielmo

:) Ciao Guglielmo il fileuno. h lo messo nella stessa cartella dove si trova file ino, un altra domanda ad. Esempio. Una variabile dichiarata sul file ino non deve essere visibbile sul fileuno

Grazie ciao

In fileuno.h magari sarebbe bene che dichiarassi la funzione come VA dichiarata ... specificando COSA ritorna (void se non torna nulla) e CHE parametri si aspetta (void se non se ne aspetta) :

void funzione(void){
 Serial.println(i);
}

... dopo di che ... non ho capito il resto della domanda ... che vuoi sapere sulla variabile "i" che dichiari in fileuno.h ? ? ?

Guglielmo

Quando usi #include è come se il contenuto del file che includi fosse scritto esattamente in quel posto, per cui una variabile non può essere visibile unicamente in un file .h. Se vuoi isolare variabili devi fare un secondo file .ino o .cpp e dichiararle static.

:) Grazie Guglielmo scusa che non ho potuto rispondere prima sono al lavoro e la pausa era finita,mi sono dimenticato di mettere il punto interrogativo alla frase. Ma la variabile dichiarata sul. File ino non deve essere vista dal fileuno.h? Grazie.

Ti ha risposto SukkoPera ... dove è dichiarata quella variabile, prima o DOPO l'include ? ;)

Guglielmo

:slight_smile:
salve inanzitutto grazie per l’aiuto a Guglielmo e SukkoPera
chiedo ad esempio dove sotto ho commentato la variabile contenitore
se la dichiaro nel file ino dove al momento e commentata funziona
se pero la variabile contenitore la commento nel fileuno.h
e la dichiaro nel file ino la IDE non la riconosce e normale che sia cosi
come si fa a dichearare la variabile nel file ino per poi poterla usare
nel fileuno.h.

non so se sono stato chiaro
grazie

#include <Arduino.h>
#include "fileuno.h"
//int contenitore=10;

void setup () {
  Serial.begin(9600);

}

void loop () {

 funzione();

}



/**************fileuno.h*****



#ifndef FILEUNO_H_INCLUDED
#define FILEUNO_H_INCLUDED

 int contenitore=10;


void funzione(void){

  Serial.println(contenitore);
}

#endif // FILEUNO_H_INCLUDED

La dichiari e [u]gli assegni il valore iniziale nel .ino/u, mentre nei .h la dichiari, senza alcuna assegnazione di valore, con la clausola "extern"

extern int contenitore;

Guglielmo

P.S.: Ma comprarsi un libro sul linguaggio 'C' e studiarselo no ? ? ? :smiling_imp:

Come ti ho detto sopra, quando fai #include, il file che includi viene inserito per intero IN QUEL PUNTO! per cui se vuoi che una variabile sia visibile al suo interno devi dichiararla PRIMA di #includerlo.

SukkoPera: Come ti ho detto sopra, quando fai #include, il file che includi viene inserito per intero IN QUEL PUNTO! per cui se vuoi che una variabile sia visibile al suo interno devi dichiararla PRIMA di #includerlo.

Non è detto SukkoPera, vedi quanto ho scritto nel punto #8 ... ... anzi, è quello che si fa di solito ... si dichiara nel main una globale e poi la si mette come extern in tutti gli include che debbono averla in comune.

Guglielmo

:) :) grazie Guglielmo funziona ,quindi nei file di header le variabili li devi comunque sempre inializzare se li vuoi usare?

Salvo1969: ... quindi nei file di header le variabili li devi comunque sempre inializzare se li vuoi usare?

... in che senso ? :o

SE le vuoi inizializzare lo DEVI fare dove le dichiari globali e NON nei .h ...

Guglielmo

in questo caso la variabile contenitore e globale ed e fuori dal setup e loop
perche il fileuno.h non la riconosce?

#include <Arduino.h>
#include "fileuno.h"

int contenitore=10;
void setup () {
Serial.begin(9600);

}

void loop () {

 funzione();



}


/*******************fileuno.h********************************




#ifndef FILEUNO_H_INCLUDED
#define FILEUNO_H_INCLUDED




void funzione(void){

  Serial.println(contenitore);
}

#endif // FILEUNO_H_INCLUDED

Ma .. leggi quello che scrivo ? ? ? :o :o :o

Cosa ci DEVE essere nel .h ?

Guglielmo

:(

credo la riga sotto extern int contenitore=10;

LEGGI [u]CON ATTENZIONE[/u] IL MIO POST #8 ... >:( >:( >:( >:(

Guglielmo

:) vero grazie

extern int contenitore;

gpb01: Non è detto SukkoPera, vedi quanto ho scritto nel punto #8 ... ... anzi, è quello che si fa di solito ... si dichiara nel main una globale e poi la si mette come extern in tutti gli include che debbono averla in comune.

Sì, ma questo ha senso farlo negli ALTRI file, quelli in cui non è definita la variabile. Per quel che sta facendo Salvo qua mi sembra più sensato mettere la dichiarazione prima, ma vabbeh, intanto sembra non vederli nemmeno i miei post :(.

SukkoPera: ... mi sembra più sensato mettere la dichiarazione prima ...

mah ... esiste un metodo ben perciso e universalmente usato che è quello del extern nei .h ... che, tipicamente, si mettono in testa al codice.

Mettere prima le dichiarazioni delle globali, poi gli include ... devo dirti che non mi piace affatto, ma ... ... probabilmete è solo una questione di "ordine" mia personale ;)

Guglielmo