Arduino - ошибка "expected primary-expression before '.' token"
#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
@Ruby AK, 👍0
Обсуждение1 ответ
Ultrasonic
— это имя класса. Почему вы пытаетесь использовать его перед .
в выражении?
Судя по декларации, вам нужен ультразвук
. Это имя вашего объекта. ультразвуковой
, а не ультразвуковой
.
Сравнивая предоставленный код с текстом ошибки, я готов поспорить, что то или другое является опечаткой, обратите внимание, что регистр «ультразвук» в коде не соответствует соответствующей строке в ошибке., @Kelly S. French
@Келли С. Френч: Что ж, если вы просмотрите историю редактирования, вы увидите, что код в исходном сообщении соответствует тексту ошибки. Между тем, версия пасты, указанная автором в комментариях, немного отличается - ошибка Ultrasonic
уже исправлена. Позже код здесь был заменен на версию Pastebin. Таким образом, вопрос стал противоречить самому себе., @AnT
Хорошая мысль, я не подумал просмотреть историю изменений. Мои опасения были больше связаны с удивлением по поводу текста ошибки, учитывая, что проблема со строгим соответствием регистру обычно не связана с отсутствующим «основным выражением», поскольку обычно перед «.» должен быть именованный идентификатор. и ожидание выражения там заставило бы меня задаться вопросом, была ли причина в другом месте, например, в фрагменте ' **uıhhf в строке 40', упомянутом Крислом, который определенно выглядит как синтаксическая ошибка, но я не понимаю, как он это сгенерирует ошибка тоже. Разве ОП не включил весь журнал ошибок?, @Kelly S. French
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Ошибка A fatal error occurred: Failed to connect to ESP32: Wrong boot mode detected (0x13)! The chip needs to be in download mode. [upload] Error 2
- Текстовая часть превышает доступное место на плате
- Почему IDE не может найти плату, несмотря на то, что она четко видна и выбрана?
- Ошибка переменной does not name a type!
- Функция, объявленная в другом файле, не распознана (undefined reference to)
- Arduino sketch использует слишком много места в памяти?
- Что означает avrdude: Device signature = 0x000000? Неисправная проводка? Проблема с программным обеспечением? Неправильная инструкция?
Пожалуйста, покажите полный рабочий пример вашего кода, который показывает проблему. Это не может быть ваш полный код. Также предоставьте ссылку на библиотеку, которую вы используете для 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