Ошибки в скетчи.

Yacov-shv
Offline
Зарегистрирован: 05.12.2015

Здравствуйте, у меня вот такой скетч:

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.
 
Подскажите пожалуйста что здесь не так. В програмировании я новичёк:)
Не судите строго.
 
Yacov-shv
Offline
Зарегистрирован: 05.12.2015

Версия ардуины 1.6.0

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Ну, как минимум, количество открывающих фигурных скобок (6 шт.) не соответсвует количеству закрывающих (7 шт., лишняя в строке 32). И два раза подряд else (строки 28, 34), перед каждым else должен быть свой if.

MacSim
Offline
Зарегистрирован: 28.11.2012

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

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
 
1 похоже вы нам не скопировали.
2 нет иф, конструкцию нарушили
3,4,5 результат остальных ошибок
и в последней строке у вас какойто мусор есть. выделил и удалил всю строку, поставил }
 
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); // делает замер каждые  -- сек

}

 

 
 
MacSim
Offline
Зарегистрирован: 28.11.2012

операторы иф, елсе сами надеюсь поправите, не хочу ковыряться с вашими проверками. используйте их правильно и будет работать. а вообще заведите себе шаманский бубен програмиста, он помогает :-) с его помощью входите в транс и проникайте внутрь программы. и все...

http://arduino.ru/Reference/Else приведенные пример 2  гумно - новичку быстрее запутаться, чем разобраться

операторы после иф и елсе возмите за правило писать в { } я обычно делаю отступы

       if (pinFiveInput < 500)   { // выполнять действие A
                                 }
       else                      {  // выполнять действие B
                                           // выполнять действие C
                                            // выполнять действие D
                                 }

 

Yacov-shv
Offline
Зарегистрирован: 05.12.2015

Странно, скетч показан что вкружен, но ардуино и датчик не хотят работать.

Yacov-shv
Offline
Зарегистрирован: 05.12.2015

У меня вот ещё один вопрос. на этом видио https://www.youtube.com/watch?v=GVXQKYpCsNw объясняется как устронить основную проблему этого датчик HC-SR04. Но я не могу понять куда он этот доп. код нужно вставить( Пожалуйста, могли бы вы мне помочь. Вот этот код, который на видео: 

duration = pulseIn(echoPin, HIGH);

if (duration == 0) {

pinMode(echoPin, OUTPUT); 
digitalWrite(echoPin, LOW); 
delay(150); 
pinMode(echoPin, INPUT); 

Serial.println("Reload ultrasonic, fix bug SR04");  

ВОТ СКЕТЧ: 

const int Trig = 8; 

const int Echo = 9; 
const int ledPin = 11;  // 13 – если будете использовать встроенный в Arduino светодиод
 
void setup() 
pinMode(Trig, OUTPUT); 
pinMode(Echo, INPUT); 
pinMode(ledPin, OUTPUT); 
  
Serial.begin(9600); 
}
 
unsigned int time_us=0;
 
unsigned int distance_sm=0;
 
void loop() 
digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера 
delayMicroseconds(10); // Удерживаем 10 микросекунд 
digitalWrite(Trig, LOW); // Затем убираем 
time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса 
distance_sm=time_us/58; // Пересчитываем в сантиметры 
Serial.println(distance_sm); // Выводим на порт
 
if (distance_sm<50) // Если расстояние менее 50 сантиметром 
   digitalWrite(ledPin, 1); // Зажигаем светодиод 
else 
   digitalWrite(ledPin, 0); // иначе тушим 
  
delay(100); 
}
fogary
Offline
Зарегистрирован: 05.03.2016

MacSim пишет:

операторы после иф и елсе возмите за правило писать в { } я обычно делаю отступы

       if (pinFiveInput < 500)   { // выполнять действие A
                                 }
       else                      {  // выполнять действие B
                                           // выполнять действие C
                                            // выполнять действие D
                                 }

Я конечно извеняюсь, но Вы используете плохой стиль оформления кода. Советовать его новичкам - категорически не стоит.

"Открывающую скобку часто оставляют на одной строке с заголовком (оператора, подпрограммы, структуры и т. п.), при этом она может оказаться сколь угодно далеко справа, но закрывающая скобка при этом обязана находиться в той же колонке, где начался заголовок."

James
Offline
Зарегистрирован: 26.02.2016

понятнее намного будет писать так

if()
{
}

а если вложенный, то 

if()
{
  if()
  {
  }
}  

 

James
Offline
Зарегистрирован: 26.02.2016

так понятно, что и где закрывается, и помогает от того, что все компилится, а работает не так

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Прссститте! А можно уточнить? Очень важный для меня момент - по 10 минут по утрам трачу: вот с какого конца яйцо-в-смятку нужно разбивать? Вроде с тупого положено? Я где-то читал, что учить новичков разбивать с острого конца - это путь в АДДДД! Это так?

