Как пройти серийный объект посредством ссылки на мой класс в Arduino?

Я сейчас читал пару дней о указателях, ссылках и разграничений в 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»);
 

Это именно то, что я хочу - но кажется, что я этого не понимаю. Я сделал то, что сделал там, и это не работает для меня.

Отредактируйте 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 (это продолжает происходить - я не знаю, что использовать, serial.write? / Serial?):

private:
HardwareSerial& _HardSerial;

Отредактируйте 2

Итак, в основном потому, что я импортирую файл файл hardwareserial.h в файле myclass.h , который импортируется в мой эскиз, чтобы использовать все марки MyClasses - это убивает Ссылки в эскизе и хочет, чтобы я переопределил последовательные экземпляры. Похоже, наследование неверно, это неверный путь ... раздражает. Какой конструктор по умолчанию используется в эскизе?

Это похоже на то, что он просит меня сделать это:

HardwareSerial Serial1(&rx_buffer1, &UBRR1H, &UBRR1L, &UCSR1A, &UCSR1B, &UDR1, RXEN1, TXEN1, RXCIE1, UDRE1, U2X1);

действительно? Опять не понимаю ...

11
задан Jonathan Leffler 14 August 2016 в 02:15
поделиться