Go Down

Topic: inclusioni header (Read 962 times) previous topic - next topic

Salvo1969

 :)
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



 
Code: [Select]

#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





gpb01

#1
Feb 10, 2017, 07:11 am Last Edit: Feb 10, 2017, 07:11 am by gpb01
Il file "fileuno.h" lo hai messo nella stessa cartella dove si trova il .ino ?

Guglielmo
Search is Your friend ... or I am Your enemy !

Salvo1969

 :) 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

gpb01

#3
Feb 10, 2017, 09:26 am Last Edit: Feb 10, 2017, 09:26 am by gpb01
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) :

Code: [Select]
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
Search is Your friend ... or I am Your enemy !

SukkoPera

#4
Feb 10, 2017, 10:15 am Last Edit: Feb 10, 2017, 10:15 am by SukkoPera
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.
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

Salvo1969

 :)  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.

gpb01

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

Guglielmo
Search is Your friend ... or I am Your enemy !

Salvo1969

 :)
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



Code: [Select]

#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

gpb01

#8
Feb 10, 2017, 06:03 pm Last Edit: Feb 10, 2017, 06:09 pm by gpb01
La dichiari e gli assegni il valore iniziale nel .ino (ovvero crei una variabile globale), 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 ? ? ? :smiley-evil:
Search is Your friend ... or I am Your enemy !

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.
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

gpb01

#10
Feb 10, 2017, 06:10 pm Last Edit: Feb 10, 2017, 06:11 pm by gpb01
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
Search is Your friend ... or I am Your enemy !

Salvo1969

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

gpb01

#12
Feb 10, 2017, 06:12 pm Last Edit: Feb 10, 2017, 06:12 pm by gpb01
... 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
Search is Your friend ... or I am Your enemy !

Salvo1969


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



Code: [Select]


#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


gpb01

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

Cosa ci DEVE essere nel .h ?

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up