You may try waiting for a longer "moment". Instead of 500 you could put 5000, yes five seconds, at least once.
I notice you use print("AT\r\n"): why not println("AT")? Maybe you are right in doing so, but since the sequence \r\n (cr-lf) is often confusing in AT commands you may also try print("AT\r") and print("AT\n").
There is a logic in the program's behavior (perhaps not the one you intended): after sending the command and waiting for 1/2 sec you read a character from the gsm without checking for gmsSerial.available() first. So if there is no answer gsmSerial.read() will return -1, translated by the serial monitor into that glyph (try Serial.println(gsm_char, DEC) to see its value as a number).
Although the the checking of available character is perform after 5 s, there could be possibility that the character comes in after 5 s although it's rather unlikely. In that case, you serial check will return zero.
Why not doing something simpler like this:
if (Serial.available() > 0)
{
gsmSerial.write(Serial.read());
}
if (gsmSerial.available() > 0)
{
Serial.write(gsmSerial.read());
}
Whatever you type on the PC should be relayed to the modem and vice versa.
If this fails, it could be something simple like inadequate current of the power supply or a GND is not connected between the boards.
I did read some thread over the net, some saying it the default baud rate is 19200 bps for this modem.
Not sure whether this is true, but worth trying out?
Another thing to try would be shorting the CTS & RTS together.
Some modem enabled these handshake on default setting based on my experience.
Worth a try I guess.
And are you sure 1 A is enough? Usually most module out there range from 1.8 - 2.5 A (Sierra, Cinterion, SIM, uBlox).
I had a quick look at the TC35 manual and I think you shouldn't overlook the fact that the serial interface operates at 2.65V. The Uno's serial operates at 5V. Apart from communication problems (also arising from the differences between CMOS and TTL levels), you are running the risk of damaging your GSM module. You may want to search for more information on signal conversion before returning to the software issue.
Good. Then how is it connected? You only said that Txd0 of the module is connected with pin 2 on the Arduino, no mention of where the tx of the Arduino (pin 3 in your code) is going. Also you talk of Txd0 and that gives me the impression you are bypassing the level converter and connect directly to the GSM module, but without manuals or schematics it's hard to tell.
Unless I'm missing something (which happens rather frequently, so double check yourself) all output pins on the board go into the GSM module. Your only access to the MAX232 seems to be through the serial port itself (pins 2=OUT, 3=IN, 5=GND).
You are right, the other side of the converter is at RS232 levels, so it seems we are still lacking a TTL - CMOS level converter. My understanding is that connecting the Arduino pins to the JP6 pins bypasses the MAX232 and may damage the GSM module.
I went through the other documentation from the Sainsmart site but I found it less than informative, and I'm afraid that only people who dealt directly with this device can provide guidance. Here in the forum I found this Arduino Forum creative solution, where the poster created a loopback on the MAX232 and (apparently) managed to obtain the required conversion. There is no explanation, however, and the desired effect depends on having full access to the MAX232 pins and on powering it with a 3V source. I also wonder whether there's any undocumented accessory (such as the jack connectors shown in the photo) that can perform the trick.
48X24X48X:
I'm afraid that if you were directly connecting the RXD of the TC35i to the Arduino board, it might be damaged by now.
I am in the same situation, I might have killed the modem.
however, i was following this website, which says it worked to him... http://denhart.dk/2012/01/siemens-tc35-gsm-module-arduino/
there are pictures showing the direct connections.
any idea?
y am getting the ÿ on each gsmSerial.read()
although its the same as if I disconnect the wires, so thats not saying anything good.
the led on the modem is flashing but i cant get anything usefull on the serial monitor.
any test to check if modem is burned?
its interesting to see that the led does blink constantly.
48X24X48X:
I'm afraid that if you were directly connecting the RXD of the TC35i to the Arduino board, it might be damaged by now.
I am in the same situation, I might have killed the modem.
however, i was following this website, which says it worked to him... http://denhart.dk/2012/01/siemens-tc35-gsm-module-arduino/
there are pictures showing the direct connections.
any idea?
y am getting the ÿ on each gsmSerial.read()
although its the same as if I disconnect the wires, so thats not saying anything good.
the led on the modem is flashing but i cant get anything usefull on the serial monitor.
any test to check if modem is burned?
its interesting to see that the led does blink constantly.
I would be more optimistic: since it doesn't work, you didn't use it long enough to fry it. The post you link shows that this modem is tolerant of 5V, and this is confirmed by the experience of another member here. See this post http://arduino.cc/forum/index.php/topic,154156.0.html: the solution is a simple voltage divider.
As for the strange characters they often indicate a mismatch in baud rates. The fact you still get them when the modem is disconnected may indicate a buffered input, or maybe noise on the Arduino RX (may not be isolated, check also the back of the board). It may also be a code issue (are you reading the modem using HardwareSerial or SoftwareSerial, and on which Arduino model?). If you suspect a code issue I would advise to create a new thread with your code in it.
Anyway I would start from setting up the voltage divider before doing further tests.
forget my questions about making the TC35 work, just got magic smoke out of the regulator and im done with trying to make it work, I will order the wavecom modem which in theory is easier to work with.