Bibliothèque incompatible ?


bonjour,

voici mon souci,

le programme fonctionne mais bug un moment bien précis ce n'est pas aléatoire donc  je pense un problème d'incompatibilité.
au démarrage chaque info qui arrive via le wire s'enregistre bien sur la carte sd !
mais si entre temps je reçois via le gsm la led s'allume ou s' éteint convenablement mais plus rien ne peut s'écrire sur la carte sd.
en somme une foie la réception via le port softserial la sd.begine(4) n'est pas 1 et myfile n'est pas 1 non plus !!!

je ne comprend pas pourquoi !

merci de votre aide ;)



code: [select]
/*
  sd card read/write

 this example shows how read , write data , sd card file
 the circuit:
 * sd card attached spi bus follows:
 ** mosi - pin 11
 ** miso - pin 12
 ** clk - pin 13
 ** cs - pin 4

 
 */
#include <softwareserial.h>
#include <spi.h>
#include <sd.h>
#include <wire.h>

softwareserial myserial(2, 3);


string smsstorepos = string("");
string msg = string("");
string sntmp = string("");
string snfull = string("");
int smscontentflag = 0;
int ledpin = 10;



file myfile;


void setup() {

  wire.begin(8);                // join i2c bus address #8
  wire.onreceive(receiveevent); // register event

  serial.begin(9600);
  myserial.begin(9600)
  pinmode(ledpin, output );
  digitalwrite( ledpin, low );
 
  delay (500);
  myserial.print("\r");
  delay(1000);
  myserial.println ("at+cpin=xxxx"); // xxxx code pin de la sim
  myserial.write(0x0d);
  /*
  delay (5000);
  myserial.println ("at+cmgs=\"xxxxxxxxxx\""); \\ xxxxxxxx numero appeler.
  myserial.write(0x0d);
  delay (1000);
  myserial.print ("gsm ready");
  myserial.write (0x1a);
  delay (2000);
  myserial.println ("at+cmgd=1");
  myserial.write (0x0d);
  delay (2000); 
  serial.println("started!");
  */
  pinmode(ledpin, output );
  digitalwrite( ledpin, low );




  while (!serial) {
    ; // wait serial port connect. needed native usb port only
   
  }

  serial.print("initializing sd card...");
  if (!sd.begin(4)) {
    serial.println("initialization failed!");
    return;
  }
  serial.println("initialization done.");
  // re-open file reading:
  myfile = sd.open("alarme.csv");
  if (myfile) {
   // read file until there's nothing else in it:
    while (myfile.available()) {
      serial.write(myfile.read());
    }
    // close file:
    myfile.close();
  } else {
    // if file didn't open, print error:
    serial.println("error opening alarme.csv");
  }
}

void loop() {
 
receptiongsm();
wire.onreceive(receiveevent);


     
}

void receiveevent() {
  while (!sd.begin(4)) {
    serial.println("initialization seconde");
    sd.begin(4);
    delay(1000);
    file myfile;
    delay(1000);
    if (myfile) {
      break;
    }

  }
  myfile = sd.open("alarme.csv", file_write);

   
    if (myfile) {
    while ( wire.available()>0) { // loop through last
    char c = wire.read(); // receive byte character
    myfile.print(c);
 
  }
    myfile.println(" ");
    myfile.close();
    serial.println("done.");
  } else {
    // if file didn't open, print error:
    serial.println("error opening alarme.csv");
  }
}


void processsms( string sms ){
 //sms = "on";
  serial.print (sms);
  sms.tolowercase();
  serial.print( "processsms [" );
  serial.print( sms );
  serial.println( "]" );
////////////////////////////////////////////////////////////////////////////////
  if(sms==("\ron")){
    digitalwrite( ledpin, high );
 

    serial.println( "led on" );
    return;
  }
//////////////////////////////////////////////////////////////
  if( sms==("\roff")){
    digitalwrite( ledpin, low );

    serial.println( "led off" );
    return;
  } else {
    myserial.print("at+cmgf=1\r");    //because want send sms in text mode
    delay(1000);
    myserial.print("at+cmgs=\"");
    myserial.print(snfull);
    myserial.print("\"\r");
    delay(1000);
    myserial.print("unknown command: ");
    myserial.print(sms);
    myserial.print("\r");
    delay(1000);
    myserial.write(0x1a);  //equivalent sending ctrl+z     
    return;
  }
}

