Serial.write для чего?

artemik
Offline
Зарегистрирован: 10.03.2012

Друзья, не пойму как работает Serial.write.....

У меня gsm модем по рс232 подключен к ардуине (на 0 и 1 пин), как организовать обмен в терминале между компом и ардуино+модем? Т.е. в терминале я отсылаю команду АТ и должно вернуться ОК. На верном ли я пути? начинаю скетч так:

int val = 0;

void setup()
 {
  Serial.begin (115200); //скорость модема
 }

void loop()
 {
  if (Serial.avaolable > 0)
   {
   //что тут должно быть не пойму :)
   }
 }

 Подскажите как дальше? Serial.wtite или нет?

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Serial.write() Может отправлять в порт  массив типа Byte или 1 Byte

artemik
Offline
Зарегистрирован: 10.03.2012

carduino.ru пишет:

Serial.write() Может отправлять в порт  массив типа Byte или 1 Byte

это я знаю, но не понимаю)

как реализовать, чтоб на команду AT модем вернул ответ в терминал?

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

artemik пишет:

carduino.ru пишет:

Serial.write() Может отправлять в порт  массив типа Byte или 1 Byte

это я знаю, но не понимаю)

как реализовать, чтоб на команду AT модем вернул ответ в терминал?

 как вариант вот так

 char incomingByte="";
 char   AT_command_string="AT"+char(13);
 Serial.flush()
 serial.write(AT_command_string) ;
 while (Serial.available()=0){};
 while (Serial.available()>0){
 incomingByte = incomingByte+Serial.read() };

 

Если все правильно то в incomingByte окажется "OK"

artemik
Offline
Зарегистрирован: 10.03.2012

Благодарю за ответ, но не компилируется...

sketch_apr10a.cpp: In function 'void loop()':
sketch_apr10a:5: error: invalid conversion from 'const char*' to 'char'
sketch_apr10a:6: error: invalid conversion from 'const char*' to 'char'
sketch_apr10a:9: error: lvalue required as left operand of assignment
sketch_apr10a:13: error: expected `;' before '}' token

 

 

artemik
Offline
Зарегистрирован: 10.03.2012

Подправил вот так

void setup ()
  {
  Serial.begin (115200);
  }
    void loop ()
    {
    char incomingByte = "";
    char AT_command_string = "AT" + char(13);
    Serial.flush ();
    Serial.write (AT_command_string);
    while (Serial.available () = 0) {}
    while (Serial.available () > 0)
        {
          incomingByte = incomingByte + Serial.read (); 
        }          
    }

Ошибки такие:

sketch_apr10a.cpp: In function 'void loop()':
sketch_apr10a:4: error: invalid conversion from 'const char*' to 'char'
sketch_apr10a:5: error: invalid conversion from 'const char*' to 'char'
sketch_apr10a:8: error: lvalue required as left operand of assignment

 

Probelzaelo
Offline
Зарегистрирован: 15.04.2011
void setup()
    {
    Serial.begin(115200);
    Serial.flush();
    modem_init1();  // Variant 1
    modem_init2();  // Variant 2
    modem_init3();  // Variant 3
    }

void loop()
   {
    if (Serial.available()) {
        int inByte = Serial.read();
      }    
   }

void modem_init1()
    {
    // тут смотреть коды символов http://arduino.ru/Reference/ASCIIchart
    Serial.write(65);  // send "A"  
    Serial.write(84);  // send "T"
    Serial.write(13);  // send CR    
    }
    
    void modem_init2()
    {
    Serial.write("AT\13");
    }
    
    void modem_init3()
    {
    char* AT_command_string = "AT\13";
    Serial.write(AT_command_string);
    }
   

artemik
Offline
Зарегистрирован: 10.03.2012

to  Probelzaelo спасибо, дружище!

art_maestro
Offline
Зарегистрирован: 26.03.2013

У тебя получилось отправить команды модему?

Это получается для чтения данных, которые модем выдает, необходимо использовать Serial.read() ?