Всем привет, пишу вот такое код для дальномера: При первой прошивке всё ОК, при второй и далее выдаёт ошибку: _______________________________________________________________________________ Arduino: 1.6.12 (Windows 7), Плата:"Arduino/Genuino Uno" C:\Users\Преподаватель\Documents\Arduino\Robot_0.4\Robot_0.4.ino: In function 'void loop()': Robot_0.4:23: error: 'Zamer' was not declared in this scope exit status 1 'Zamer' was not declared in this scope Как Такое лечить??? ____________________________________________________________________________ #include <Servo.h> //используем библиотеку для работы с сервоприводом Servo servoEho; //объявляем переменную servo типа Servo #define echo 2 #define trig 3 float duration, cm; float Ugol[19]; float Rastoyanie[18]; void setup() { servoEho.attach(10); //привязываем привод к порту 10 pinMode(echo, INPUT); pinMode(trig, OUTPUT); Serial.begin (9600); } void loop() { // put your main code here, to run repeatedly: // Zamer(); for (int i = 0; i <= 18; i++) { servoEho.write(10 * i); //ставим вал под 0 delay(300); Ugol = 10 * i; Rastoyanie = Zamer(); Serial.print(Ugol); Serial.print(" = "); Serial.println(i); //delay(700); //ждем 2 секунды //замер } } long Zamer(){ digitalWrite(trig, LOW); delayMicroseconds(5); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); cm = (duration / 2)/29.1; return cm; }
В последних версиях arduino IDE, функция в скетче должна быть написана до того как Вы её используете, а не в конце скетча. Попробуйте переместить это Код (C++): long Zamer(){ digitalWrite(trig, LOW); delayMicroseconds(5); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); duration = pulseIn(echo, HIGH); cm = (duration / 2)/29.1; return cm; } После этого Код (C++): void setup() { servoEho.attach(10); //привязываем привод к порту 10 pinMode(echo, INPUT); pinMode(trig, OUTPUT); Serial.begin (9600); }
Объявляем Функцию в которой не надо ничего возвращать напрмер void Zamer(){ ........... ........... }
Проблема кроется в "кракозябрах" между 'Users\' и '\Documents': Устраните их -- т.е. сохраните скетч в папке, в пути к которой не будет кириллицы (так же в именах желательно избегать пробелов) -- и всё наладится...
Здесь не форум программистов. И то что для Вас стандартная практика, для других не очевидная вещь. Люди обращаются за советом.... Следуя Вашей логики на 8 из 10 вопросов на этом форуме можно отвечать - "чтайте учебник по С", " java", "python"...
Ответ уже был дан в теме, а я его расширил. Направлять людей на книги не то что можно, а нужно. Кто же виноват в том, что 8 из 10 людей пытаются программировать, не зная теории? Короткий ответ на форуме может помочь залатать конкретный код, но не даст человеку реального знания, потому что не к чему эту информацию прикрепить. Кусок кожи без скелета.
Человек такое существо разнообразное, например посади его за руль авто и покажи как им управлять и уже через минут 15 он на нем поедет, хотя и знать ничего об авто не будет. Так мы человеки устроены, может подражать и копировать очень быстро не вникая в суть. Чем ардуина и привлекает столько народу , можно вообще ничего не знать о программировании , просто копировать части кода и будет как то работать, не вникая в суть. Это замануха, для того чтобы потом начать вникать, изучать и т.п. и т.д.
Кому то будет достаточно кусочка кода, что бы сделать какую нибудь безделицу и радоваться жизни, а кто захочет, тот конечно пойдет дальше, купит книгу и будет изучать, если ему это нужно.....
Да согласен полностью, вот к примеру вчерась пришел ко мне товарищ и пожаловался он на то что у него сгорело автомобильное зарядное КЕДР 10А. Там на мк ATTiny13 собрана вся схема управления зарядом. Ну и поковырялись, за пару часов запустили это дело на ардуине UNO, не особо вникая в суть всего этого. Первая прошивка для пробы заняла 5 строк кода, дольше разбирались куда и чего подключать. И я вовсе не программист и не был им с роду. И самое интересное что за основу был взят пример диммера на ардуине, из просторов инета .
.h файл тут не при чем. Достаточно поместить объявление функции или другого идентификатора до того как она будет использована в тексте программы. .h файл нужен когда функция используется в разных единицах компиляции, чтобы не дублировать спецификацию вручную.
Предварительное объявление функции будет выглядеть так Код (C++): long multiply(int , int ); т.е. вы сообщаете компилятору имя функции, тип возвращаемого значения + количество и тип параметров