Arduino Forum

International => Italiano => Software => Topic started by: erdirectoor on Feb 17, 2015, 08:58 am

Title: #define #ifdef #endif HELP!
Post by: erdirectoor on Feb 17, 2015, 08:58 am
Salve a tutti, sto preparando un progragramma per arduino UNO.

Nel codice devo compilare se sono definite certe costanti, quindi ho #define WIND se do definito WIND  devo dichiarare delle variabili globali, quindi #ifdef WIND #endif con all'interno la dichiarazione delle variabili.

posto un pezzo di codice:

Code: [Select]


///definisce gestore
// #define WIND
// #define TIM
// #define TRE
// #define VODAFONE

//definisce se c'è FTP
#define FTP

//Definizione parametri Gestore
#ifdef WIND
char APN='internet.wind';
char CentroSMS='+393205858500';
#endif
#ifdef TIM
char APN='ibox.tim.it';
char CentroSMS='+393359609600';
#endif
#ifdef TRE
char APN='tre.it';
char CentroSMS='+391231223123';
#endif
#ifdef VODAFONE
char APN='mobile.vodafone.it';
char CentroSMS='+393492000300';
#endif



Se commento WIND, TIM, VODAFONE eTRE il compilatore non mi da errori, ma se decomento uno dei 4 il compilatore da un casino di errore all'interno della unzione setup.

Dove è l'errore?

grazie


Title: Re: #define #ifdef #endif HELP!
Post by: fabpolli on Feb 17, 2015, 09:09 am
Ciao, tralascio la parte burocratica della mancata presentazione :-)
Che errori ti da? A me compilando con la 1.6 non da errori, li da solo se decommento più di una define (ovviamente).
In ogni caso il codice scritto non è corretto, il tipo di dato char può ospitare un solo carattere ( http://arduino.cc/en/Reference/Char (http://arduino.cc/en/Reference/Char) ) quindi devi rivedere come istanziare correttamente le variabili che ospitano i parametri di connessione definento un arry di char.
Ciao
Title: Re: #define #ifdef #endif HELP!
Post by: nid69ita on Feb 17, 2015, 09:12 am
Salve a tutti, 
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni (http://forum.arduino.cc/index.php?topic=113640.0)
e a leggere il regolamento: Regolamento (http://forum.arduino.cc/index.php?topic=149082.0)
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections (http://forum.arduino.cc/index.php?topic=146152.0)
- qui le pinout delle varie schede by xxxPighi: Pinout (http://forum.arduino.cc/index.php?topic=151646.0)
- qui una serie di link generali utili: Link Utili (http://forum.arduino.cc/index.php?topic=126861.0)
Title: Re: #define #ifdef #endif HELP!
Post by: astrobeed on Feb 17, 2015, 09:13 am
Se commento WIND, TIM, VODAFONE eTRE il compilatore non mi da errori, ma se decomento uno dei 4 il compilatore da un casino di errore all'interno della unzione setup.
Dove è l'errore?
"char APN='ibox.tim.it';", e tutti gli altri, non è una assegnazione dato valida, o usi String, da evitare se possibile, oppure definisci un array di char e assegni i singoli elementi in questo modo:

Code: [Select]

char mystring[] = { 'H', 'e', 'l', 'l', 'o', '\0' };


Al posto di hello metti la tua stringa, l'ultimo elemento \0 serve per terminare l'arry di caratteri ed è obbligatorio metterlo.
Title: Re: #define #ifdef #endif HELP!
Post by: nid69ita on Feb 17, 2015, 09:14 am
Dove è l'errore?
Come detto anche da @fabpolli e @astro,   le stringhe in C devi racchiuderle nei doppi apici e non singoli:

Code: [Select]
char APN[]="internet.wind";

Title: Re: #define #ifdef #endif HELP!
Post by: fabpolli on Feb 17, 2015, 10:12 am
Come detto anche da @fabpolli e @astro,   le stringhe in C devi racchiuderle nei doppi apici e non singoli:

Code: [Select]
char APN="internet.wind";


Ciao nid69ita,
  non vorrei dire una cavolata ma non è un problema di apice singolo o doppio, è proprio la dichiarazione che è errata, non so se con i doppi apici il compilatore trasforma il tipo ma credo che la soluzione più pulita sia comunque quella di astrobeed
Title: Re: #define #ifdef #endif HELP!
Post by: astrobeed on Feb 17, 2015, 10:19 am
Come detto anche da @fabpolli e @astro,   le stringhe in C devi racchiuderle nei doppi apici e non singoli:
Code: [Select]
char APN="internet.wind";
Non è una dichiarazione valida, se scrivi char pippo per il compilatore è una variabile di tipo char a singolo byte e se gli assegni una stringa si arrabbia, al limite dovresti fare String pippo = "quellochetipare", però poi il tipo string porta problemi di conversione in *char.
La dichiarazione corretta, vale solo in fase di creazione della variabile, è quella che ho postato io, se devi modificare un arry di char o usi le apposite funzioni oppure devi scrivere i singoli elementi uno per uno, che poi è quello che le funzioni di libreria per la manipolazione degli array di char.
Title: Re: #define #ifdef #endif HELP!
Post by: nid69ita on Feb 17, 2015, 11:02 am
Ciao nid69ita,
  non vorrei dire una cavolata ma non è un problema di apice singolo o doppio, è proprio la dichiarazione che è errata, non so se con i doppi apici il compilatore trasforma il tipo ma credo che la soluzione più pulita sia comunque quella di astrobeed
Sorry, errore mio, ho dimenticato le parentesi quadre:
char APN[]="internet.wind";

@astro, mica devi passare ogni singolo char, come ho scritto qui sopra, lo accetta e mette in automatico il fine stringa '\0'. Che poi equivale a dichiararlo con un pointer:
char *APN="internet.wind";