Я уже пару дней читаю об указателях, ссылках и разыменованиях в C / C ++, предназначенных для Arduino, и не могу полностью понять, что мне не хватает.
У меня есть набросок с настройкой
Serial.begin(9600); //Just for logging.
Serial1.begin(9600); //Arduino Mega-> Other Device
Я использую класс-оболочку для отправки байтов через Serial1, вызывая простую функцию, такую как getStatus()
.
У меня проблема в том, чтоЯ хотел бы сделать мой класс более динамичным, поэтому я хотел бы, чтобы мой класс использовал Serial1, Serial2, Serial3 или даже базовый Serial - но я не знаю, как создавать мои файлы .h и .cpp, чтобы использовать их в качестве ссылок.
В данный момент у моего класса есть статический Serial1, но если кто-то захочет использовать мой класс, ему придется переименовать все в Serial, если они используют Arduino Uno .
В myclass.h у меня есть что-то вроде
myClass(HardwareSerial *serial);
и в myClass.cpp (конструктор):
myClass::myClass(HardwareSerial &serial) {
_HardSerial = serial;
..
}
Но компилятор продолжает стонать о ) expected before & or *
.
я пробовал разные способы и всегда получаюта же ошибка - за исключением случаев, когда я ссылаюсь на мой класс на объект Serial - но он говорит, что Serial не был определен ..
Я не могу найти никаких учебных пособий, кроме Pointer Resource for Arduino .
Декларация и создание
#include "Print.h"
//datatype* variablename = ⌖
Print* printer = &Serial; Usage
Использование
//this is the equivalent of Serial.print
printer->print("print using the Serial object"); //notice the -> as opposed to .
//change target address (or which address to point to)
printer = &Serial2;
//this is the equivalent of Serial2.print
printer->print("print using the Serial2 object");
Это именно то, что я хочу - но кажетсяЯ не понимаю.Я сделал то, что они сделали там, и это не работает для меня.
РЕДАКТИРОВАТЬ 1
Спасибо, я сделал это эталонным способом, потому что это еще лучше.Я все еще получаю эти ошибки, хотя:
: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 (это продолжается - я не знаю, чтоuse, Serial.write? / Serial?):
private:
HardwareSerial& _HardSerial;
EDIT 2
Итак, в основном, потому что я импортирую файл HardWareserial.h
в файл myClass.h
, который импортирован в мой эскизиспользовать весь материал myClasses - он убивает ссылки в эскизе и хочет, чтобы я переопределил экземпляры Serial.Кажется, что наследство неправильное ... раздражает.Какой конструктор по умолчанию используется в эскизе?
Как будто он просит меня сделать это:
HardwareSerial Serial1(&rx_buffer1, &UBRR1H, &UBRR1L, &UCSR1A, &UCSR1B, &UDR1, RXEN1, TXEN1, RXCIE1, UDRE1, U2X1);
Правда?Опять не понимаю ...