Go Down

Topic: #define #ifdef #endif HELP! (Read 1 time) previous topic - next topic

erdirectoor

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



fabpolli

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 ) quindi devi rivedere come istanziare correttamente le variabili che ospitano i parametri di connessione definento un arry di char.
Ciao

nid69ita

Salve a tutti, 
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili
my name is IGOR, not AIGOR

astrobeed

#3
Feb 17, 2015, 09:13 am Last Edit: Feb 17, 2015, 09:14 am by astrobeed
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.
Scientia potentia est

nid69ita

#4
Feb 17, 2015, 09:14 am Last Edit: Feb 17, 2015, 11:00 am by nid69ita
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";

my name is IGOR, not AIGOR

fabpolli

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

astrobeed

#6
Feb 17, 2015, 10:19 am Last Edit: Feb 17, 2015, 10:20 am by astrobeed
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.
Scientia potentia est

nid69ita

#7
Feb 17, 2015, 11:02 am Last Edit: Feb 17, 2015, 11:05 am by nid69ita
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";
my name is IGOR, not AIGOR

Go Up