Pages: [1]   Go Down
Author Topic: SoftwareSerial - Pins verändern  (Read 554 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:
SoftwareSerial maestroSerial(rxPin, txPin)

Gruß
Stefan
« Last Edit: July 15, 2012, 10:41:30 am by gloob » Logged


Offline Offline
Full Member
***
Karma: 1
Posts: 136
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
  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:
#include <SoftwareSerial.h>
#include <kellerbus.h>

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

void loop() {
 ;
}
cpp
Code:
#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:
#include <Arduino.h>
#include <SoftwareSerial.h>

class CKellerBus
{
  private:
     SoftwareSerial *swSerial;
 
  public: 
    CKellerBus(SoftwareSerial*, uint16_t, uint8_t, uint16_t); // constructor for SoftSerial
};
« Last Edit: July 15, 2012, 11:44:47 am by thewknd » Logged

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Full Member
***
Karma: 1
Posts: 136
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

habe oben nochmals editiert.
Logged

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Pages: [1]   Go Up
Jump to: