День добрый! Известно, что для Mega 2560 доступны последовательные порты Serial и Serial[1,2,3]. Можно ли как то осуществить передачу указателя на один из этих портов в качестве аргумента функции? К примеру для SoftwareSerial порты создаются как обычные объекты: Код (C++): SoftwareSerial mySerial(10,11); и по сути mySerial можно передать в функцию. Но в случае с hardware serial немного иначе. Похоже все доступные порты уже изначально проинициализированы под именами Serial, Serial1..3. Если так то к какому классу они относятся? (необходимо для объявления функции)
Спасибо! Вопрос элементарный оказался. В итоге что то типа того: Код (C++): void setup() { Serial.begin(9600); } void loop() { serialPrint((String)millis() ,&Serial); delay(500); } void serialPrint(String _str, HardwareSerial* _serial) { _serial->println(_str); }
Передавать можно Stream*: Код (C++): SoftwareSerial ss(10,11); void dealWithStream(Stream* s) { while(s->available()) { s->write(s->read()); } } void setup() { } void loop() { dealWithStream(&ss); dealWithStream(&Serial); dealWithStream(&Serial1); dealWithStream(&Serial2); dealWithStream(&Serial3); } Можно и свой наследник Stream написать, и тоже его подсовывать, при необходимости: например, чтобы он читал/писал с EEPROM-памяти на шине I2C - короче, применений масса, юзать предоставленные авторами Wiring набор классов - не возбраняется