// fr: demande d'utiliser le mode text pour la gestion des messages
void gprstextmodesms(){
  myserial.println( "at+cmgf=1" );
}

void gprsreadsmsstore( string smsstorepos ){
  // serial.print( "gprsreadsmsstore storepos " );
  // serial.println( smsstorepos );
  myserial.print( "at+cmgr=" );
  myserial.println( smsstorepos );
}


// fr: efface le contenu de la mémoire tampon des messages du gprs shield.
void cleargprsmsg(){
  msg = "";
}

// fr: interprete le message du gprs shield et agit en conséquence
void processgprsmsg() {
  serial.println("");
  serial.print( "gprs message: [" );
  serial.print( msg );
  serial.println( "]" );

  if( msg.indexof( "call ready" ) >= 0 ){
     serial.println( "*** gprs shield registered on mobile network ***" );
     gprstextmodesms();
  }

  // fr: message non sollicité quand un sms arrive
  if( msg.indexof( "+cmti" ) >= 0 ){
     serial.println( "*** sms received ***" );
     // fr: rechercher la position de la virgule dans le message complet (+cmti: "sm",6)
     //     dans l'exemple, le sms est stocké à la position 6
     int ipos = msg.indexof( "," );
     smsstorepos = msg.substring( ipos+1 );
     serial.print( "sms stored @ " );
     serial.println( smsstorepos );

     // en: ask read sms store
     // fr: demande de lecture du stockage sms
     gprsreadsmsstore( smsstorepos );
  }

  // fr: lecture du stockage sms via l'uart (résultat de la requete gprsreadsmsstore)
  if( msg.indexof( "+cmgr:" ) >= 0 ){
    // number of sender
    int snpos = msg.indexof("+3");
    serial.print("sms from: ");
    sntmp = msg.substring(snpos+1);
    snfull = "";
    (int = 0; < 11; i++){
      snfull += sntmp[i];   
    }
    serial.println(snfull);


    // fr: le prochain message contiendra le contenu du sms
    smscontentflag = 1;

    // fr: les ligne suivantes sont essentielle pour ne pas effacer le flag!
    cleargprsmsg();
    return;
  }


  // fr: le message +cmgr précédent indiquait que le message suivant du shield gprs
  //     (ce message) contient le corps du sms
  if( smscontentflag == 1 ){
    serial.println( "*** sms message content ***" );
    serial.println( msg );
    serial.println( "*** end of sms message ***" );
    processsms( msg );
    delsms();
  }

  cleargprsmsg();

  // fr: toujours mettre le flag à 0
  smscontentflag = 0;
}
void delsms() {
  myserial.print("at+cmgd=");
  myserial.println(smsstorepos);



void receptiongsm(){

    char serialinbyte;
    if(serial.available())
    {
       myserial.print((unsigned char)serial.read());
     } 
    else  if(myserial.available())
    {
        char serialinbyte;
        serialinbyte = (unsigned char)myserial.read();
        serial.print( serialinbyte );
        // -------------------------------------------------------------------
        // fr: le programme écoute également les messages issus du gprs shield.
        // fr: si le message se termine par un <cr> alors traiter le message
        if( serialinbyte == 13 ){
          // en: store char message buffer
          // fr: stocké le caractère dans le buffer de message
          processgprsmsg();
         }
         if( serialinbyte == 10 ){
         }
         else {
           msg += string(serialinbyte);
         }
     }
}


 

comment est alimenté votre shield gsm et votre carte sd?


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Bibliothèque incompatible ?


arduino

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts