Arduino Leonardo Serial.begin() Serial.end()

#3810824
Lesenswert?

Hallo zusammen,

ich habe ein Problem beim Programmieren meines Arduino Leonardo mit 
Serial1.begin() und Serial1.end(). Ich möchte die Serielle Schnittstelle 
sowohl als Digital Output verwenden, als eben auch als Serielle 
Schnittstelle (speziell PIN 1). Anbei erstmal der Code, bis jetzt nur 
quick&dirty geschrieben, um zu sehen ob meine Gedanken überhaupt 
umsetzbar sind:

#include <HardwareSerial.h>
#define BAUDRATE 9600
int Break = 1;

void setup() {
    //Serial1.begin(BAUDRATE, SERIAL_8N1);
    pinMode(Break, OUTPUT);      // sets the digital pin as output
}

 int start(void){
    Serial1.end();
    digitalWrite(Break, LOW);
    delayMicroseconds(13*1e6/BAUDRATE);
    return 0;
  }

void loop() {

  start();
  Serial1.begin(BAUDRATE, SERIAL_8N1);
  Serial1.write(0x55);       //SYNC
  Serial1.write(0xCF);       //PID
  Serial1.write(0x20);       //CMD
  Serial1.write(0x00);       //DATA
  Serial1.write(0x10);       //CHECKSUM
  //Serial1.end();
  delayMicroseconds(1000);


  start();
  Serial1.begin(BAUDRATE, SERIAL_8N1);
  Serial1.write(0x55);       //SYNC
  Serial1.write(0xCF);       //PID
  Serial1.write(0x61);       //CMD
  Serial1.write(0x40);       //DATA
  Serial1.write(0x8E);       //CHECKSUM

  delay(2000);
}


Das Problem besteht darin, dass ich den Pin 1 auch dazu benötige um für 
eine gewisse Zeit den PIN auf LOW zu halten und dann anschließend Daten 
über den gleichen PIN raus schicken möchte. Für den ersten Teil, also 
senden des ersten Paketes funktioniert dies auch einwandfrei, wenn das 
zweite Paket dann allerdings geschickt werden soll, fehlt sowohl das 
Delay als auch die LOW Phase, wie beim ersten Paket. Es scheint so, dass 
der Programmteil vor dem SYNC für den zweiten Teil komplett ignoriert 
wird. Dabei sollte es möglich sein, auch laut bisherigen Recherchen, die 
Schnittstelle zu schließen, als Digital PIN zu nutzen und anschließend 
mit begin, wieder als Schnittstelle.

Ich bin ehrlich gesagt etwas ratlos, da ich im Netz auch keine weitere 
Lösungsmöglichkeit gefunden habe, denn für den ersten Teil funktioniert 
es so, wie es soll.

Habt ihr eine Erklärung öder Lösung für mein Problem?

Vielen Dank im Voraus.
#3810843
Lesenswert?

Norbert Van der Heyd schrieb:
> Habt ihr eine Erklärung öder Lösung für mein Problem?

Wie wäre es damit, den PIN auf OUTPUT zu setzen, bevor Du ihn als OUTPUT 
verwendest?
1
  int start(void){
2
     Serial1.end();  // die Serial-Pins sind jetzt INPUT
3
     // (jedenfalls dann, wenn Serial1 vorher aktiv war)
4
     pinMode(Break, OUTPUT); // Pin auf OUTPUT setzen
5
     digitalWrite(Break, LOW);
6
     delayMicroseconds(13*1e6/BAUDRATE);
7
     return 0;
8
   }
(Firma: Vescomp) #3810844
Lesenswert?

Norbert Van der Heyd schrieb:
> Habt ihr eine Erklärung öder Lösung für mein Problem?

 Kann nur raten:
1
 int start(void){
2
    Serial1.end();
3
///////////////////////////////////////
4
    pinMode(Break, OUTPUT);      // sets the digital pin as output
5
//////////////////////////////////////
6
    digitalWrite(Break, LOW);
7
    delayMicroseconds(13*1e6/BAUDRATE);
8
    return 0;
9
  }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren