Не могу два работающих блока соединить в одном скетче.-was not declared in this scope
- Войдите на сайт для отправки комментариев
Помогите пенсионеру решить проблему!!
Делаю сигналку в гараж с ЖСМ модулем М590. Включить ТЭН и звонить мне при открытии дверей. Все работает прекрасно. Дальше добавил управление СМСками в том числе посмотреть баланс, прислать мне температуру, сколько времени осталось до конца работы тэна... Все это успешно стянул из инета подправил под себя, все заработало. но только поочереди ,при этом шапка и void setup() один и тот же. Как только добавляю любой оператор к имеющемуся рабочему любому блоку появляются ошибки компиляции например -'sms' was not declared in this scope. И void loop() объденял рабочие блоки скобками {} различными комбинациями не помогает.
Как такое может быть??? вот фрагмент скоча где два блока не живут ввместе! вернее блок с модулем М590 не уживается с моими любыми "кусками" наработками
001 | #include <SoftwareSerial.h> |
002 | #include <OneWire.h> |
003 | #include <DallasTemperature.h> |
004 | #define ONE_WIRE_BUS 6 // провод термометра 8 и (" 6 " (иправлено в плате)) |
005 | SoftwareSerial mySerial(2, 3); // Rx Tx модуля 590 |
006 |
007 | unsigned int i; // разрешение на звонок через час |
008 | unsigned int m; // время длинною час для повторгного звонка |
009 | unsigned int p; // время работы тена |
010 | unsigned int l; // взведена СМС по окончании шпинделя |
011 | unsigned int z; // =1 дверь открыта =0 закрыта |
012 |
013 | int konc = 5; // концевик дверей |
014 | int ten = 11; // выход вкл. тен |
015 | int rezerv = 12; // выход резерв |
016 | int ledsh = 10; // выход Led шпиндель |
017 | int intsh = 4; // вход шпиндель |
018 |
019 | OneWire oneWire(ONE_WIRE_BUS); // Настройка oneWire для связи с любыми устройствами OneWire |
020 | DallasTemperature sensors(&oneWire); |
021 |
022 |
023 | void setup () |
024 | { |
025 |
026 | delay(2000); |
027 | |
028 | pinMode(ten, OUTPUT); |
029 | pinMode(rezerv, OUTPUT); |
030 | pinMode(ten, OUTPUT); |
031 | pinMode(ledsh, OUTPUT); |
032 | pinMode(konc, INPUT); |
033 | pinMode(intsh, INPUT); |
034 |
035 | sensors.begin(); // Запуск библиотеки термометра |
036 |
037 | |
038 | Serial .begin(9600); |
039 | mySerial.begin(9600); |
040 |
041 | Serial .println( "Dallas Temperature IC демо" ); |
042 |
043 | Serial .println( "GSM NEOWAY Включаем модуль" ); |
044 | Serial .println(); |
045 | Serial .println( "Включаем AOH:" ); |
046 | delay(1000); |
047 | mySerial.println( "AT+CLIP=1" ); //включить АОН |
048 | delay(1000); |
049 | Serial .println( "Регистрация в сети" ); |
050 | Serial .println(); |
051 | delay(1000); |
052 | mySerial.println( "AT+CREG?" ); //регистрация в сети |
053 | delay(1000); |
054 | mySerial.println( "AT+CSQ" ); //уровень сигнала |
055 | delay(1000); |
056 | mySerial.println( "AT+CSCS=\"GSM\"" ); |
057 | delay(1000); |
058 | Serial .println( "уровень сигнала" ); |
059 | Serial .println(); |
060 | mySerial.println( "AT+CMGF=1" ); // выставляем текстовым режим сообщений |
061 | delay(1000); |
062 |
063 | // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК |
064 |
065 |
066 |
067 | i = 1; // разрешена тревога когда м сосчитала час (звонить не чаще раз в час когда открыты двери) |
068 | p = 100; // Р- время работы печки после звонка |
069 | m == 10; // время между звонками тревоги |
070 | l = 0; // взведена СМС по окончанию шпинделя |
071 |
072 |
073 | if (mySerial.available()) //если модуль что-то послал |
074 | { |
075 | char ch = ' ' ; |
076 | String val = "" ; |
077 |
078 | while (mySerial.available()) |
079 | { |
080 | ch = mySerial.read(); |
081 | val += char (ch); //собираем принятые символы в строку |
082 | delay(3); |
083 | } |
084 |
085 | Serial .print( "Neo send> " ); |
086 | Serial .println(val); |
087 |
088 | } |
089 |
090 |
091 | } |
092 | void loop () |
093 | { |
094 |
095 |
096 |
097 |
098 |
099 | ///////////////////////////////////////////////////////////////////////////////////// |
100 | /////////////////////Модуль М590 выполняем действия по приходу СМС //////////////////////////////// |
101 | ///////////////////////////////////////////////////////////////////////////////////// |
102 |
103 |
104 |
105 |
106 | { |
107 | if (mySerial.available()) //если модуль что-то послал |
108 | { |
109 | char ch = ' ' ; |
110 | String val = "" ; |
111 | |
112 | while (mySerial.available()) |
113 | { |
114 | ch = mySerial.read(); |
115 | val += char (ch); //собираем принятые символы в строку |
116 | delay(3); |
117 | } |
118 |
119 | Serial .print( "Neo send> " ); |
120 | Serial .println(val); |
121 | |
122 | if (val.indexOf( "+CMT" ) > -1) //если есть входящее sms |
123 | { |
124 | |
125 | { |
126 | if (val.indexOf( "Inf" ) > -1) // смотрим, что за команда |
127 | { |
128 | delay(100); |
129 | Serial .println( "inf пришла" ); |
130 | |
131 | |
132 | while (1) |
133 | { // проверяем готовность модема |
134 | mySerial.println( "AT+CPAS" ); |
135 | if (mySerial.find( "0" )) break ; |
136 | delay(100); |
137 | Serial .println( "модем готов" ); |
138 | } |
139 | |
140 | |
141 | mySerial.println( "AT+CMGS=\"+79221053***\"" ); // даем команду на отправку смс |
142 | delay(100); |
143 | mySerial.print( "t1= " ); // отправляем текст |
144 | mySerial.print(sensors.getTempCByIndex(0)); // и переменную со значением |
145 | mySerial.print( ", t2= " ); // отправляем текст |
146 | mySerial.print(sensors.getTempCByIndex(1)); // и переменную со значением |
147 | mySerial.print( ", Shpindel= " ); // отправляем текст |
148 | mySerial.print(l); // и переменную со значением |
149 | mySerial.print( ", Doors= " ); // отправляем текст |
150 | // mySerial.print(z); // и переменную со значением |
151 | mySerial.print( ", Obogrev= " ); // отправляем текст |
152 | mySerial.print(p); // и переменную со значением ТУТ ЛАЖА |
153 | mySerial.print( ", Motik skuchaet!!! " ); // отправляем текст |
154 | mySerial.print(( char )26); // символ завершающий передачу |
155 | delay(200); |
156 | Serial .println( "отправлено" ); |
157 | } |
158 | |
159 | while (mySerial.available() > 0) // останавливаем программу и смотрим что ответили |
160 | { |
161 | Serial .write(mySerial.read()); |
162 | } |
163 | } |
164 |
165 | { |
166 | if (val.indexOf( "Shp" ) > -1) |
167 | { |
168 | digitalWrite(ledsh, HIGH); |
169 | l = 1; // взведена СМС по окончанию шпинделя |
170 | |
171 | } |
172 | } |
173 |
174 |
175 | { |
176 | if (val.indexOf( "Bal" ) > -1) // смотрим, что за команда |
177 | { |
178 | delay(3000); |
179 | mySerial.println( "ATD#100#;" ); |
180 | } |
181 | } |
182 |
183 | } |
184 |
185 | if (val.indexOf( "+CUSD" ) > -1) //если есть входящее sms |
186 | { |
187 | if (val.indexOf( "Balance" ) > -1) // смотрим, что за команда |
188 | { |
189 | |
190 | delay(3000); |
191 | |
192 | val = val.substring(val.indexOf( "Balance" ),val.indexOf( "r" )); |
193 | sms(String(val), String( "+79221053***" )); // ВПИШИТЕ ВАШ НОМЕР |
194 | } |
195 | } |
196 | } |
197 |
198 | } |
199 |
200 | void sms(String text, String phone) //отправка СМС с балансом модема |
201 | { |
202 | Serial .println( "Start SMS send" ); |
203 | mySerial.println( "AT+CMGS=\"" + phone + "\"" ); |
204 | delay(500); |
205 | mySerial.print(text); |
206 | delay(500); |
207 | mySerial.print(( char )26); |
208 | delay(500); |
209 | Serial .println( "SMS send OK" ); |
210 | delay(2000); |
211 | mySerial.println( "AT+CMGD=1,4" ); // удалить все СМСки |
212 | } |
213 |
214 |
215 | ///////////////////////////////////////////////////////////////////////////////////// |
216 | /////////////////////конец блока с модулем М590//////////////////////////////// |
217 | ///////////////////////////////////////////////////////////////////////////////////// |
218 |
219 |
220 |
221 |
222 |
223 | ///////////////////////////////////////////////////////////////////////////////////// |
224 | /////////////////////ЗВОНОК ПО концевику !!начало блока //////////////////////////////// |
225 | ///////////////////////////////////////////////////////////////////////////////////// |
226 | { |
227 |
228 | { |
229 | |
230 | if (digitalRead(konc) == HIGH) |
231 | { |
232 | //Serial.println("нажата кнопка"); |
233 | // Serial.println(); |
234 | if (i == 1) |
235 | { |
236 | mySerial.println( "ATD+79221053174;" ); |
237 | delay(18000); |
238 | mySerial.println( "ATH" ); |
239 | i=0; |
240 | m=0; |
241 | } |
242 | } |
243 | |
244 | } |
245 | |
246 | |
247 | |
248 | |
249 | { |
250 | if (m == 300) // 300= 30сек, 36000 = 1 час |
251 | { |
252 | i=1; |
253 | } |
254 | |
255 | else |
256 | |
257 | { |
258 | m++; |
259 | delay(95); // только во время счета часа, для повторного звонка |
260 | } |
261 | |
262 | } |
263 | |
264 | |
265 | } |
266 | |
267 | //////////////////////////////////////////////////////////////////////////////////////// |
268 | //////////////////////////////////конец блока звонок по концевику/////////////////////////// |
269 | ////////////////////////////////////////////////////////////////////////////////////////////// |
270 |
271 | } |
1. Что у Вас написано в строке №69? Вы уверены, что Вы хотели написать именно это?
2. Возьмите строки №№ 200-212 и перенесите их выше. например, вставьте их между строками №№ 91 и 92
1. Что у Вас написано в строке №69? Вы уверены, что Вы хотели написать именно это?
2. Возьмите строки №№ 200-212 и перенесите их выше. например, вставьте их между строками №№ 91 и 92
Евгений в №69 это я для себя писал. Так пометил переменную которая увеличивается до заданной величины и разрешает модему звонить при вскрытой двери гаража. Модем звонит ср.№237 18 сек. это три гудка у меня получается, потом сброс. Пока открыта дверь раз в час будет дозвон. Это что бы не делать постановку на охрану. Но это не имеет значения к вопросу.
2. если переместить то попадет в -
void
setup
(), и будет один раз делаться и не к месту.
Почему если оставить только первый блок и написать любой оператор ниже - то не компилируется??
мозг треснул.
Евгений в №69 это я для себя писал.
Я не знаяю, что Вы там писали. В этой строке написан чистый, рафинированный бред. Вот я и спросил, это то, что Вы хотели написать. Если то - нет проблем, каждый имеет правдо на бред.
2. если переместить то попадет в -
void
setup
(), и будет один раз делаться и не к месту.
Между 91 и 92 ? Она попадёт между setup и loop
Вы просили сказать Вам как сделать, чтобы компилировалось? Так делайте, что Вам сказали, зачем умничать-то?
1. Что у Вас написано в строке №69? Вы уверены, что Вы хотели написать именно это?
2. Возьмите строки №№ 200-212 и перенесите их выше. например, вставьте их между строками №№ 91 и 92
Это-то правильно, только там и дальше бред. После функции sms там идёт блок "вне всяких функций".
Ну, для начала надо это исправить, дальше будем смотреть. ТС похоже, принципиальнор исправлять не хочет.
А так, да, если программы объединять механически, не понимая, что там написано, то оно всегда так.
Действительно, я показал Вам только первую ошибку, которая бросилась в глаза (Вы и её отказались исправлять), а дальше там, как правильно заметил коллега, ....
Помогите пенсионеру решить проблему!!
Вы не решите эту проблему с теми знаниями, что у Вас есть. Никак не решите и помочь Вам невозможно.
Объединение нескольких программ в одну - это вообще нетривиальная задача (и для тех, у кого есть знания), а уж когда Вы просто не понимаете что там написано ... Вот почитайте, что сказал грамотный и уважаемый здесь человек о таких задачах. И не думайте, что там далёкая метафора. Вы реально пытаетесь сделать именно то, что там написано, только не понимаете этого. Смешно? Бред? Ну, так от ж!
Если Вам действительно нужна помощь, начните с изучения матчасти. Хотя бы самых азов по самым простым "книжкам для чайников". В разделе песочница есть библиография.
Действительно, я показал Вам только первую ошибку, которая бросилась в глаза (Вы и её отказались исправлять), а дальше там, как правильно заметил коллега, ....
Евгений!!! небыло вчеря время! Работа. Сейчас перенес этот блок до void loop() . И действительно скомпилировалось и все заработало!!! Ура.
Про уровень знаний, я прекрасно понимаю,у истоков нахожусь. Но если не чего не делать, то и неузнаешь нигода не чего. Мне вот уже седьмой десяток, но всю жизнь пытаюсь чему то учиться. С железом работаю, мед технику ремонтирую. А тут эти ардуины ворвались в массы. Просто революция какая то!! Раньше в АВР студии писал простенькое для себя. Надо было четко понимать, что пишешь, постоянно ПДФки читал про контроллеры. А эти ардуины со своими библиотеками готовыми -ни хрена не понимающие школьники могут что то сваять. Короче не все сразу строилось!!!
Спасибо!
qwone, +100500!
А andriano (по моей ссылке из прошлого поста) красиво сказал! Аж зависть берёт :)))
...Раньше в АВР студии писал простенькое для себя. Надо было четко понимать, что пишешь, постоянно ПДФки читал про контроллеры. А эти ардуины со своими библиотеками готовыми -ни хрена не понимающие школьники могут что то сваять.
В Ардуино, при помощи стандартной комбинации 2-3 библиотек (из десятков имеющихся) можно получить сколько-то тысяч стандартных решений. Кому-то этого достаточно. Кто-то, начав со стандартных комбинаций, идет дальше.
Ардуино - это как магазин готовой одежды: нашел подходящее - хорошо. А нет, - приходится либо самому осваивать кройку и шитье, либо обращаться в ателье.
qwone, +100500!
А andriano (по моей ссылке из прошлого поста) красиво сказал! Аж зависть берёт :)))
Красиво!! только я хотел, что бы запорожец и камаз стояли в одном гараже. И я мог по очереди ездить на них!!
То что у меня случилось - это компилятор недоработал что то?? Был момент, не зная что делать я коментарил ошибки. Каждый раз новую. Пока все строки не закоментарил вставленый новый блок не работал!!!
это из за настройки модема AT+CMGS все было???
...только я хотел, что бы запорожец и камаз стояли в одном гараже. И я мог по очереди ездить на них!!
1. Поочередно прошиваете в Ардуину то один скетч, то другой.
2. Берете две Ардуины и в каждую из них прошиваете свой скетч.
Как видите, Ваша задача (как Вы ее сформулировали) вполне решается и без вмешательства в имеющиеся скетчи.