Pages: [1]   Go Down
Author Topic: declaration de variable  (Read 613 times)
0 Members and 1 Guest are viewing this topic.
New Zealand
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
With arduino everything is possible
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut
Je travail sur un projet avec une WiShield ou l'utilisateur envoi les parametre de configuration par Serial.

Voici le code de declaration normal:
Code:
// Wireless configuration parameters ----------------------------------------
unsigned char local_ip[] = {192,168,1,2};      // IP address of WiShield
unsigned char gateway_ip[] = {192,168,1,1};      // router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0};      // subnet mask for the local network
const prog_char ssid[] PROGMEM = {"ASYNCLABS"};            // max 32 bytes

unsigned char security_type = 0;      // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2

// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {"12345678"};      // max 64 characters

// WEP 128-bit keys
// sample HEX keys
prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,      // Key 0
                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      // Key 1
                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      // Key 2
                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00      // Key 3
                        };

// setup the wireless mode
// infrastructure - connect to AP
// adhoc - connect to another WiFi device
unsigned char wireless_mode = WIRELESS_MODE_INFRA;

unsigned char ssid_len;
unsigned char security_passphrase_len;
// End of wireless configuration parameters ----------------------------------------

void setup() {....}

void loop(){....}

etc...

Ce que je voudrais c'est une methode qui lit par connection Serial et qui declare les variable ensuite.

Comme ca:
Code:

void lireSerial() {
    const prog_char ssid[] PROGMEM = {(prog_char)*(Serial.read())};

    etc....
}

void setup() {....}

void loop(){....}

etc...

Sauf que le probleme c'est que puisque les variable sont declare dans une methode elle sont locale et pas accessible par les biblioteque de la WiShield.[size=12] Et je ne peux pas les declare avant car les variable sont constante[/size]. Je ne vois pas se que je peux faire.

Merci pour toute sugestion.  smiley

Cyril
Logged

France, Nice
Offline Offline
Full Member
***
Karma: 3
Posts: 194
www.Zartronic.fr
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
En effet tu ne peux pas modifier une variable déclarée const, et encore moins PROGMEM (dans la flash).
Il faut que tu déclares les variables sans const et PROGMEN ainsi elle seront dans la ram et tu pourras les modifier, évidemment ça prend de la place dans la ram et il n'y en a pas beaucoup  smiley-wink
De plus si tu n'initialises pas la variable il faut déclarer sa taille.

donc dans la décla globale à la place de :
const prog_char ssid[] PROGMEM = {"ASYNCLABS"};
tu remplaces par
char ssid[16];  // 15 char + fin de chaine \0
si tu as une valeur par défaut à mettre :
char ssid[16] = {"ASYNCLABS"};

ensuite ton programme
int i=0; // un indice pour le tableau
... une boucle de lecture des chars du serial ...
ssid[i++] = (char)Serial.read(); // Transforme int en char
... verif de ne pas dépasser la longueur max de ssid
... a la fin ...
ssid = 0; // pour la fin de chaine


En espérant que ça va t'aider  smiley-wink

PS : comment on fait pour mettre des citations de code ???
A+
Logged


www.Zartronic.fr : Arduino & Robotique

New Zealand
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
With arduino everything is possible
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour
Merci beaucoup pour l'info. Il y a juste un problème. Pour que la WiShield marche il faux que la variable ssid soit const et PROGMEM sinon j'ai une erreur de compilation.

PS: pour mettre du code click sur # dans la bar de format. smiley

Cyril
Logged

France, Nice
Offline Offline
Full Member
***
Karma: 3
Posts: 194
www.Zartronic.fr
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est quoi l'erreur ?
Car en effet en changeant le type tu dois tout recompiler, y compris la librairie, et certaines fonctions qui utilise cette variable on peut être une déclaration de type const progmem, alors il va falloir les modifier ...
Peut être il faut trouver une autre approche ...
A+
Logged


www.Zartronic.fr : Arduino & Robotique

Pages: [1]   Go Up
Jump to: