Arduino - ошибка "expected primary-expression before '.' token"

error
#include "Ultrasonic.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Установите адрес ЖК-дисплея на 0x27 для отображения 16 символов и 2 строк.
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  // поместите сюда свой код установки для однократного запуска:
  lcd.begin();
  Serial.begin(9600);
}
Ultrasonic ultrasonic(11, 12); //Ультразвуковой ультразвук(Trig,Echo);
void loop()
{
  int a = (Ultrasonic.Ranging(CM));
  if (a >= 15 && a < 20)
  { Serial.println("guvenli");
    lcd.print("guvenli");
    delay(500);
    lcd.clear();
    tone(3, 2000, 100);
    delay(500);
    noTone(3);
  }
  if (a >= 10 && a < 15) {
    Serial.println("guvenli dikkat");
    lcd.print("guvenli dikkat");
    delay(500);
    lcd.clear();
    tone(3, 2000, 50);
    delay(250);
    noTone(3);
  }
  if (a < 5)
  {
    Serial.println("vurdun");
    lcd.print("vurdun");
    delay(500);
    lcd.clear();**uıhhf
    tone(3, 2000, 50);
    delay(50);
    noTone(3);
  }
}

В этом коде я получаю такую ошибку:

   C:\Users\*\AppData\Local\Temp\arduino_modified_sketch_113625\sketch_apr29a.ino: In function 'void loop()':

sketch_apr29a:19:22: error: expected primary-expression before '.' token

   int a = (Ultrasonic.Ranging(CM)); 

                      ^

exit status 1
expected primary-expression before '.' token

, 👍0

Обсуждение

Пожалуйста, покажите полный рабочий пример вашего кода, который показывает проблему. Это не может быть ваш полный код. Также предоставьте ссылку на библиотеку, которую вы используете для Ultrasonic., @chrisl

http://pasted.co/172df900, @Ruby AK

Я предполагаю, что вы использовали следующие библиотеки: [LiquidCrystal-I2C](https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library) и [Ultrasonic-HC-SR04](https://github.com/JRodrigoTech /Ультразвуковой-HC-SR04), @chrisl

И, пожалуйста, скопируйте свой полный код в вопрос, чтобы он не зависел от ссылки, которая со временем может стать недействительной. Я сделал это для тебя сейчас., @chrisl

Если я удалю **uıhhf в строке 40 (что похоже на опечатку), ваш эскиз для меня скомпилируется нормально. Я не получаю показанную ошибку. В качестве целевой платы я использую Arduino IDE 1.8.5 и Arduino Uno., @chrisl

это все код, @Ruby AK

теперь я получаю этот код: «Arduino: 1.8.8 (Windows 8.1), Kart: «Arduino/Genuino Uno» C:\Users\ETKullanici\Desktop\sketch_apr29a\sketch_apr29a.ino: В функции voidloop(): Sketch_apr29a: 16:21: ошибка: «класс Ultrasonic» не имеет элемента с именем «Ranging». int a=(ultrasonic.Ranging(CM)); ^ статус выхода 1 В классе Ultrasonic нет члена с именем Ranging. Этот отчет будет содержать больше информации с «Показывать подробный вывод во время компиляции» опция включена в меню «Файл» -> «Настройки»., @Ruby AK

Тогда, возможно, у вас другая ультразвуковая библиотека, отличная от той, которую я привел выше. Пожалуйста, дайте ссылку на библиотеку, которой вы действительно пользуетесь., @chrisl

я думаю, дело не в библиотеке, у вас есть ошибка: ожидаемое первичное выражение перед '.' жетон int a = (Ultrasonic.Ranging(CM)); но вы используете переменную Ultrasonic Ultrasonic(11, 12); Пожалуйста, проверьте свой код еще раз!., @abu-ahmed al-khatiri

@chrisl: Вы заменили исходный код, сгенерировавший ошибку «ожидаемого первичного выражения», на модифицированный код, в котором этой ошибки больше нет. Зачем ты это сделал? Теперь вопрос больше не имеет смысла., @AnT

@AnT Я просто скопировал код из вставленной ссылки, предоставленной ОП. Вы можете проголосовать за отмену моего редактирования вопроса., @chrisl

@chrisl: Я понимаю. Это означает, что правка была сделана автором кода. Тем не менее, это не меняет того факта, что код больше не соответствует сообщению об ошибке, что противоречит цели всего этого вопроса., @AnT


1 ответ


2

Ultrasonic — это имя класса. Почему вы пытаетесь использовать его перед . в выражении?

Судя по декларации, вам нужен ультразвук. Это имя вашего объекта. ультразвуковой, а не ультразвуковой.

,

Сравнивая предоставленный код с текстом ошибки, я готов поспорить, что то или другое является опечаткой, обратите внимание, что регистр «ультразвук» в коде не соответствует соответствующей строке в ошибке., @Kelly S. French

@Келли С. Френч: Что ж, если вы просмотрите историю редактирования, вы увидите, что код в исходном сообщении соответствует тексту ошибки. Между тем, версия пасты, указанная автором в комментариях, немного отличается - ошибка Ultrasonic уже исправлена. Позже код здесь был заменен на версию Pastebin. Таким образом, вопрос стал противоречить самому себе., @AnT

Хорошая мысль, я не подумал просмотреть историю изменений. Мои опасения были больше связаны с удивлением по поводу текста ошибки, учитывая, что проблема со строгим соответствием регистру обычно не связана с отсутствующим «основным выражением», поскольку обычно перед «.» должен быть именованный идентификатор. и ожидание выражения там заставило бы меня задаться вопросом, была ли причина в другом месте, например, в фрагменте ' **uıhhf в строке 40', упомянутом Крислом, который определенно выглядит как синтаксическая ошибка, но я не понимаю, как он это сгенерирует ошибка тоже. Разве ОП не включил весь журнал ошибок?, @Kelly S. French