Yacov-shv
Offline
Зарегистрирован: 05.12.2015

Скажите, почему этот скетч не фурычит???

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Yacov-shv пишет:
Скажите, почему этот скетч не фурычит???

форматирование кода не по феншую

domrustika
Offline
Зарегистрирован: 23.02.2015

ребята помогите пожалуйста. вот код

#include <CyberLib.h> 
#include <Servo.h> 

Servo myservo1; 
Servo myservo2; 

long previousMillis; http://cyber-place.ru/attachment.php?attachmentid=600&d=1389429469
uint8_t LedStep = 0; // Счетчик
int i; 
boolean light_stat;
uint8_t inByte; 
uint8_t speed=255; //максимальная скорость по умолчанию

#define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D11_Out; D12_Out;}  

void setup()   
{  
  myservo1.attach(9); // Подключение сервоприводов к порту 
  myservo2.attach(10); // Подключение сервоприводов к порту 
  init;  // Инициализация портов 
  D11_Low; // Динамик  OFF
  randomSeed(A6_Read); //Получить случайное значение   
  horn(); //звуковое оповещение готовности робота  
  UART_Init(57600);// Инициализация порта для связи с роутером   
  wdt_enable (WDTO_500MS);  
}   

void loop()   
{  
    unsigned long currentMillis = millis();
      if (LedStep == 0 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек.  
      previousMillis = currentMillis;
      LedStep = 1; 
    } 

    if (LedStep == 1 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. 
      previousMillis = currentMillis; 
      LedStep = 2;
    } 

    if (LedStep == 2 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек. 
      LedStep = 0; 
    } 
   
  if (UART_ReadByte(inByte)) //Если что то пришло 
  { 
    switch (inByte)  // Смотрим какая команда пришла 
    {   
        case 'x': // Остановка робота 
          robot_stop(); 
        break;  
         
        case 'W': // Движение вперед 
          robot_go();   
        break;   
         
        case 'D': // Поворотjт влево 
          robot_rotation_left();  
        break; 

        case 'A': // Поворот вправо 
          robot_rotation_right();  
        break;  
         
        case 'S': // Движение назад 
          robot_back();  
        break;  
         
        case 'U': // Камера поднимается вверх
          myservo1.write(i -= 20);   
        break;  
         
        case 'J': // Камера опускается вниз 
          myservo1.write(i += 20); 
        break;  
         
        case 'H': // Камера поворачивается  вправо
         myservo2.write(i += 20);  
        break;  
         
        case 'K': // Камера поворачивается влево      
         myservo2.write(i -= 20); 
        break;  
         
         case 'B': //  Бластер 
         D12_High; 
        break; 
        
        case 'C': // Клаксон 
         horn(); 
        break; 
         
        case 'V': // Включить/Выключить фары 
        if(light_stat)
        {
         D8_Low;
         light_stat=false;
        } else 
              {
               D8_High;
               light_stat=true;
              }
        break; 
    }  
     if(inByte>47 && inByte<58) speed=(inByte-47)*25+5;  //принимаем команду и преобразуем в скорость         
  }  
 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;   
} 

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; 
}  

при попытке компиляции выходят такие ошибки

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 '::'

 

что это за ошибки? код рабочий так как делал по статье

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Убери ссылку из 7 строки. Если копипастишь откуда-то код - будь внимательнее.

Yacov-shv
Offline
Зарегистрирован: 05.12.2015

Клапауций 232 пишет:

Yacov-shv пишет:
Скажите, почему этот скетч не фурычит???

форматирование кода не по феншую


Всмысле?? Можно по подробнее.

James
Offline
Зарегистрирован: 26.02.2016

Дядя шутить изволит ,убери ссылку и объяви переменную
 

long previousMillis;
uint8_t LedStep = 0;

вот твоя 7 и 8 строка

 

Yacov-shv
Offline
Зарегистрирован: 05.12.2015

Yacov-shv пишет:

Здравствуйте, у меня вот такой скетч:

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.
 
Подскажите пожалуйста что здесь не так. В програмировании я новичёк:)
Не судите строго.
 

Это всё я исправил, скетч в ардуину вгрузился, но сама она и датчик не работают.

Yacov-shv
Offline
Зарегистрирован: 05.12.2015

Тоесть на выходах ничего нету.

James
Offline
Зарегистрирован: 26.02.2016

выложи исправленный

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

После void loop() {

у вас не хватает этих трёх строчек:

  digitalWrite(11, LOW);
  delayMicroseconds(2);
  digitalWrite(11, HIGH);

Yacov-shv
Offline
Зарегистрирован: 05.12.2015

James пишет:

выложи исправленный

 

Вот:

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); // делает замер каждые  -- сек
 
}
warkan
Offline
Зарегистрирован: 13.01.2015

