Hallo,
ich bin absolut neu in der Arduino-Welt und versuche grade ein Projekt mit einem Arduino Yun zu realisieren.
Ich habe hier ein Gerät welches über 10 Bit TTL Signale gesteuert wird. Nun soll dem Arduino über UDP ein Wert (in dem Fall eine Phasenverschiebung) geschickt werden.
Wenn ich nun z.b. 12° Phasenverschiebung über UDP an den Arduino sende (Auflösung sind 0,35°) soll dieser am Digital Out, wo dann die 10 Leitungen angeschlossen sind PIN 2 und PIN 6 auf High schalten. Er muss quasi 0000100010 ausgeben.
Das mit dem UDP Read bekomme ich soweit hin. Wie kann ich dem Arduino am einfachsten beibringen das er den Grad-Wert direkt umrechnet und als 10 Bit Code ausgibt?
Ich sende ihm 0,35°, er macht daraus 0000000001
Ich sende ihm 0,7°, er macht daraus 0000000010
Ich sende ihm 1,4°, er macht draus 0000000011 usw.
Danke für eure Hilfe!
http://www.arduino.cc/en/Guide/ArduinoYun:
The Arduino Yún is an Arduino board unlike any other.
Daher gibt es auch ein eigenes Unter-Forum hier.
Du willst 10 Bit parallel ausgeben? Na gut, die ändern sich nicht vollkommen gleichzeitig, aber das ist ok ?
Über UDP kriegst du einen Text. Den kannst du in eine Gleitkommazahl wandeln und durch eine andere Gleitkommazahl ( z.B. 0.35 ) dividieren. Das Ergebnis kannst du in eine Integerzahl wandeln. (Rundungfehler !)
Danach ist es einfach:
pinMode(Pin0, OUTPUT);
...
digitalWrite(Pin0, value & bit( 0 );
Oder in einer Schleife, falls bit 0 auf Pin1 und die anderen fortlaufend belegt sind:
for (int i = 0; i < 10; i++) digitalWrite(i+1, value & bit(i));
Ob das insgesamt das macht was du wirklich willst, weiss ich nicht.
Ich habe mich mich mit Yun noch nicht beschäftigt, kann dir also bei deinen 10 Bit Ausgabe nur allgemein Tips geben.
Die 10 Bit Ausgabe könntest du - ungeachted des Systems - mit zwei 8 bit Shiftregistern realisieren. zB SN74HC595N.
Dann würden auch auch alle Bits synchron geschaltet.
Statt die Zahlen als floats zu übertragen und an der Empfangsstation in das Bitmuster zu verwandeln, würde ich das Muster auf dem Sender ermitteln und dann als integer übertragen. Die Kleinen können meist nicht gut (und sehr langsam) mit floats arbeiten.
Die Umrechnerei würde ich in der sendenden Applikation unterbringen und den Arduino nur als "dummes" UDP-Digital-Interface benutzen. Dann musst du ihn auch nicht immer umflashen, wenn sich die Anforderungen mal ändern ...