Arduino Stack Exchange is a question and answer site for developers of open-source hardware and software that is compatible with Arduino. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I connected a GSM module with the Arduino UNO. The connections are as follows:

Gnd of gsm -----> Gnd of arduino

TX of gsm -----> pin 9 of arduino

Rx of gsm -----> pin 10 of arduino

GSM is powered from a 9V-1Amp wall adapter.

The GSM is performing according to all the AT commands (like making a voice call, hanging a call, answering a call) which are given, but it is displaying garbage values on serial monitor in response.

Here is the code:

#include <SoftwareSerial.h>
SoftwareSerial myserial(9, 10);

void setup() {
    Serial.begin(115200);
    myserial.begin(9600);
    myserial.println("ATDXXXXXXXXXX;");
    delay(30000);
    myserial.println("ATH");
}

void loop() {
    if (myserial.available()>0){
        Serial.println(myserial.read());
    }
}

What could be reasons for the GSM to output garbage values and how can I resolve it?

share|improve this question
    
115200 baud is at the top end of what software serial can handle. It's probably failing miserably. Better to use hardware serial on a board with multiple UARTs. – Majenko Dec 20 '16 at 20:49
    
@Majenko from the code, the OP is using SoftwareSerial at only 9600 then that should be fine. – jfpoilpret Dec 20 '16 at 21:19
    
@jfpoilpret It was hard to tell since the code was such a mess. Yes, I could have formatted it myself, but that's the job of the OP to do. If they can't even be bothered to do that, then... meh... – Majenko Dec 20 '16 at 21:20
1  
Could you post the garbage (and its value in hexadecimal if unprintable) you get? – jfpoilpret Dec 20 '16 at 21:20
    Serial.println(myserial.read());

myserial.read() returns an integer. That integer is either the ASCII code of the next character in the buffer, or -1 if there is no character to read.

You then print that integer, each one on its own line.

So the response "OK\r\n" from, say, "AT\r\n" would look like:

79
75
13
10

Instead you need to write the data, not print it:

Serial.write(myserial.read());

Also, the way you have written your code, you will get no response for 30 seconds - that is, until everything has already happened. Only after it has all finished will you get some feedback - and that may not be complete since you may overrun the buffer depending on what the modem sends.

share|improve this answer
    
I tried using Serial.write() in place of Serial.println() but still I am getting the garbage values. The module is not responding even while sending an AT command through Serial Monitor. – Jasmeet singh Dec 26 '16 at 15:48

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.