Beliebig andere Ports benutzen

Moin zusammen,

ich möchte diverse "Erweiterungsplatinen" an einen Nano anschließen.

In wieweit kann ich die Ports wegen "Kollisionen" einfach auf andere Ports legen?

Beispiel hier: Ein Motortreiber und ein Soundmodul, beim unteren Code ist PWM angegeben für Pin5. Ist klar, muss ein PWM-Pin sein wenn ich umsortiere.

Gibt es noch mehr zu beachten? Kann man RX/TX für ein Modul an Pin 8 und 9, und für ein anderes Modul im gleichen Sketch an Pin 7 und 9 legen?

Vielen Dank!

Tobias

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

// Create the mp3 module object, 
//   Arduino Pin 8 is connected to TX of the JQ6500
//   Arduino Pin 9 is connected to one end of a  1k resistor, 
//     the other end of the 1k resistor is connected to RX of the JQ6500
//   If your Arduino is 3v3 powered, you can omit the 1k series resistor
JQ6500_Serial mp3(8,9);
// This is the library for the TB6612 that contains the class Motor and all the
// functions
#include <SparkFun_TB6612.h>

// Pins for all inputs, keep in mind the PWM defines must be on PWM pins
// the default pins listed are the ones used on the Redbot (ROB-12097) with
// the exception of STBY which the Redbot controls with a physical switch
#define AIN1 2
#define AIN2 4
#define PWMA 5
#define STBY 9

Was genau meinst du mit "Ports" ?
Beim Uno oder Nano sind das je nach Port 8 Pins.
Vermutlich meinst du auch die Pins.

Und bei RX und TX ist es eine serielle Schnittstelle.
Bei der SoftwareSerial kannst du RX und TX auf einen beliebigen digitalen Pin legen, Ausnahme sind Pin D0 und Pin D1, das ist die UART und belegt durch den USB-Chip.

Hi

Auch haben diverse Pins spezielle Fähigkeiten - zum Beispiel PWM oder die Möglichkeit, einen (oder Einen von Mehreren) Interrupt(s) auszulösen.

Je nachdem, was die Zusatzplatinen machen sollen: Suche, Das wird Es, wenn Es Sinn ergibt, bereits irgendwie geben.
Wenn nicht, ist der Anteil Derer, Die Das brauchen, zu gering, daß sich eine 'Marktlösung' lohnt.

Viele I/Os bekommt man per Port-Expander.
Separate PWMs gibt's als separate ICs, Denen man per I²C oder SPI sagt, was Sie tun sollen - Da wäre Es natürlich gut, wenn man von den I²C / SPI-Pins die Finger lässt :wink:

Sonst: Möglich ist (fast) Alles!

MfG

HotSystems:
Bei der SoftwareSerial kannst du RX und TX auf einen beliebigen digitalen Pin legen...

ok, danke.

Kann man RX/TX für ein Modul an Pin 8 und 9, und für ein anderes Modul im gleichen Sketch an Pin 6 und 7 legen?

Und beide Module dann "nacheinander" im Sketch ansteuern?

tooooooobi:
ok, danke.

Kann man RX/TX für ein Modul an Pin 8 und 9, und für ein anderes Modul im gleichen Sketch an Pin 6 und 7 legen?

Und beide Module dann "nacheinander" im Sketch ansteuern?

Ja, du musst nur eine weitere Instanz erstellen.

Mit bestimmten Software-Serial-Bibliotheken kann ein gleichzeitiges Empfangen an mehreren RX Pins nicht möglich sein.

Wenn Du mehrere Serielle Schnittstellen brauchst dann ist ein MEGA2560 mit seinen 4 Hardware-Seriellen-Schnittstellen besser.

Grüße Uwe

HotSystems:
Ja, du musst nur eine weitere Instanz erstellen.

Kannst Du mir grob erklären was damit gemeint ist?
Danke!

@Uwe: Aber auch größer :frowning:

Mit einer zweiten Instanz startest du den entsprechenden Treiber erneut für die 2te Schnittstelle.

Wenn du deinen kompletten Sketch zeigst, können wir dir das als Beispiel auch vorgeben.

Hi

Irgendwo in Deinem Sketch 'erstellst' Du Deine Soft-Serial-Schnittstelle.
ss1=softSerial(2,3);
Wenn DU Das noch Mal machst, hast Du Zwei.
ss2=softSerial(8,9);
Wichtig ist, daß der RX-Pin der Soft-Serial ein Interrupt-Pin ist, da so die Soft-Serielle auch auf ankommende Gespräche reagieren kann, wenn Du 'ganz was Anderes' machst.
Ohne, musst Du 'genau dann zuhören' - sonst ist diese Sendung halt ungehört und weg.