Люди добрые, сорри, если злой офф-топ, но... всё ж это краем-то со скетчем связано :)

Старые файлы проектов *.ino открываются пустыми (сейчас ide v. 1.6.5). Хотя я с тех пор их не менял. Да и если на размер их посмотреть - они разного размера. И от пустого файла проекта отличаются. Как из них код вытащить? Качать и ставить старые версии IDE? А может какой редактор хитрый есть (а то нотпад тоже пустоту показывает :(( )

Спасибо!

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

warkan пишет:

Люди добрые, сорри, если злой офф-топ, но... всё ж это краем-то со скетчем связано :)

Старые файлы проектов *.ino открываются пустыми (сейчас ide v. 1.6.5). Хотя я с тех пор их не менял. Да и если на размер их посмотреть - они разного размера. И от пустого файла проекта отличаются. Как из них код вытащить? Качать и ставить старые версии IDE? А может какой редактор хитрый есть (а то нотпад тоже пустоту показывает :(( )

Спасибо!

ну, да - что ты намутил с правами доступа, только тебе самому известно... или антивирус с дурной головы установил.

warkan
Offline
Зарегистрирован: 13.01.2015

Та не, на права бы он ругался. И на другой машине тоже были бы "вопросы" от системы. А ИДЕ просто открывает файл. Но открывает - пустым. А размер в килобайтах  есть. То есть там есть что-то. Но как его открыть?.... Вот я и подумал, может кто с такой же проблеммой сталкивался уже и решение нашел.

UPD: в просмотрщике Командера, в двоичном и шестнадцатиричном режимах показывает, что файлы забиты нолями :(((  Печаль. Как так вышло........ Нолями, и файлы разных размером.... Мистика.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

warkan пишет:

Та не, на права бы он ругался. И на другой машине тоже были бы "вопросы" от системы. А ИДЕ просто открывает файл. Но открывает - пустым. А размер в килобайтах  есть. То есть там есть что-то. Но как его открыть?.... Вот я и подумал, может кто с такой же проблеммой сталкивался уже и решение нашел.

ну, что за бред?

ясно же что что-то не даёт софту доступ к содержимому файла - тебе кажется, что файл пустой, т.к. запускается текстовый редактор, который ничего не читает.

*скопируй на флешку и открой на другом компе.

warkan
Offline
Зарегистрирован: 13.01.2015

Ну пусть я нуб, ладно.

Вот, попробуй: http:// rusfolder.c om/45018519

Может у тебя не нолями забитый файл откроется :(

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

warkan пишет:

Ну пусть я нуб, ладно.

Вот, попробуй: http:// rusfolder.c om/45018519

Может у тебя не нолями забитый файл откроется :(

да нули - не знаю, как можно такое сотворить.

warkan
Offline
Зарегистрирован: 13.01.2015

Вооот..... вынипарериишь! просто сохранил в своё время проекты и оставил так до лучших времен. ХЗ, что это. Тот, что прислал - в мае прошлого года делался. Чудеса в IDE. :))

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

warkan пишет:

Чудеса в IDE. :))

при чём здесь ИДЕ?

Yacov-shv
Offline
Зарегистрирован: 05.12.2015

Yacov-shv пишет:

James пишет:

выложи исправленный

 

Вот:

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); // делает замер каждые  -- сек
 
}

domrustika
Offline
Зарегистрирован: 23.02.2015

ребята не пойму прикола. вот код

#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);
потом нажимаю компилить ЕЩЕ РАЗ и они уже пропадают и норм компилится!

что за чудеса???

James
Offline
Зарегистрирован: 26.02.2016
delay(500000); 

после этой строчки он у тебя не будет делать вообще ничего, попробуй с миллис. примеры на форуме есть

domrustika
Offline
Зарегистрирован: 23.02.2015

с чем попробовать?

и что значит если при компиляции пишет exit status 1 expected unqualified-id before 'if'???

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

domrustika пишет:

с чем попробовать?

millis()

http://arduino.ru/tutorials/BlinkWithoutDelay

http://robocraft.ru/blog/arduino/385.html

domrustika пишет:

и что значит если при компиляции пишет exit status 1 expected unqualified-id before 'if'???

Приведите скетч и полностью ошибку с номером строки.

domrustika
Offline
Зарегистрирован: 23.02.2015

вот полный скетч

#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);

                                                               ^

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Дык это не ошибки, а варнинги - нехорошо, конечно, но не смертельно.

sainskij
Offline
Зарегистрирован: 26.01.2017

Ребята помогите пожалуйста исправить ошибку в скетче 

#include <Servo.h>
#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#include <dht.h>
#define dht_apin A0 // Analog Pin sensor is connected to
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp;  // для храниения номера метки в десятичном формате
Servo servo;
dht DHT;
int relepin = 4;
int AB;
void setup() {
  Serial.begin(9600);
  Serial.println("Waiting for card...");
  SPI.begin();  //  инициализация SPI / Init SPI bus.
  mfrc522.PCD_Init();     // инициализация MFRC522 / Init MFRC522 card.
  servo.attach(6);
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}
 Serial.begin(9600);
  pinMode (relepin, OUTPUT);
  delay(500);//Delay to let system boot
  Serial.println("DHT11 Humidity & temperature Sensor\n\n");
  delay(1000);//Wait before accessing Sensor
 
}//end "setup()"
 
 
 
void loop() {
  // Поиск новой 
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  // Выбор метки
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }
  uidDec = 0;
  // Выдача серийного номера метки.
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    uidDecTemp = mfrc522.uid.uidByte[i];
    uidDec = uidDec * 256 + uidDecTemp;
  }
  Serial.println("Card UID: ");
  Serial.println(uidDec); // Выводим UID метки в консоль.
  if (uidDec == 2759376275
) // Сравниваем Uid метки, если он равен заданому то серва открывает.
  {
    tone(5, 200, 500); // Делаем звуковой сигнал, Открытие
    servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.)
    delay(3000); // пауза 3 сек и механизм запирается.
    tone(5, 500, 500); // Делаем звуковой сигнал,  Закрытие
  }
  servo.write(0);  // устанавливаем серву в закрытое сосотояние
}
 //Start of Program 
 
  DHT.read11(dht_apin);
 
 
 
 //   Serial.print("Current humidity = ");
 
