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.