Errore libreria MWiFi

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! :frowning:

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

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