Milestag Integration

Guten Abend liebes Forum,
derzeit arbeite ich an einem Lasergame Projekt, was den Milestag Standart benutzen soll.
Dafür werden zwei byte an Daten über eine Infrarotschnittstelle Übertragen.
Hier ist die genaue Erklärung: http://www.lasertagparts.com/mtformat-2.htm.
Nun weiß ich leider nicht, wie ich diese Daten übertragen soll..
Ich habe mir bereits überlegt, sie Seriell zu übertragen, aber ich bin mir nicht sicher, wie ich das bewerkstelligen soll. Ich bin beim stöbern auf die Serial.write(); Funktion gestoßen.
Damit müßte es doch eigentlich klappen, oder?
Über eure Hilfe wäre ich sehr dankbar.

MfG
Zanto

Nein, Serial.write bringt dir in diesem Fall nichts. Die genannten Frequenzen stehen in Analogie zur Pausenzeit der Puls-Längen-Modulation. Wie man schön im Diagramm sehen kann, läuft die Datenübertragung ganz trivial ab:

  • Übertragung des Headers: 2400 µs High-Pegel
  • Pause: 600 µs Low-Pegel
  • Datenbit: 600 µs High-Pegel für eine 0, 1200 µs-High-Pegel für eine 1
  • Pause: 600 µs Low-Pegel
  • nächstes Datenbit]

Ist schnell nachzubauen, wenn man das mit Delays löst.

Ok, das werde ich mal versuchen.
Das heißt also, ich muss erst mit einem Timer eine 38/40/56 kHz Frequenz erzeugen, also als Carrier Signal
und dann einfach an einem Pin mit digital.write() und ein paar Delays dazwischen meine Bits ausgeben?
Dann habe ich nur noch eine Frage: Wie kann ich dann für System Data Packets die Hex Codes übertragen? Also zum Beispiel 0x83?

Vielen Dank schonmal :slight_smile:

Ich würde dazu keinen Timer verwenden, sonst aber genau den Ansatz digitalWrite in Kombination mit Delays verwenden.

Die Hexadezimalcodes würde ich auf binär umrechnen und dann wie beschrieben verschicken.

Ok so werde ich das mal probieren..
Gibt es zufällig eine Library zum Umwandeln von Hex nach Bin?
Oder einen ganz ganz simplen Algorithmus? Im Allgemeinen kann ich das auch, bin nur ein bisschen
schreibfaul :smiley:

lg

Ok ich habe eine bessere Lösung:
Anstatt die Hex Codes zu speichern und daraus die Bin Codes berechnen zu lassen, speichere ich lieber direkt die Bin Codes :slight_smile:
Und ich suche seit Stunden seit einer leichten Lösung...
Naja danke für eure Hilfe :slight_smile:

lg
Zanto

Du kannst dir doch zum Beispiel ein Highbyte und ein Lowbyte als byte deklarieren und dann mit der Funktion
bitWrite() bzw. bitRead() die Bytes "manipulieren". Dann hast du ja deine beiden Datenbytes. Mit bitRead() liest du die einzelen Bits aus und schickst die dann entsprechend moduliert "weg".