Forum: Mikrocontroller und Digitale Elektronik Arduino Serial Write


von Sebastian____ (Gast)


Lesenswert?

Hallo,
da ja hier auch einige mit Arduino programmieren kann mir vielleicht 
jemand auf die Sprünge helfen.

Schreiben auf die Schnittstelle aktuell:
1
my_serial.write(buffer, count);
2
my_serial.flush();

ich muss das flush(); loswerden da ich meine Mainschleife nicht 
blockieren will.

ich suche eine Funktion die den stream (my_serial) prüft ob da noch 
daten geschrieben werden müssen. Also in etwa so:
1
if(my_serial.bytes_to_send() > 0)
2
   return;
3
my_serial.write(buffer, 8);

Gibt es so etwas? Ich habe noch nicht viel mit dem Arduino zeug 
gearbeitet.

Gruß
Sebastian

von Konrad S. (maybee)


Lesenswert?

Sebastian____ schrieb:
> Also in etwa so:
> if(my_serial.bytes_to_send() > 0)
>    return;
> my_serial.write(buffer, 8);

Das Schreiben von buffer auf die serielle Schnittstelle ist also 
optional? Warum dann überhaupt?

von Sebastian____ (Gast)


Lesenswert?

nein, ich will erst wieder ein neues paket senden wenn das alte paket 
komplett gesendet wurde.
Diese funktion wird zyklisch im Mainloop aufgerufen.
Wenn das letzte paket noch nicht raus ist darf kein weiteres gesendet 
werden.

von Eduard S. (schneehase)


Lesenswert?

Sieht schlecht aus für dich.
Für Version <=1.5.6

In der Serial.h gibt es zwar
1
private:
2
    bool transmitting
das auf true gesetzt wird, wenn etwas gesendet wird.
Da es aber als private deklariert wurde, kannst du nicht darauf 
zugreifen. Intern wird auch ein Ringpuffer benutzt, auf den du auch 
keinen Zugriff hast.

Es bleiben dir nur drei Optionen.
1. Code ändern und in die Arduino IDE einpflegen. (am besten google 
fragen wie das geht)

2. Ein "DAS GEHT NICHT" Ticket aka "issues" bei 
http://github.com/arduino/Arduino/ erstellen und warten.
Am besten du gibst noch Beispielcode an, der nicht geht. Und verweist 
auf Arduino/hardware/arduino/cores/arduino/Serial.h

3. Irgendwas mit deinem Code machen, damit es klappt

von Konrad S. (maybee)


Lesenswert?

Bei Arduino-1.0.5 müsstest du in
 arduino-1.0.5/hardware/arduino/cores/arduino/HardwareSerial.h
das
 bool transmitting;
nach public verschieben.

von Kaj (Gast)


Lesenswert?

Sebastian____ schrieb:
> nein, ich will erst wieder ein neues paket senden wenn das alte paket
> komplett gesendet wurde.
Genau dafür gibt es Interrupts. Einfach mal in das Datenblatt des
Mikrocontrollers reinschauen. da steht alles drin, was du brauchst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.