Ошибки в скетчи.
- Войдите на сайт для отправки комментариев
Сб, 14/05/2016 - 20:06
Здравствуйте, у меня вот такой скетч:
long duration,cm;
void setup()
{
pinMode (10,OUTPUT);//на реле
pinMode (11, OUTPUT);// триг
pinMode (12, INPUT); //эхо
Serial.begin (9600);
}
void loop() {
duration = pulseIn (12,HIGH);
cm = duration/29/2;
if (cm<20){ digitalWrite(10, HIGH); } //если менее 10см - выключаем
else if (cm<=150) // Если расстояние менее 150 сантиметров
{
digitalWrite(10, LOW); // Включаем светодиод
delay(500000); //задержка на выключение
}
else
{
digitalWrite(10, HIGH); // иначе выключаем
}
}
else
{
digitalWrite(10, HIGH); // включаем LOW
}
Serial.print(cm);
Serial.print("CM");
Serial.println ();
delay(100); // делает замер каждые -- сек
}
При компиляции скетча вылетет такая ошибка:
Arduino: 1.6.0 (Windows 8), Плата"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
HC-SR04.ino:44:1: error: stray '\' in program
HC-SR04.ino:34:1: error: expected unqualified-id before 'else'
HC-SR04.ino:38:1: error: 'Serial' does not name a type
HC-SR04.ino:39:1: error: 'Serial' does not name a type
HC-SR04.ino:40:1: error: 'Serial' does not name a type
HC-SR04.ino:42:6: error: expected constructor, destructor, or type conversion before '(' token
HC-SR04.ino:44:1: error: expected declaration before '}' token
Ошибка компиляции.
This report would have more information with
"Отображать вывод во время компиляции"
enabled in File > Preferences.
Подскажите пожалуйста что здесь не так. В програмировании я новичёк:)
Не судите строго.
Версия ардуины 1.6.0
Ну, как минимум, количество открывающих фигурных скобок (6 шт.) не соответсвует количеству закрывающих (7 шт., лишняя в строке 32). И два раза подряд else (строки 28, 34), перед каждым else должен быть свой if.
все ошибки он вам и написал, даже со ссылками на строки, только чаще всего ошибки не в них, просто затык происходит у компилятора именно на этом месте.
long duration,cm; void setup() { pinMode (10,OUTPUT);//на реле pinMode (11, OUTPUT);// триг pinMode (12, INPUT); //эхо Serial.begin (9600); } void loop() { duration = pulseIn (12,HIGH); cm = duration/29/2; if (cm<20){ digitalWrite(10, HIGH); } //если менее 10см - выключаем if (cm<=150) // Если расстояние менее 150 сантиметров { digitalWrite(10, LOW); // Включаем светодиод delay(500000); //задержка на выключение } else { digitalWrite(10, HIGH); // иначе выключаем } Serial.print(cm); Serial.print("CM"); Serial.println (); delay(100); // делает замер каждые -- сек }операторы иф, елсе сами надеюсь поправите, не хочу ковыряться с вашими проверками. используйте их правильно и будет работать. а вообще заведите себе шаманский бубен програмиста, он помогает :-) с его помощью входите в транс и проникайте внутрь программы. и все...
http://arduino.ru/Reference/Else приведенные пример 2 гумно - новичку быстрее запутаться, чем разобраться
операторы после иф и елсе возмите за правило писать в { } я обычно делаю отступы
if (pinFiveInput < 500) { // выполнять действие A } else { // выполнять действие B // выполнять действие C // выполнять действие D }Странно, скетч показан что вкружен, но ардуино и датчик не хотят работать.
У меня вот ещё один вопрос. на этом видио https://www.youtube.com/watch?v=GVXQKYpCsNw объясняется как устронить основную проблему этого датчик HC-SR04. Но я не могу понять куда он этот доп. код нужно вставить( Пожалуйста, могли бы вы мне помочь. Вот этот код, который на видео:
duration = pulseIn(echoPin, HIGH);
if (duration == 0) {
Serial.println("Reload ultrasonic, fix bug SR04");
ВОТ СКЕТЧ:
const int Trig = 8;
операторы после иф и елсе возмите за правило писать в { } я обычно делаю отступы
if (pinFiveInput < 500) { // выполнять действие A } else { // выполнять действие B // выполнять действие C // выполнять действие D }Я конечно извеняюсь, но Вы используете плохой стиль оформления кода. Советовать его новичкам - категорически не стоит.
"Открывающую скобку часто оставляют на одной строке с заголовком (оператора, подпрограммы, структуры и т. п.), при этом она может оказаться сколь угодно далеко справа, но закрывающая скобка при этом обязана находиться в той же колонке, где начался заголовок."
понятнее намного будет писать так
if() { }а если вложенный, то
if() { if() { } }так понятно, что и где закрывается, и помогает от того, что все компилится, а работает не так
Прссститте! А можно уточнить? Очень важный для меня момент - по 10 минут по утрам трачу: вот с какого конца яйцо-в-смятку нужно разбивать? Вроде с тупого положено? Я где-то читал, что учить новичков разбивать с острого конца - это путь в АДДДД! Это так?
Скажите, почему этот скетч не фурычит???
форматирование кода не по феншую
ребята помогите пожалуйста. вот код
при попытке компиляции выходят такие ошибки
kod:7: error: found ':' in nested-name-specifier, expected '::'
kod:7: error: 'http' does not name a type
H:\проекты_arduino\робот тележка\инет робот\2 вариант\kod\kod.ino: In function 'void loop()':
kod:31: error: 'LedStep' was not declared in this scope
kod:36: error: 'LedStep' was not declared in this scope
kod:41: error: 'LedStep' was not declared in this scope
exit status 1
found ':' in nested-name-specifier, expected '::'
что это за ошибки? код рабочий так как делал по статье
Убери ссылку из 7 строки. Если копипастишь откуда-то код - будь внимательнее.
форматирование кода не по феншую
Всмысле?? Можно по подробнее.
Дядя шутить изволит ,убери ссылку и объяви переменную
вот твоя 7 и 8 строка
Здравствуйте, у меня вот такой скетч:
long duration,cm; void setup() { pinMode (10,OUTPUT);//на реле pinMode (11, OUTPUT);// триг pinMode (12, INPUT); //эхо Serial.begin (9600); } void loop() { duration = pulseIn (12,HIGH); cm = duration/29/2; if (cm<20){ digitalWrite(10, HIGH); } //если менее 10см - выключаем else if (cm<=150) // Если расстояние менее 150 сантиметров { digitalWrite(10, LOW); // Включаем светодиод delay(500000); //задержка на выключение } else { digitalWrite(10, HIGH); // иначе выключаем } } else { digitalWrite(10, HIGH); // включаем LOW } Serial.print(cm); Serial.print("CM"); Serial.println (); delay(100); // делает замер каждые -- сек }При компиляции скетча вылетет такая ошибка:
Это всё я исправил, скетч в ардуину вгрузился, но сама она и датчик не работают.
Тоесть на выходах ничего нету.
выложи исправленный
После void loop() {
у вас не хватает этих трёх строчек:
digitalWrite(11, LOW);
delayMicroseconds(2);
digitalWrite(11, HIGH);
выложи исправленный
Вот:
Люди добрые, сорри, если злой офф-топ, но... всё ж это краем-то со скетчем связано :)
Старые файлы проектов *.ino открываются пустыми (сейчас ide v. 1.6.5). Хотя я с тех пор их не менял. Да и если на размер их посмотреть - они разного размера. И от пустого файла проекта отличаются. Как из них код вытащить? Качать и ставить старые версии IDE? А может какой редактор хитрый есть (а то нотпад тоже пустоту показывает :(( )
Спасибо!
Люди добрые, сорри, если злой офф-топ, но... всё ж это краем-то со скетчем связано :)
Старые файлы проектов *.ino открываются пустыми (сейчас ide v. 1.6.5). Хотя я с тех пор их не менял. Да и если на размер их посмотреть - они разного размера. И от пустого файла проекта отличаются. Как из них код вытащить? Качать и ставить старые версии IDE? А может какой редактор хитрый есть (а то нотпад тоже пустоту показывает :(( )
Спасибо!
ну, да - что ты намутил с правами доступа, только тебе самому известно... или антивирус с дурной головы установил.
Та не, на права бы он ругался. И на другой машине тоже были бы "вопросы" от системы. А ИДЕ просто открывает файл. Но открывает - пустым. А размер в килобайтах есть. То есть там есть что-то. Но как его открыть?.... Вот я и подумал, может кто с такой же проблеммой сталкивался уже и решение нашел.
UPD: в просмотрщике Командера, в двоичном и шестнадцатиричном режимах показывает, что файлы забиты нолями :((( Печаль. Как так вышло........ Нолями, и файлы разных размером.... Мистика.
Та не, на права бы он ругался. И на другой машине тоже были бы "вопросы" от системы. А ИДЕ просто открывает файл. Но открывает - пустым. А размер в килобайтах есть. То есть там есть что-то. Но как его открыть?.... Вот я и подумал, может кто с такой же проблеммой сталкивался уже и решение нашел.
ну, что за бред?
ясно же что что-то не даёт софту доступ к содержимому файла - тебе кажется, что файл пустой, т.к. запускается текстовый редактор, который ничего не читает.
*скопируй на флешку и открой на другом компе.
Ну пусть я нуб, ладно.
Вот, попробуй: http:// rusfolder.c om/45018519
Может у тебя не нолями забитый файл откроется :(
Ну пусть я нуб, ладно.
Вот, попробуй: http:// rusfolder.c om/45018519
Может у тебя не нолями забитый файл откроется :(
да нули - не знаю, как можно такое сотворить.
Вооот..... вынипарериишь! просто сохранил в своё время проекты и оставил так до лучших времен. ХЗ, что это. Тот, что прислал - в мае прошлого года делался. Чудеса в IDE. :))
Чудеса в IDE. :))
при чём здесь ИДЕ?
выложи исправленный
Вот:
ребята не пойму прикола. вот код
#include <CyberLib.h> #include <Servo.h> Servo myservo1; Servo myservo2; #define step_servo 10 //минимальный угол поворота ссервы за один клик uint8_t min_pos=10, max_pos=170; //минимальное и максимаьное положение сервы int i=130, i2=90; //начальное положение сервы boolean light_stat; //состояние фар uint8_t inByte, packid; uint8_t speed=255; //максимальная скорость моторов по умолчанию #define init {D4_Out; D5_Out; D6_Out; D7_Out; D9_Out; D10_Out; D11_Out;} //используемые порты void setup() { myservo1.attach(12); // Подключение сервоприводов к порту myservo2.attach(13); // Подключение сервоприводов к порту myservo2.write(i2); // начальное положение сервы(горизот) при включении myservo1.write(i); // начальное положение сервы(вертикаль) при включении init; // Инициализация портов D11_Low; // Динамик OFF randomSeed(A5_Read); //Получить случайное значение horn(); //звуковое оповещение готовности робота UART_Init(57600); // Инициализация порта для связи с роутером //wdt_enable (WDTO_500MS); } void loop() { if (UART_ReadByte(inByte)) { if ( packid == 16 ) // контрольная сумма команды cm= { packid=0; switch (inByte) // Смотрим какая команда пришла { case 'x': // Остановка робота robot_stop(); break; case 'W': // Движение вперед robot_go(); break; case 'D': // Поворот вправо robot_rotation_left(); break; case 'A': // Поворот влево robot_rotation_right(); break; case 'S': // Движение назад robot_back(); break; case 'U': // Серва поднимается if(i > min_pos) myservo1.write(i -= step_servo); break; case 'J': // Серва опускается if(i < max_pos) myservo1.write(i += step_servo); break; case 'K': // Серва поворачивается вправо if(i2 > min_pos) myservo2.write(i2 -= step_servo); break; case 'H': // Серва поворачивается влево if(i2 < max_pos) myservo2.write(i2 += step_servo); break; case 'B': // Бластер D10_High; break; case 'C': // Клаксон horn(); break; case ']': // запрос состояния аналоговых датчиков byte2char(A6_Read,A7_Read); break; case 'V': // Включить/Выключить фары if(light_stat) { D9_Low; light_stat=false; } else { D9_High; light_stat=true; } break; } if(inByte>47 && inByte<58) speed=(inByte-47)*17+85; //скорость вращения колес } else packet_id(inByte); } // wdt_reset(); } //**************************************************** void horn() { for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение } void robot_go() { D4_Low; analogWrite(5, speed); analogWrite(6, speed); D7_Low; } void robot_back() { D4_High; analogWrite(5, 255-speed); analogWrite(6, 255-speed); D7_High; } void robot_stop() { D4_Low; analogWrite(5, 0); analogWrite(6, 0); D7_Low; D10_Low; } void robot_rotation_left() { D4_Low; analogWrite(5, speed); analogWrite(6, 255-speed); D7_High; } void robot_rotation_right() { D4_High; analogWrite(5, 255-speed); analogWrite(6, speed); D7_Low; } void packet_id(uint8_t inbyte) //проверяем идентификатор пакета "cm=" { switch (inbyte) { case 'c': packid=2; break; case 'm': packid*=2; //packid=packid<<1; break; case '=': packid*=4; //packid=packid<<2; break; default: packid=0; } } void byte2char(uint16_t inbyte0, uint16_t inbyte1) { char bytetochar[5]; uint8_t buf_answer[]="{\"dat1\":\"0000\",\"dat2\":\"0000\"}"; itoa(inbyte0+10000, bytetochar, 10); buf_answer[9]= bytetochar[1]; buf_answer[10]= bytetochar[2]; buf_answer[11]= bytetochar[3]; buf_answer[12]= bytetochar[4]; itoa(inbyte1+10000, bytetochar, 10); buf_answer[23]= bytetochar[1]; buf_answer[24]= bytetochar[2]; buf_answer[25]= bytetochar[3]; buf_answer[26]= bytetochar[4]; UART_SendArray(buf_answer, sizeof(buf_answer)-1);нажимаю 1 раз компилить выходят вот эти ошибки-
C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:199:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
eeprom_write_byte((uint8_t*)addr+2, (data & 0xFF0000) >> 16);
^
C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:200:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
eeprom_write_byte((uint8_t*)addr+3, (data & 0xFF000000) >> 24);
^
C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp: In function 'uint8_t ReadEEPROM_Byte(uint8_t)':
C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:209:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
return eeprom_read_byte((uint8_t*)addr);
^
C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp: In function 'uint32_t ReadEEPROM_Long(uint8_t)':
C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:220:55: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
uint32_t ir_code = eeprom_read_byte((uint8_t*)addr+3);
^
C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:221:63: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
ir_code = (ir_code << 8) | eeprom_read_byte((uint8_t*)addr+2);
^
C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:222:63: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
ir_code = (ir_code << 8) | eeprom_read_byte((uint8_t*)addr+1);
^
C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:223:63: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
ir_code = (ir_code << 8) | eeprom_read_byte((uint8_t*)addr);
потом нажимаю компилить ЕЩЕ РАЗ и они уже пропадают и норм компилится!
что за чудеса???
после этой строчки он у тебя не будет делать вообще ничего, попробуй с миллис. примеры на форуме есть
с чем попробовать?
и что значит если при компиляции пишет exit status 1 expected unqualified-id before 'if'???
с чем попробовать?
millis()
http://arduino.ru/tutorials/BlinkWithoutDelay
http://robocraft.ru/blog/arduino/385.html
и что значит если при компиляции пишет exit status 1 expected unqualified-id before 'if'???
Приведите скетч и полностью ошибку с номером строки.
вот полный скетч
#include <CyberLib.h> #include <Servo.h> Servo myservo1; Servo myservo2; #define step_servo 10 //минимальный угол поворота ссервы за один клик uint8_t min_pos=10, max_pos=170; //минимальное и максимаьное положение сервы int i=130, i2=90; //начальное положение сервы boolean light_stat; //состояние фар uint8_t inByte, packid; uint8_t speed=255; //максимальная скорость моторов по умолчанию #define init {D4_Out; D5_Out; D6_Out; D7_Out; D9_Out; D10_Out; D11_Out;} //используемые порты void setup() { myservo1.attach(12); // Подключение сервоприводов к порту myservo2.attach(13); // Подключение сервоприводов к порту myservo2.write(i2); // начальное положение сервы(горизот) при включении myservo1.write(i); // начальное положение сервы(вертикаль) при включении init; // Инициализация портов D11_Low; // Динамик OFF randomSeed(A5_Read); //Получить случайное значение horn(); //звуковое оповещение готовности робота UART_Init(9600); // Инициализация порта для связи с роутером //wdt_enable (WDTO_500MS); } void loop() { if (UART_ReadByte(inByte)) { if ( packid == 16 ) // контрольная сумма команды cm= { packid=0; switch (inByte) // Смотрим какая команда пришла { case 'x': // Остановка робота robot_stop(); break; case 'W': // Движение вперед robot_go(); break; case 'D': // Поворот вправо robot_rotation_left(); break; case 'A': // Поворот влево robot_rotation_right(); break; case 'S': // Движение назад robot_back(); break; case 'U': // Серва поднимается if(i > min_pos) myservo1.write(i -= step_servo); break; case 'J': // Серва опускается if(i < max_pos) myservo1.write(i += step_servo); break; case 'K': // Серва поворачивается вправо if(i2 > min_pos) myservo2.write(i2 -= step_servo); break; case 'H': // Серва поворачивается влево if(i2 < max_pos) myservo2.write(i2 += step_servo); break; case 'B': // Бластер D10_High; break; case 'C': // Клаксон horn(); break; case ']': // запрос состояния аналоговых датчиков byte2char(A6_Read,A7_Read); break; case 'V': // Включить/Выключить фары if(light_stat) { D9_Low; light_stat=false; } else { D9_High; light_stat=true; } break; } if(inByte>47 && inByte<58) speed=(inByte-47)*17+85; //скорость вращения колес } else packet_id(inByte); } // wdt_reset(); } //**************************************************** void horn() { for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение } void robot_go() { D4_Low; analogWrite(5, speed); analogWrite(6, speed); D7_Low; } void robot_back() { D4_High; analogWrite(5, 255-speed); analogWrite(6, 255-speed); D7_High; } void robot_stop() { D4_Low; analogWrite(5, 0); analogWrite(6, 0); D7_Low; D10_Low; } void robot_rotation_left() { D4_Low; analogWrite(5, speed); analogWrite(6, 255-speed); D7_High; } void robot_rotation_right() { D4_High; analogWrite(5, 255-speed); analogWrite(6, speed); D7_Low; } void packet_id(uint8_t inbyte) //проверяем идентификатор пакета "cm=" { switch (inbyte) { case 'c': packid=2; break; case 'm': packid*=2; //packid=packid<<1; break; case '=': packid*=4; //packid=packid<<2; break; default: packid=0; } } void byte2char(uint16_t inbyte0, uint16_t inbyte1) { char bytetochar[5]; uint8_t buf_answer[]="{\"dat1\":\"0000\",\"dat2\":\"0000\"}"; itoa(inbyte0+10000, bytetochar, 10); buf_answer[9]= bytetochar[1]; buf_answer[10]= bytetochar[2]; buf_answer[11]= bytetochar[3]; buf_answer[12]= bytetochar[4]; itoa(inbyte1+10000, bytetochar, 10); buf_answer[23]= bytetochar[1]; buf_answer[24]= bytetochar[2]; buf_answer[25]= bytetochar[3]; buf_answer[26]= bytetochar[4]; UART_SendArray(buf_answer, sizeof(buf_answer)-1); }фото не получается вставить. вот ошибки-
C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp: In function 'void WriteEEPROM_Byte(uint8_t, uint8_t)': C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:186:31: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] eeprom_write_byte((uint8_t*)addr, data); ^ C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp: In function 'void WriteEEPROM_Long(uint8_t, uint32_t)': C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:197:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] eeprom_write_byte((uint8_t*)addr, data & 0xFF); ^ C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:198:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] eeprom_write_byte((uint8_t*)addr+1, (data & 0xFF00) >> 8); ^ C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:199:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] eeprom_write_byte((uint8_t*)addr+2, (data & 0xFF0000) >> 16); ^ C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:200:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] eeprom_write_byte((uint8_t*)addr+3, (data & 0xFF000000) >> 24); ^ C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp: In function 'uint8_t ReadEEPROM_Byte(uint8_t)': C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:209:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] return eeprom_read_byte((uint8_t*)addr); ^ C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp: In function 'uint32_t ReadEEPROM_Long(uint8_t)': C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:220:55: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] uint32_t ir_code = eeprom_read_byte((uint8_t*)addr+3); ^ C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:221:63: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] ir_code = (ir_code << 8) | eeprom_read_byte((uint8_t*)addr+2); ^ C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:222:63: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] ir_code = (ir_code << 8) | eeprom_read_byte((uint8_t*)addr+1); ^ C:\Program Files (x86)\Arduino_new\libraries\cyberlib\CyberLib.cpp:223:63: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] ir_code = (ir_code << 8) | eeprom_read_byte((uint8_t*)addr); ^Дык это не ошибки, а варнинги - нехорошо, конечно, но не смертельно.
Ребята помогите пожалуйста исправить ошибку в скетче
помогите вот скетч
в строке N не хватает ;
У него и с фигурными скобками там мешанина...