Go Down

Topic: SoftwareSerial - Pins verändern (Read 752 times) previous topic - next topic

gloob

Jul 15, 2012, 05:34 pm Last Edit: Jul 15, 2012, 05:41 pm by gloob Reason: 1
Hallo,

Gibt es eine Möglichkeit die Pins für ein SoftwareSerial zur Laufzeit zuändern?

Derzeit nutze ich folgenden Codeschnipsel in einer Library:

Code: [Select]
#include "Arduino.h"
#include "MaestroServo.h"
#include "SoftwareSerial.h"

SoftwareSerial maestroSerial(3, 4);

MaestroServo::MaestroServo(unsigned char rxPin, unsigned char txPin, int baudRate, unsigned char resetPin, unsigned char commandSendPin)
{
   // start the communication
   maestroSerial.begin(baudRate);
   
   // define pin modes
   pinMode(resetPin, OUTPUT);
   pinMode(commandSendPin, OUTPUT);
   
   // save for later internal use
   _rxPin = rxPin;
   _txPin = txPin;
   _baudRate = baudRate;
   _resetPin = resetPin;
   _commandSendPin = commandSendPin;
}


So richtig weiß ich nur nicht wie ich die SoftwareSerial Pins im Constructor der Klasse verändern kann.

Geht es einfach mit einem:

Code: [Select]
SoftwareSerial maestroSerial(rxPin, txPin)

Gruß
Stefan

thewknd

#1
Jul 15, 2012, 06:42 pm Last Edit: Jul 15, 2012, 06:44 pm by thewknd Reason: 1
ich verstehe nicht genau, zu welchem Zeitpunkt du die Pins ändern willst. In der SoftwareSerial Library ist keine Möglichkeit vorgesehen, um den RX und TX Pin ausserhalb des Konstruktors festzulegen/ zu ändern. Wenn du dir die Library anpasst und die Funktionen
Code: [Select]
  void setTX(uint8_t transmitPin);
  void setRX(uint8_t receivePin);
von private nach public verschiebst, funktioniert das vielleicht...



und btw. Ich löse das so, wenn ich SoftwareSerial in einer eigenen Klasse verwenden will.

Aufruf in der Arduino ino Datei
Code: [Select]

#include <SoftwareSerial.h>
#include <kellerbus.h>

SoftwareSerial mySerial(10,11);
CKellerBus kbus(&mySerial,9600,5,100);
void setup() {
;
}

void loop() {
;
}

cpp
Code: [Select]

#include <kellerbus.h>

CKellerBus::CKellerBus(SoftwareSerial* serialPort, uint16_t _baudrate, uint8_t _rts, uint16_t _timeout)
{
  swSerial = serialPort;
  swSerial->begin(baudrate);
}

und die header Datei
Code: [Select]

#include <Arduino.h>
#include <SoftwareSerial.h>

class CKellerBus
{
  private:
     SoftwareSerial *swSerial;
 
  public: 
    CKellerBus(SoftwareSerial*, uint16_t, uint8_t, uint16_t); // constructor for SoftSerial
};

duemilanove / OSX & WIN
Arduino & Teensy: http://bit.ly/13rbdtQ

gloob

Was ich vor habe ist, dass wenn der Benutzer meine Library verwendet er beim Initialisieren der Klasse, die Pins übergeben kann, die genutzt werden für die SoftwareSerial.

Ich möchte ungerne feste Werte innerhalb der Lib verwenden.

thewknd

duemilanove / OSX & WIN
Arduino & Teensy: http://bit.ly/13rbdtQ

gloob

Es über einen Pointer zu machen ist natürlich auch eine gute Variante. Ich glaube das werde ich direkt so von dir übernehmen wenn du gestattest.

Go Up