Не понятная ошибка в скетче!

alexxx86
Offline
Зарегистрирован: 15.01.2014

Всем добрый вечер! Вообщем решил сделать что то типа GPSтрекера, и столкнулся с не понятной ошибкой в Arduino IDE. Скетч с стадии разработки поэтому выглядит неряшливо)))) При компиляции выскакивает ошибка "error: 'send_Message' was not declared in this scope" Но если в строке 61 и в 64 вместо '\"' вставить допустим '1', то компиляция проходит без ошибок. В чём проблема?


String currStr = "";
String nomber_Phone = "\"+7XXXXXXXXXX\"";
String dat2;
String dat;
char data;
int i = 0;
int j = 40;
boolean gps = true;

void setup() 
{
  Serial1.begin(9600);
  Serial2.begin(9600);
}

void loop()
{
  if (Serial1.available() > 0)
  {
    read_GSM();
  }
  read_GPS();
}

void read_GSM()
{
  currStr = "";
  while(Serial1.available()>0)
  {
    data = Serial1.read();
    if ('\r' == data)
    {
      if(!currStr.compareTo("RING"))
      {
        ring_GSM();
        return;      
      }
      if(!currStr.compareTo("+CMTI: \"SM\",1"))
      {
        delay(10);
        return;      
      }
      currStr = "";
    }
    else if (data != '\n')
    {
      currStr += data;
    }
  }
}


void ring_GSM()
{
  boolean ring = true;
  currStr = "";
  delay(10);
  while(ring)
  {
    data = Serial1.read();
    if (data == '\"')
    {
      data = Serial1.read();
      while (data != '\"')
      {
        currStr += data;
        data = Serial1.read();
      }
      if (currStr == nomber_Phone)
      {
        delay(2000);
        Serial1.println("ATHO");
        send_Message();
        return;
      }
      else
      {
        Serial1.println("ATHO");
        return;
      }
    }
  }
}

void send_Message()
{
  delay(500);
  Serial1.print("AT + CMGS = ");
  Serial1.println(nomber_Phone);
  delay(500);
  Serial1.println(dat2);
  delay(500);
  Serial1.print((char)26);
}

void read_GPS()
{
  dat = "";
  while (gps)
  {
    if (Serial2.available()>0)
    {
      data = Serial2.read();
      if (data == 'L')
      {
        while (data != '\r')
        {
          dat += data;
          delay(2);
          data = Serial2.read();
        }
        gps = false;
        if (dat.indexOf('A') == j)
        {
          delay(5);
          dat2 = "N ";
          for(int i=3; i<5; i++)
          {
            dat2 += dat.charAt(i);
          }
          dat2 += ' ';
          for(int i=5; i<13; i++)
          {
            dat2 += dat.charAt(i);
          }
          dat2 += "\nE ";
          for(int i=17; i<19; i++)
          {
            dat2 += dat.charAt(i);
          }
          dat2 += ' ';
          for(int i=19; i<27; i++)
          {
            dat2 += dat.charAt(i);
          }
          delay(5);
          dat2 += "\nTime ";
          for(int i=30; i<32; i++)
          {
            dat2 += dat.charAt(i);
          }
          dat2 += ':';
          for(int i=32; i<34; i++)
          {
            dat2 += dat.charAt(i);
          }
          dat2 += ':';
          for(int i=34; i<36; i++)
          {
            dat2 += dat.charAt(i);
          }
        }        
      }
    }
  }
  gps = true;
}

 

ites
Offline
Зарегистрирован: 26.12.2013

экранировать двойные кавычки внутри одинарных в общем-то не требуется, но и ошибки компиляции изза этого быть не должно

ites
Offline
Зарегистрирован: 26.12.2013

ещё момент, что Serial.read() возвращает целочисленное значение (int)-1, когда в буфере ничего нет, это значение на влазит в тип char, который у тебя data. но это логическая, а не синтаксическая ошибка. так сразу не вижу от чего ругается компилятор, а тащить код к себе и разбираться лень :)

alexxx86
Offline
Зарегистрирован: 15.01.2014

А ты был прав, не я стал экранировать двойные кавычки и ошибки при компиляции нет!))) Спасибо за подсказку))) Только я всё равно понять не могу почему была ошибка что функция не объявлена???

vdk
Offline
Зарегистрирован: 14.04.2013

alexxx86 пишет:

Только я всё равно понять не могу почему была ошибка что функция не объявлена???

Элементарно, Ватсон! Потомучто компилятор не встретил описание этой функции

(я не специалист по си, но подозреваю, что компилятор эти двойные кавычки понял как начало большой текстовой строки)

ites
Offline
Зарегистрирован: 26.12.2013

alexxx86 пишет:

А ты был прав, не я стал экранировать двойные кавычки и ошибки при компиляции нет!))) Спасибо за подсказку))) Только я всё равно понять не могу почему была ошибка что функция не объявлена???

А что за компилятор? Мой gcc совершенно точно кушает char  a = '\"'; молча

alexxx86
Offline
Зарегистрирован: 15.01.2014

Эээмммм! Компилирую при помощи Arduino IDE)))

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В свой исходный скетч из первого поста добавьте две строки, например, перед 10 строкой:

void read_GPS();
void send_Message();

Всё компилируется.

Да, больше ничего менять не нужно.