Mehrere Serial.begin() ?

Hi zusammen,

ich mache Dank der Hilfe der Community stätig Fortschritte mit meinem Projekt. Ich möchte, dass beim Auslösen eines Lichtsensors eine Kamera beginnt zu filmen und mich per SMS benachrichtigt.
Das SMS senden geht, die Photodiode auch. Nur benötigt das GSM-Modul zum Senden einer SMS eine Baudrate von 19200 und die Photodiode eine Baudrate von 9600.
Ist es dennoch möglich beide Baudraten mit einem Arduino zu kombinieren ?

Bild zum Überblick des Projekts habe ich mal angehangen.

Danke für eure Hilfe :wink:

die Photodiode eine Baudrate von 9600

Wie das ?

(Auf dem Photo kann ich ohne Mühe nicht allzu viel erkennen)

Hallo,

ja, du kannst beliebig wechseln.

Serial.begin(9600);
Serial.print ......
......
Serial.flush();
Serial.end();

Serial.begin(19200);
Serial.print ......
......
Serial.flush();
Serial.end();

So bekomme ich die Werte von der Photodiode. Falls es besser geht lass ich mich da gerne eines besseren belehren :wink:

int licht;


void setup() {
 Serial.begin(9600);
 pinMode(13,OUTPUT);
}

void loop() {
  licht = analogRead(0);
  Serial.println(licht);

Doc_Arduino:
Hallo,

ja, du kannst beliebig wechseln.

Serial.begin(9600);

Serial.print ......
......
Serial.flush();
Serial.end();

Serial.begin(19200);
Serial.print ......
......
Serial.flush();
Serial.end();

Danke, nach sowas habe ich gesuchtr :). Es ist aber nicht möglich beide Baud-Raten parallel laufen zu lassen, oder ?

Hi

Verschiedene Frequenzen sind ja durchaus möglich - nur wird sich dadurch die Verkabelung nicht verändern.
Da 'die Serielle' kein Bus ist, wirt dort jeweils nur ein Teilnehmer dran angeschlossen sein dürfen - entweder der PC für die seriellen Ausgaben, oder das GSM-Shield.
Das kannst Du aber z.B. via Soft-Serial erreichen - bei 9600 Baud ist Das drin.
Wofür braucht die Photo-Diode eine serielle Verbindung?

MfG

Edit
Was meinst Du mit parallel?
An einer Leitung können nur zwei Teilnehmer hängen, Die miteinander schwätzen.
Arduino & PC
Arduino & GSM
PC & GSM
Viel mehr als EINE Geschwindigkeit hast und brauchst Du Da nicht.

Du kannst natürlich für beide Sketche die gleiche Geschwindigkeit nehmen. Am besten die, die du auch am SerialMonitor der IDE einstellst.

Serial.end(); braucht man normalerweise nicht

Sternflotte:
Es ist aber nicht möglich beide Baud-Raten parallel laufen zu lassen, oder ?

Überlege nochmal bitte selbst. Kannst du mit deinem Fahrad, Moped, Auto zur gleichen Zeit unterschiedlich schnell fahren? Alles klar? :wink: Du kannst auch nicht beide Geräte an die gleiche serielle Leitung anschließen. Das mag vielleicht zufällig funktionieren. Gesichert ist das nicht.

Mit UNO kannst du jedoch die 9600 Baud mit einer software Seriellen erzeugen. serielle Software Lib.
Dann bekommt jedes Device seine eigene Schnittstelle. Der Ablauf von alldem ist dennoch serial, also nacheinander. Maximal eine kleine Überlappung ist möglich, wenn die hardware serielle ihren Puffer abarbeitet.

Stimmt Michael, dafür hier ist Serial.end überflüssig. :slight_smile:

kurzes Update: Ich konnte beide mit einer Baud-Rate von 19200 laufen lassen.
Ich dachte eine Kommunikation mit der Photodiode wäre nur möglich, mit der 9600- Baud-Rate.

Falls es jemanden interessiert, habe ich mal hier den Code hochgeladen, danke nochmal für die Hilfe:

#include <SoftwareSerial.h>

// Configure software serial port

SoftwareSerial SIM900(7,8);


int licht;


void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200);
  // Give time to your GSM shield log on to network
  delay(20000);

  Serial.begin(19200);
 // Pin der Kamera
 pinMode(12,OUTPUT);
 // Pin des Lichtsensors
 pinMode(13,OUTPUT);
}

void loop() {
   licht = analogRead(0);
  Serial.println(licht);
  delay(250);
  // Für Testzwecke 250ms Delay, für Normalbetrieb geringer bis gar keinen Delay
  

  if (licht>700){
    digitalWrite(13,HIGH);
    digitalWrite(12,HIGH);
    delay(700);
    digitalWrite(12,LOW);
    sendSMS();
     // Duration of filming
    delay(10000);
    // Turn OFF Camera
    digitalWrite(12,HIGH);
    delay(700);
    digitalWrite(12,LOW);
    licht = analogRead(0);
  }
  else{
    digitalWrite(13,LOW);
  }

}


void sendSMS() {
  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);

  // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
  SIM900.println("AT + CMGS = \"+49152XXXXXX\""); 
  delay(100);
  
  // REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
  SIM900.println("Sensor ausgeloest"); 
  delay(100);

  // End AT command with a ^Z, ASCII code 26
  SIM900.println((char)26); 
  delay(100);
  SIM900.println();
  // Give module time to send SMS
  delay(5000); 


}

Sternflotte:
kurzes Update: Ich konnte beide mit einer Baud-Rate von 19200 laufen lassen.
Ich dachte eine Kommunikation mit der Photodiode wäre nur möglich, mit der 9600- Baud-Rate.

analogRead benutzt keine serielle Schnittstelle, die ursprünglichen 9600 Baud steuerten die Druckausgabe,
hatten also mit dem Sensor nichts zu tun.

Sternflotte:
So bekomme ich die Werte von der Photodiode. Falls es besser geht lass ich mich da gerne eines besseren belehren :wink:

int licht;

void setup() {
Serial.begin(9600);
pinMode(13,OUTPUT);
}

void loop() {
  licht = analogRead(0);
  Serial.println(licht);

Da verwechselt du was.
Im Setup definierst du dass wenn irgendwann mal ein Befehl für die serielle Schnittstelle kommt diese dann mit 9600 die Daten übertragen soll.

Im Loop liest du einen analogen Eingang ein und weist den Wert der Variabel "Licht" zu.
Dann sagst du der seriellen Schnittstelle den Inhalt der Variabel "licht" zu übertragen und das passiert hat dann mit 9600 als Übertragungsrate.

Das Einlesen des analogen Kanals hat mit der der seriellen Übertragung überhaupt nichts zu tun und funktioniert auch ohne den Wert der variabel "licht" zu übertragen.