//    Serial.print(DHT.humidity);
 
  
 
    Serial.print("temperature = ");
 
    Serial.print(DHT.temperature); 
      Serial.print("AB  ");
 
  Serial.print(AB);
    
 
  delay(2000);
 
 
// if ( DHT.temperature < 30) AB=0; 
 // else AB=1;
  if ( DHT. temperature < 30) digitalWrite(relepin,LOW ); 
  else digitalWrite(relepin, HIGH);
 
Текст ошибки
exit status 1
'Serial' does not name a type
 
 
 
 
 
 
 
 
 
mic96
Offline
Зарегистрирован: 09.05.2018

помогите вот скетч 

#include <Ultrasonic.h>
 
#include <hcsr04.h>
 
#include <Ultrasonic.h>
 
 
int Sumo[2][2] = 
{
{250, 250},
{200, 200},
};
 
Ultrasonic eyes(10,11);
 
const int lineSensor = 2;
const int A1A = 5;
const int A1B = 6;
const int B1A = 7;
const int B1B = 8;
 
int distance[2];
int index;
 
volatile int shutDown;
 
int speed;
 
void setup()
{
  attachInterrupt(0, reset, FALLING);
  
  randomSeed(analogRead(0));
  
  pinMode(lineSensor, INPUT);
  pinMode(A1A, OUTPUT);
  pinMode(A1B, OUTPUT);
  pinMode(B1A, OUTPUT);
  pinMode(B1B, OUTPUT);
 
  digitalWrite(B1B, LOW);
  digitalWrite(B1A, LOW);
  digitalWrite(A1B, LOW);
  digitalWrite(A1A, LOW);
  delay(3000);
}
 
void forward()
{
  speed = random(0,2);
  
  digitalWrite(A1B, LOW);
  analogWrite(A1A, Sumo[speed][1]);
  digitalWrite(B1B, LOW);
  analogWrite(B1A, Sumo[speed][0]);
  delay(7000);
}
 
void stop()
{
  digitalWrite(B1B, LOW);
  digitalWrite(B1A, LOW);
  digitalWrite(A1B, LOW);
  digitalWrite(A1A, LOW);
}
 
void reset()
{
  stop();
}
 
void loop()
{
long Ultrasonic::Ranging(int sys)
}
{
  Timing();
  distacne_cm = duration /29 / 2 ;
  distance_inc = duration / 74 / 2;
  if (sys)
    return distacne_cm;
  else
    return distance_inc;
}
  #define CM 1
  for(index=0; index<2; index++)
  {
    ultrasonic.Ranging(CM);
  }
    distance[index] = eyes.Ranging(CM);
    shutDown = digitalRead(lineSensor);
  }
  
  if(distance[0]<10&&distance[1]<10)
  {
    forward();
  }
 
  else
 
  {
    stop();
  }
  
такая ошибка : qualified-id in declaration before '(' token
возможно еще и другие есть
Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

в строке N не хватает ;

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

У него и с фигурными скобками там мешанина...