Я сейчас читал пару дней о указателях, ссылках и разграничений в C / C ++, предназначенном для Arduino и не может полностью удивиться, что мне не хватает.
У меня есть мой эскиз , который имеет настройку
Serial.begin(9600); //Just for logging.
Serial1.begin(9600); //Arduino Mega-> Other Device
, я использую класс обертки для отправки байта через Serial1, вызывая простую функцию, подобную GetStatus ()
.
Проблема, у меня есть, я бы хотел сделать свой класс более динамичным, поэтому я хотел бы использовать мой класс использовать Serial1, Serial2, Serial3 или даже базовую серию - но я не знаю, как построить мой .h и .cpp файлы для использования их в качестве ссылок.
На данный момент мой класс имеет статический сериал1, но если кто-то хотел бы использовать свой класс, им придется переименовать все до сериала, если они используют Arduino Uno .
В MyClass.h У меня есть что-то вроде
myClass(HardwareSerial *serial);
и в MyClass.cpp (конструктор):
myClass::myClass(HardwareSerial &serial) {
_HardSerial = serial;
..
}
, но компилятор продолжает стонать о том, что ) ожидается до и или *
.
Я пробовал различные способы и всегда получите ту же ошибку - за исключением случаев, когда я ссылаюсь на мой класс к последовательному объекту - но он говорит, что Serial не был определен ..
Я не могу найти какие-либо учебные пособия, кроме Ресурс указателя для Arduino .
Декларация и творение
#include "print.h" // dataType * variablename = & target; Печать * Принтер = & serial; Применение
Использование
// Это эквивалент Serial.Print Принтер-> Печать («Печать с использованием последовательного объекта»); // обратите внимание на -> в отличие от. // Изменить целевой адрес (или какой адрес указывать на) Принтер = & serial2; // Это эквивалент Serial2.print Принтер-> Печать («Печать с использованием объекта Serial2»);
Это именно то, что я хочу - но кажется, что я этого не понимаю. Я сделал то, что сделал там, и это не работает для меня.
Спасибо, я сделал это ссылочным способом, потому что он еще лучше. Я все еще получаю эти ошибки, хотя:
:88: error: 'HardwareSerial' has not been declared
линия 88 от .h:
uint8_t Init(long BaudRate, HardwareSerial& serial);
.h:136: error: ISO C++ forbids declaration of 'HardwareSerial' with no type
.h:136: error: expected ';' before '&' token
линия 136 от .h (это продолжает происходить - я не знаю, что использовать, serial.write? / Serial?):
private:
HardwareSerial& _HardSerial;
Итак, в основном потому, что я импортирую файл файл hardwareserial.h
в файле myclass.h
, который импортируется в мой эскиз, чтобы использовать все марки MyClasses - это убивает Ссылки в эскизе и хочет, чтобы я переопределил последовательные экземпляры. Похоже, наследование неверно, это неверный путь ... раздражает. Какой конструктор по умолчанию используется в эскизе?
Это похоже на то, что он просит меня сделать это:
HardwareSerial Serial1(&rx_buffer1, &UBRR1H, &UBRR1L, &UCSR1A, &UCSR1B, &UDR1, RXEN1, TXEN1, RXCIE1, UDRE1, U2X1);
действительно? Опять не понимаю ...