MfG

Den Mega gibt's auch mit kleinem Formfaktor. Bevor ich mich mit Softserial plage würde ich darauf ausweichen.

Klaus_ww:
Den Mega gibt's auch mit kleinem Formfaktor. Bevor ich mich mit Softserial plage würde ich darauf ausweichen.

Das überlege ich wenn mein Vorhaben nicht machbar ist als nächstes.

HotSystems:
Mit einer zweiten Instanz startest du den entsprechenden Treiber erneut für die 2te Schnittstelle.

Wenn du deinen kompletten Sketch zeigst, können wir dir das als Beispiel auch vorgeben.

Es gibt noch keinen, es gibt ein paar einzelne für sich, hier die beiden die potentiell kollidieren:

MP3-Modul und ein Motortreiber für einen Schieberegler

Beim ersten sieht man die Initiirung der Seriellen Verbindung. Beim Zweiten sehe ich als Anfänger nicht auf Anhieb was da passiert.
LG
Tobias

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

// Create the mp3 module object, 
//   Arduino Pin 8 is connected to TX of the JQ6500
//   Arduino Pin 9 is connected to one end of a  1k resistor, 
//     the other end of the 1k resistor is connected to RX of the JQ6500
//   If your Arduino is 3v3 powered, you can omit the 1k series resistor
JQ6500_Serial mp3(8,9);

void setup() {
  mp3.begin(9600);
  mp3.reset();
  mp3.setVolume(20);
  mp3.setLoopMode(MP3_LOOP_NONE);

}

void loop() {
  
  if(mp3.getStatus() != MP3_STATUS_PLAYING)
  {
    mp3.playFileByIndexNumber(1);  
  }
  
}
#include <SparkFun_TB6612.h>

// Pins for all inputs, keep in mind the PWM defines must be on PWM pins
// the default pins listed are the ones used on the Redbot (ROB-12097) with
// the exception of STBY which the Redbot controls with a physical switch
#define AIN1 2
#define AIN2 4
#define PWMA 5
#define STBY 9


// these constants are used to allow you to make your motor configuration 
// line up with function names like forward.  Value can be 1 or -1
const int offsetA = 1;
const int offsetB = 1;

// Initializing motors.  The library will allow you to initialize as many
// motors as you have memory for.  If you are using functions like forward
// that take 2 motors as arguements you can either write new functions or
// call the function more than once.
Motor motor1 = Motor(AIN1, AIN2, PWMA, offsetA, STBY);
Motor motor2 = Motor(BIN1, BIN2, PWMB, offsetB, STBY);

void setup()
{
 //Nothing here
}


void loop()
{
   //Use of the drive function which takes as arguements the speed
   //and optional duration.  A negative speed will cause it to go
   //backwards.  Speed can be from -255 to 255.  Also use of the 
   //brake function which takes no arguements.
   motor1.drive(255,1000);
   motor1.drive(-255,1000);
   motor1.brake();
   delay(1000);
  }

Klaus_ww:
Den Mega gibt's auch mit kleinem Formfaktor. Bevor ich mich mit Softserial plage würde ich darauf ausweichen.

Wieso plagen....wenns richtig gemacht wird, kein Problem.

Manche haben´s halt lieber durch die Brust ins Auge, anstatt direkt ins Auge. :slight_smile:

tooooooobi:
Das überlege ich wenn mein Vorhaben nicht machbar ist als nächstes.

Es gibt noch keinen, es gibt ein paar einzelne für sich, hier die beiden die potentiell kollidieren:

MP3-Modul und ein Motortreiber für einen Schieberegler

Beim ersten sieht man die Initiirung der Seriellen Verbindung. Beim Zweiten sehe ich als Anfänger nicht auf Anhieb was da passiert.
LG
Tobias

Beim 2. Sketch sehe ich auch keine serielle Schnittstelle, also wofür eine 2. ?

Danke, jetzt wo ich weiß wonach ich suchen muss, sehe ich nach einem Blick in den includierten Code auch keine.

Die Dateien sind ja wirklich übersichtlich.

Kenne aus der PHP-Welt dass man da teilweise 500 Bildschirmseiten Code in 300 Dateien hat und es offenbar einen Preis für möglichst viele Verschachtelungen gab >:(

Vielen Dank erst mal.
Tobias