Salve, sto lavorando con una scheda wifi (Shield WiFi per Arduino)che utilizza una libreria chiamata MWiFi.
Ho provato ad utilizzare un esempio già incluso nella libreria chiamato GetConfig. Quando clicco sul pulsante verifica (lo stesso se clicco sul pulsante di carica), compare questo messaggio di errore:
In file included from GetConfig.ino:16:0:
C:\Users\utente\Documents\Arduino\libraries\MWIFI/MWiFi.h:277:37: error: 'prog_char' has not been declared
uint16_t writeDataPM(uint8_t sk,prog_char *buffer,uint16_t lbuff);
^
C:\Users\utente\Documents\Arduino\libraries\MWIFI/MWiFi.h:278:38: error: 'prog_char' has not been declared
uint16_t writeDataPM(uint8_t sk, prog_char *buffer);
^
C:\Users\utente\Documents\Arduino\libraries\MWIFI/MWiFi.h:279:40: error: 'prog_char' has not been declared
uint16_t writeDataLnPM(uint8_t sk, prog_char *buffer);
^
C:\Users\utente\Documents\Arduino\libraries\MWIFI/MWiFi.h:511:41: error: 'prog_char' has not been declared
uint16_t sendFromProgMem(uint8_t sk,prog_char *pgbuffer,uint16_t lbuff,uint8_t ln);
^
Mi compare questo errore per qualsiasi esempio io usi: sembra che il problema sia nel file della libreria stessa. Cosa dovrei fare? Sto impazzendo!
Help, please! 
Nessuno sa niente? Non ci sono errori simili in altre librerie e che quindi magari possono essere risolti come si può risolvere questo?
Grazie
forse questo c'entra qualcosa
http://www.atmel.com/webdoc/AVRLibcReferenceManual/group__avr__pgmspace_1gaa475b6b81fd8b34de45695da1da523b6.html
Quindi come risolvo il problema?
Inserisci questa typedef in testa al programma, prima di qualunque altra cosa.
typedef char PROGMEM prog_char;
In testa al programma nel quale uso la libreria o in testa al file .h della libreria stessa?
Ho provato ad inserire
typedef char PROGMEM prog_char;
all’inizio del programma e si ripresenta lo stesso errore. Sostituendo “#define” al posto di “typedef” e togliendo il “;”, l’errore che ora si presenta è questo:
size_t println(unsigned long, int = DEC);
^
D:\Arduino\hardware\arduino\avr\cores\arduino/Print.h:78:12: note: no known conversion for argument 1 from 'char*' to 'long unsigned int'
GetConfig.ino:58:57: error: call of overloaded 'println(const char [38])' is ambiguous
GetConfig.ino:58:57: note: candidates are:
In file included from D:\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
from D:\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
from D:\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:223,
from D:\Arduino\libraries\MWIFI/MWiFi.h:47,
from GetConfig.ino:16:
D:\Arduino\hardware\arduino\avr\cores\arduino/Print.h:73:12: note: size_t Print::println(int) <near match>
size_t println(char);
^
…l’errore prosegue ma non posso inserirlo tutto perchè oltrepasso il limite dei caratteri consentiti da pubblicare in un singolo post; in ogni caso il resto dell’errore è simile a questo primo pezzo.
Come proseguo quindi adesso? Sono un cesso in informatica e ho bisogno di trovare una soluzione veloce, perchè voglio realizzare il mio programma e non pensare solo a questi errori balordi.
Grazie 
pietrojoecapo:
all'inizio del programma e si ripresenta lo stesso errore. Sostituendo "#define" al posto di "typedef" e togliendo il ";", l'errore che ora si presenta è questo:
Se ti dico che devi usare un tydef e non una define è perché ci vuole il typdef, prog_char è stato deprecato con le ultime release delle avrlibc e la typedef ti permette di ripristinare la definizione senza dover modificare la libreria.
Ok, ma utilizzando "typedef char PROGMEM prog_char" all'inizio del programma mi compare quest'altro errore:
In file included from D:\Arduino\libraries\MWIFI/MWiFi.h:48:0,
from GetConfig.ino:15:
D:\Arduino\libraries\MWIFI/utility/SoftwareSerialWIFI.h:48:1: error: expected initializer before 'void'
void stbyte(unsigned char b);
^
In file included from GetConfig.ino:15:0:
D:\Arduino\libraries\MWIFI/MWiFi.h:277:37: error: 'prog_char' has not been declared
uint16_t writeDataPM(uint8_t sk,prog_char *buffer,uint16_t lbuff);
^
D:\Arduino\libraries\MWIFI/MWiFi.h:278:38: error: 'prog_char' has not been declared
uint16_t writeDataPM(uint8_t sk, prog_char *buffer);
^
D:\Arduino\libraries\MWIFI/MWiFi.h:279:40: error: 'prog_char' has not been declared
uint16_t writeDataLnPM(uint8_t sk, prog_char *buffer);
^
D:\Arduino\libraries\MWIFI/MWiFi.h:511:41: error: 'prog_char' has not been declared
uint16_t sendFromProgMem(uint8_t sk,prog_char *pgbuffer,uint16_t lbuff,uint8_t ln);
^
Cosa faccio?
Mi correggo, l'errore ora è il seguente:
In file included from GetConfig.ino:15:0:
D:\Arduino\libraries\MWIFI/MWiFi.h:277:37: error: 'prog_char' has not been declared
uint16_t writeDataPM(uint8_t sk,prog_char *buffer,uint16_t lbuff);
^
D:\Arduino\libraries\MWIFI/MWiFi.h:278:38: error: 'prog_char' has not been declared
uint16_t writeDataPM(uint8_t sk, prog_char *buffer);
^
D:\Arduino\libraries\MWIFI/MWiFi.h:279:40: error: 'prog_char' has not been declared
uint16_t writeDataLnPM(uint8_t sk, prog_char *buffer);
^
D:\Arduino\libraries\MWIFI/MWiFi.h:511:41: error: 'prog_char' has not been declared
uint16_t sendFromProgMem(uint8_t sk,prog_char *pgbuffer,uint16_t lbuff,uint8_t ln);
^
Mi ritrovo bloccato, come all'inizio con gli stessi tipi di errore, praticamente. :o
pietrojoecapo:
Mi ritrovo bloccato, come all'inizio con gli stessi tipi di errore, praticamente. :o
Magari se metti il link alla libreria che usi e posti lo sketch forse se ne viene a capo, così non andiamo da nessuna parte.
La libreria è MWiFi (in allegato), lo sketch (che si trova negli esempi della libreria col nome GetConfig) è il seguente:
/*
* This example demonstrates the use of some basic commands for MWiFi shield
* - startup
* - get default configuration
* - set some configuration value
* - scan wifi visible networks
* - select the best open (without password) accesspoint in terms of radio signal (RSSI) (if any)
* - try to connect to this best accesspoint (if any)
* - get the dynamic IP provided by the accesspoint
* - close connection
*
* Author: Daniele Denaro
*/
#include <MWiFi.h> // include library
char mac[18]; // buffer for mac address of shield
char name[8]; // char for shield name on net
char ip[16]; // buffer for ip address
char mask[16]; // buffer for mask address
char gateway[16]; // buffer for gateway
MWiFi WIFI; //instance of MWiFi library
void setup()
{
Serial.begin(9600);
WIFI.begin(); // startup wifi shield
WIFI.getConfig(); // reads default info from shield
WIFI.getMAC(mac); // gets string mac of shield
WIFI.getName(name); // gets name of shield on net
WIFI.getNetMask(mask); // gets dafault mask
WIFI.getGateway(gateway); // gets default gateway
// print information on console
Serial.print("MAC: ");Serial.println(mac);
Serial.print("Name: ");Serial.println(name);
Serial.print("MASK: ");Serial.println(mask);
Serial.print("GATEWAY: ");Serial.println(gateway);
WIFI.setNetMask("255.255.255.0"); //modify default
WIFI.setGateway("0.0.0.0"); //modify default
Serial.println("New mask: 255.255.255.0");
Serial.println("New gateway: 0.0.0.0");
int nn=WIFI.scanNets(); // scans visible networks. nn is the number of nets found
Serial.print("Found ");Serial.print(nn);Serial.println(" nets");
int i;
for (i=0;i<nn;i++) // displays values for each net (name,security type,access type,RSSI)
{ char* net=WIFI.getNetScanned(i); if (net!=NULL); Serial.println(net);}
Serial.println("Try to get the best open access point");
char *nameAccP=NULL; // access point (SSID) name initialising
nameAccP=WIFI.getSSIDBestOpen(nn); //selects the best open access point (if any)
if(nameAccP!=NULL)
{Serial.print("Best open access point is : ");Serial.println(nameAccP);}
else
{Serial.println("Open access point not found!");}
int fc=0; // flag connection. Connected when = 1
if(nameAccP!=NULL)
{
WIFI.ConnSetOpen(nameAccP); // prepare connection
fc=WIFI.Connect(); // connect command (if OK fc=1)
if (fc)
{
WIFI.getIP(ip); // if connected load ip buffer with new IP from net (dynamic IP)
Serial.print("Connected with ");
Serial.print(nameAccP);
Serial.print(" new IP is : ");
Serial.println(ip);
}
}
if (fc) {delay(5000); fc=WIFI.Disconnect();} // just to demonstrate connection process
if (fc==0) {Serial.println();Serial.println("Disconnected !");}
}
void loop()
{
}
ovviamente questo è lo sketch “vergine”, senza nessuna modifica da parte mia.
MWIFI25.zip (266 KB)
pietrojoecapo:
La libreria è MWiFi (in allegato), lo sketch (che si trova negli esempi della libreria col nome GetConfig) è il seguente:
Contatta l'autore perché quella libreria ha un sacco di problemi con le recenti versioni del IDE, il prog_char è solo uno dei tanti, probabilmente riesci a compilarla con il vecchio IDE 1.0.
astrobeed:
probabilmente riesci a compilarla con il vecchio IDE 1.0.
Esattamente! Con la versione IDE 1.0 sembra funzionare... Vi aggiorno!
Grazie mille 