Не понятная ошибка в скетче!
- Войдите на сайт для отправки комментариев
Ср, 15/01/2014 - 21:28
Всем добрый вечер! Вообщем решил сделать что то типа 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; }
экранировать двойные кавычки внутри одинарных в общем-то не требуется, но и ошибки компиляции изза этого быть не должно
ещё момент, что Serial.read() возвращает целочисленное значение (int)-1, когда в буфере ничего нет, это значение на влазит в тип char, который у тебя data. но это логическая, а не синтаксическая ошибка. так сразу не вижу от чего ругается компилятор, а тащить код к себе и разбираться лень :)
А ты был прав, не я стал экранировать двойные кавычки и ошибки при компиляции нет!))) Спасибо за подсказку))) Только я всё равно понять не могу почему была ошибка что функция не объявлена???
Только я всё равно понять не могу почему была ошибка что функция не объявлена???
Элементарно, Ватсон! Потомучто компилятор не встретил описание этой функции
(я не специалист по си, но подозреваю, что компилятор эти двойные кавычки понял как начало большой текстовой строки)
А ты был прав, не я стал экранировать двойные кавычки и ошибки при компиляции нет!))) Спасибо за подсказку))) Только я всё равно понять не могу почему была ошибка что функция не объявлена???
А что за компилятор? Мой gcc совершенно точно кушает char a = '\"'; молча
Эээмммм! Компилирую при помощи Arduino IDE)))
В свой исходный скетч из первого поста добавьте две строки, например, перед 10 строкой:
Всё компилируется.
Да, больше ничего менять не нужно.