Trasmissione dati MX-05V e MX-FS-03V senza libreria VirtualWire

Buongiorno ho la necessità di inviare un segnale da un arduino e l'altro utilizzando i due moduli in oggetto, il mio problema nasce dal fatto che sull'arduino dove ho la ricevente ho pure un modulo sim800, il quale non appena carico la libreria VirtualWire non riceve più gli SMS. Come faccio a ricevere il segnale senza utilizzare tale libreria?

E perchè non dovrebbero andare insieme ? La virtualwire usa il Timer 1, quindi altre librerie che usano quel timer darebbero problemi, ma non mi pare che sia il caso della sim800. Non è che usi il pin2 come Rx della sim800 ?

no per sim800 uso tx sul pin 8 e rx sul 7
Il problema è che non appena metto solo “#include <VirtualWire.h>” pare funzionare ma non riceve più gli SMS o meglio non li legge però effettua le chiamate.

questo è lo sketch di esempio che si trova nella libreria cheuso per sim800:

#include <gprs.h>
#include <SoftwareSerial.h>
// #include <VirtualWire.h>

#define TIMEOUT    5000
int led=13;

bool ledStatus;
GPRS gprs;

void setup() {
 Serial.begin(9600);
 while(!Serial);
 pinMode(led, OUTPUT); //inizializza pin 13 come uscita
 Serial.println("Starting SIM800 SMS Command Processor");
 gprs.preInit();
 delay(1000);

 while(0 != gprs.init()) {
   delay(1000);
   Serial.print("init error\r\n");
 } 


 if(0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
   ERROR("ERROR:CNMI");
   return;
 }
 if(0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) {
   ERROR("ERROR:CNMI");
   return;
 }
 Serial.println("Init success");

 Serial.println("   ----------Menu'----------");
 Serial.println("   Disattiva PIPPO        :0");
 Serial.println("   Attiva PIETRO          :1");
 Serial.println("   Prova GIUSEPPE         :2");
 Serial.println("   Resetta ARMANDO        :3");
 Serial.println("   Resetta FILIPPO        :4");
 Serial.println("   Escludi MARIO          :5");
 Serial.println("   Escludi FRANCESCO      :6");
 Serial.println("   Richiama Menu'         :7");
 Serial.println("   -------------------------");
}

char currentLine[500] = "";
int currentLineIndex = 0;

bool nextLineIsMessage = false;

void loop() {


 digitalWrite(led, ledStatus);

 if(gprs.serialSIM800.available()){
   char lastCharRead = gprs.serialSIM800.read();

   if(lastCharRead == '\r' || lastCharRead == '\n'){
     String lastLine = String(currentLine);

     if(lastLine.startsWith("+CMT:")){

       Serial.println(lastLine);
       nextLineIsMessage = true;

     } 
     else if (lastLine.length() > 0) {

       if(nextLineIsMessage) {
         Serial.println(lastLine);

         if(lastLine.indexOf("LED ON") >= 0){
           ledStatus = 1;
         } 
         else if(lastLine.indexOf("LED OFF") >= 0) {
           ledStatus = 0;
         }

         nextLineIsMessage = false;
       }

     }

     for( int i = 0; i < sizeof(currentLine);  ++i ) {
       currentLine[i] = (char)0;
     }
     currentLineIndex = 0;
   } 
   else {
     currentLine[currentLineIndex++] = lastCharRead;
   }
 }
}

L’unica aggiunta è il menu e la libreria VirtualWire.
Se lo provo così funziona, se tolgo le // dalla libreria non funziona più ma se tolgo il menù in realtà ricomincia a funzionar.

PERCHEEEEE

Mi rispondo da solo ma sarei curioso di sapere il motivo se aggiungo più di un tot di Serial.println("............"); sim800 non riceve più gli SMS Ma perchè????????????? >:( >:( >:(

turidachiana: … ma quante volte lo devo dire … ::slight_smile:
… in conformità al regolamento, punto 7, devi editare il tuo post (in basso a destra del post, bottone More → Modify) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra).

Guglielmo

turidachiana: Ma perchè????????????? >:( >:( >:(

Perché, molto probabilmente, esaurisci la memoria ... ... usa la forma Serial.println(F("..............")); che usa la memoria Flash !

Guglielmo

Chiedo venia e mille grazie per la risposta.

turidachiana: Chiedo venia e mille grazie per la risposta.

SI, ma ... [u]DEVI[/u] editare il post e mettere i tag [u]CODE[/u] !!!! >:( >:( >:(

Guglielmo

OK fatto Altra domandia con "vw_set_tx_pin(2);" io definisco il pin 2 come ingresso TX perché non posso utilizzare il pin 0, ho provato a farlo ma quando carico lo sketch se collego la ricevente sul pin 0 da errore, se collego dopo aver caricato riceve il segnale ma non posso più scrivere dal monitor seriale