Передача в функцию указателя на Serial

Тема в разделе "Arduino & Shields", создана пользователем Brony, 25 окт 2017.

  1. Brony

    Brony Нуб

    День добрый!
    Известно, что для Mega 2560 доступны последовательные порты Serial и Serial[1,2,3]. Можно ли как то осуществить передачу указателя на один из этих портов в качестве аргумента функции?
    К примеру для SoftwareSerial порты создаются как обычные объекты:
    Код (C++):
    SoftwareSerial mySerial(10,11);
    и по сути mySerial можно передать в функцию.
    Но в случае с hardware serial немного иначе. Похоже все доступные порты уже изначально проинициализированы под именами Serial, Serial1..3. Если так то к какому классу они относятся? (необходимо для объявления функции)
     
  2. rkit

    rkit Гуру

  3. DetSimen

    DetSimen Guest

    Пиши свою функцию, которая принимает (Print &) и пхай в нее чо хочешь, хоть Сериалы, хоть ЛСД.
     
  4. b707

    b707 Гуру

    как ни удивительно - класс называется HardwareSerial :)
     
    Brony нравится это.
  5. Brony

    Brony Нуб

    Спасибо! Вопрос элементарный оказался. В итоге что то типа того:
    Код (C++):
    void setup() {
      Serial.begin(9600);
    }

    void loop() {
      serialPrint((String)millis() ,&Serial);
      delay(500);
    }

    void serialPrint(String _str, HardwareSerial* _serial) {
      _serial->println(_str);
    }
     
  6. Brony

    Brony Нуб

    Да, я сразу не сообразил, пока rkit к исходникам не отправил. Даже стыдно такое спрашивать :oops:
     
  7. DIYMan

    DIYMan Guest

    Передавать можно 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 набор классов - не возбраняется ;)
     
    Patriot, brokly и ИгорьК нравится это.