2016-03-07 1 views
0

J'essaye d'envoyer un message SMS en utilisant Arduino UNO et le module GSM SIM800L lorsqu'un seuil de niveau sonore est activé. J'ai été capable de faire ceci dans tous les aspects sauf un. J'ai le numéro de téléphone auquel le message texte doit être envoyé stocké dans un fichier CONFIG.BAT sur une carte SD, le problème que je dois résoudre est comment je peux ajouter le numéro de la carte SD dans la commande AT qui spécifie le téléphone numéro auquel le SMS est envoyé. Le code que j'ai maintenant est ci-dessous:Insérer le numéro de téléphone stocké sur la carte SD dans les SMS envoyer commande AT Arduino

Le code suivant est dans une fonction qui est appelée quand le périphérique de départ est choisi, le processus commence par lire la sortie sur la broche A0 pour identifier quand un son dépasse le niveau défini dans le seuil int, cela met alors la broche 13 à haute, puis le processus initie la carte SD, vérifie qu'il y a un CONFIG.BAT sur la carte et s'il n'y a pas de fichier CONFIG.BAT dit à l'utilisateur d'aller à configurer et définir un numéro de téléphone pour les alertes. Si le CONFIG.BAT existe, le processus continue pour lire le contenu du fichier CONFIG.BAT. L'étape suivante consiste à définir le SMS au format ASCII, puis définir le numéro de téléphone, puis le contenu du message.

void sound_detect(){ 

    int sensorValue = analogRead(A0);//use A0 to read the electrical signal 

    if(sensorValue > thresholdvalue) { 

    digitalWrite(ledPin1,HIGH);//if the value read from A0 is larger than 400,then light the LED 
    delay(10); 
    digitalWrite(ledPin1,LOW); 

Serial.print("Initializing SD card..."); 

    pinMode(10, OUTPUT); 

    if (!SD.begin(SD_CS_PIN)) { 
    Serial.println("initialization failed!"); 
    return; 
    } 

    Serial.println("initialization done."); 

    if (!SD.exists("CONFIG.DAT")) { 

    Serial.println("No Number Exists! Please go to Setup Device to add Number for Alert"); 

    }else{ 

    // open the file for reading: 
    myFile = SD.open("CONFIG.DAT"); 

    if (myFile) { 

    Serial.println("CONFIG.DAT:"); 

    // read from the file until there's nothing else in it: 
    while (myFile.available()) { 

     Serial.write(myFile.read()); 

    } 

     //Serial.println(myFile);  

    // close the file: 
    myFile.close(); 

    } else { 

    // if the file didn't open, print an error: 
    Serial.println("error opening CONFIG.DAT"); 

    } 

    } 


    //Set SMS format to ASCII 
    serialSIM800.write("AT+CMGF=1\r\n"); 
    delay(1000); 

    //Send new SMS command and message number 
    serialSIM800.write("AT+CMGS=\"+44*************\"\r\n"); 
    delay(1000); 

    //Send SMS content 
    serialSIM800.write("TEST SMS NOISE DETECT"); 
    delay(1000); 

    //Send Ctrl+Z/ESC to denote SMS message is complete 
    serialSIM800.write((char)26); 
    delay(1000); 

    Serial.println("SMS Sent!"); 


    } 

} 

J'ai besoin de l'aide ou des conseils sur la façon dont je reçois le numéro de téléphone de la carte SD qui est maintenue dans la variable « myFile » dans ce morceau de code

while (myFile.available()) { 

     Serial.write(myFile.read()); 

    } 

pour remplacer le numéro de téléphone la commande AT ici

//Send new SMS command and message number 
    serialSIM800.write("AT+CMGS=\"+44*************\"\r\n"); 

J'ai regardé les commandes AT pour voir s'il y a une façon claire de le faire en vain, j'essayé de mettre la variable « myFile » entre accolades {} myFile

//Send new SMS command and message number 
    serialSIM800.write("AT+CMGS=\"{myFile}\"\r\n"); 

mais cela n'a pas fonctionné.

Toute aide serait très appréciée

Répondre

0

Déclare une chaîne en boucle():

String number =""; 

Concat le caractère lu du fichier:

while (myFile.available()) { 

    number.concat(myFile.read()); 

} 

Numéro concat à AT-comand:

serialSIM800.write("AT+CMGS=\"+44"+number+"\"\r\n"); 

C'est l'idée, mais pourriez-vous le faire de plusieurs façons.

+0

Je l'ai essayé maintenant et obtenir l'erreur aucune fonction correspondante pour l'appel à ''SoftwareSerial :: write (StringSumHelper &)'' sur la ligne de code 'serialSIM800.write (" AT + CMGS = \ "+ 44" + numéro + "\" \ r \ n ");' – Tiny

+0

Vous pourriez envoyer quelque chose si vous codez le numéro en dur? Je veux dire, si vous commettez la partie de lecture de fichier et écrivez la commande AT dans le code. J'écris cette réponse en espérant que vous avez fait un test unitaire. – jabujavi

+0

J'ai eu le numéro de téléphone codé en dur et quand le seuil a été dépassé le sms a été envoyé, avec le code que vous avez offert, je peux voir le nombre est représenté en char (chaque numéro est représenté par son code ASCII, mais d'après ce que je peux dire un ajout à la fin du code qui ne fait pas partie du numéro de téléphone), donc en utilisant 'Serial.println (numéro);' Je peux voir le numéro ASCII. J'ai essayé de comprendre comment écrire le code AT afin qu'il lise le code ASCII et le lise automatiquement comme le numéro de téléphone mais je n'ai pas été en mesure de comprendre ou d'identifier ce processus pour l'instant. – Tiny