Ошибка компиляции для Arduino Nano 33 BLE с библиотекой LiquidCrystal
Недавно я начал программировать в Arduino IDE для Arduino Nano 33 BLE, который купил. Когда я выбираю Nano 33 BLE в качестве платы, я получаю следующую ошибку:
Arduino: 1.8.11 (Windows 10), Board: "Arduino Nano 33 BLE"
In file included from C:\Users\Niels\Documents\Arduino\libraries\LiquidCrystal\src\LiquidCrystal.cpp:1:0:
C:\Users\Niels\Documents\Arduino\libraries\LiquidCrystal\src\LiquidCrystal.h:45:36: error: expected class-name before '{' token
class LiquidCrystal : public Print {
^
C:\Users\Niels\Documents\Arduino\libraries\LiquidCrystal\src\LiquidCrystal.h:86:9: error: 'Print' has not been declared
using Print::write;
^~~~~
exit status 1
Error compiling for board Arduino Nano 33 BLE.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Я не получаю эту ошибку при компиляции для обычной платы Arduino nano. Это мой код:
#include <Arduino_LSM9DS1.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
// контакты:
const int measurePin = 13, calibratePin = 14, xHighPin = 15, xLowPin = 16, yHighPin = 17, yLowPin = 18;
// константы:
const int interval = 10;
const float delta = 10;
// переменные:
boolean measureSts = LOW, calibrateSts = LOW, xyOK = true;
int count = 0, timer = 0;
float measurements[100], current, x, y, z, xZero, yZero, zZero;
//программа:
void setup() {
lcd.begin(16,2);
pinMode(measurePin, INPUT);
pinMode(calibratePin, INPUT);
pinMode(xHighPin, OUTPUT);
pinMode(xLowPin, OUTPUT);
pinMode(yHighPin, OUTPUT);
pinMode(yLowPin, OUTPUT);
}
void loop() {
if ( IMU.accelerationAvailable() ) {
IMU.readAcceleration(x, y, z);
calibrate();
checkXY();
measure();
current = z - zZero;
printValues();
}
else lcd.print("--geen sensor--");
}
void checkXY() {
xyOK = true;
if ( x < xZero - delta ) {
xyOK = false;
digitalWrite(xLowPin, HIGH);
digitalWrite(xHighPin, LOW);
}
else if ( x > xZero + delta ) {
xyOK = false;
digitalWrite(xLowPin, LOW);
digitalWrite(xHighPin, HIGH);
}
if ( y < yZero - delta ) {
xyOK = false;
digitalWrite(yLowPin, HIGH);
digitalWrite(yHighPin, LOW);
}
else if ( y > yZero + delta ) {
xyOK = false;
digitalWrite(yLowPin, LOW);
digitalWrite(yHighPin, HIGH);
}
}
void measure(){
if ( digitalRead(measurePin) == LOW && measureSts == HIGH && xyOK ) {
measurements[count] = z - zZero;
zZero = z;
timer = interval;
count++;
}
measureSts = digitalRead(measurePin);
}
void printValues() {
if ( timer >= interval ) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Meting: " + String(measurements[count]) + (char)223);
lcd.setCursor(0,1);
lcd.print("Huidig: " + String(current) + (char)223);
timer = 0;
}
timer++;
}
void calibrate() {
if ( digitalRead(calibratePin) == LOW && calibrateSts == true ) {
xZero = x;
yZero = y;
lcd.setCursor(0,3);
lcd.print("kalibreren");
lcd.setCursor(1,4);
lcd.print("voltooid");
digitalWrite(xHighPin, HIGH);
digitalWrite(xLowPin, HIGH);
digitalWrite(yHighPin, HIGH);
digitalWrite(yLowPin, HIGH);
delay(100);
lcd.clear();
digitalWrite(xHighPin, LOW);
digitalWrite(xLowPin, LOW);
digitalWrite(yHighPin, LOW);
digitalWrite(yLowPin, LOW);
}
calibrateSts = digitalRead(calibratePin);
}
Для контекста: я пытаюсь создать устройство для измерения углов, используя встроенный акселерометр и ЖК-экран 2x16.
Надеюсь, кто-нибудь поможет мне это исправить. Заранее спасибо.
-Нильс
@NielsS, 👍0
Обсуждение1 ответ
Ядро Arduino для Nano 33 BLE основано на Mbed и может использоваться в Mbed в качестве библиотеки. Для этого классы API Arduino в этом ядре помещены в пространство имен arduino::
. Это вызывает проблемы для библиотек, которые включают в себя отдельные включения Arduino API, исторически скопированные в ядра для различных архитектурных платформ MCU. Файл Arduino.h включает файлы API в правильном порядке, поэтому в этом случае замена #include"Print.h"
на #include <Arduino.h>
в LiquidCrystal .h решает проблему компиляции.
- Ошибка: "'lcd' does not name a type" при использовании библиотеки LiquidCrystal.
- Нужна помощь с библиотекой U8GLIB
- Использование библиотеки емкостных датчиков с мультиплексором 74HC4067
- Из-за чего LCD перестанет работать после 5-секундного подключения к Arduino?
- Arduino IRremote перестает работать
- ЖК-дисплей 20x4 будет писать, но не будет обновляться
- Как сгенерировать файлы .a и .so для добавления в проект arduino
- Библиотека LiquidCrystal и таймеры кажутся несовместимыми.
попробуйте в LiquidCrystal.h заменить #include <Print.h> на #include <Arduino.h> (я не знаю, какую библиотеку LiquidCrystal вы используете. их много), @Juraj
Я заменил #include"Print.h" на #include"Arduino.h", как вы сказали. Теперь это работает. Спасибо!, @NielsS