Я читал пару дней о указателях, ссылках и разборах в C/С++, предназначенных для Arduino, и не могу полностью угадать, чего не хватает.
У меня есть sketch, у которого есть настройка
Serial.begin(9600); //Just for logging.
Serial1.begin(9600); //Arduino Mega-> Other Device
Я использую класс-оболочку для отправки BYTE через 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 не определен.
Я не могу найти никаких учебных пособий, кроме Ресурс указателя для 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(это продолжается: я не знаю, что использовать, 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);
Действительно? Опять я не понимаю...