Go Down

Topic: Array Problem - Allgemeines Problem mit if in Verbindung von einem A-Sensor (Read 2 times) previous topic - next topic

spaceball

.... einen hab ich noch.....  ;-)
Eigentlich sind bei analogRead<=100 3 Zustände vonnöten:
<300 Zeitspanne zwischen einem Piep und dem nächsten
300-2000 Leerstelle, löst gleichzeitig einen Abgleich der letzten Signale mit dem Zeichen-Array aus. Ausgabe des Zeichens mit Serial print
>2000 Zeilenumbruch

Gruß
Reinhard


mrlowalowa

@michael_x:

Da geb ich dir Recht :D Wäre nur schön gewesen, da ich ein solches Zeichen in meinem Name trage und das dann noch ne Spur eindrucksvoller wirken würde :P (ist aber wie gesagt nur eine Spielerei ;) )

Das Object kommt eben vom iPhone App programmieren. Aber mir ist auch gerade aufgefallen, dass ich gar nicht mit Objekten zu tun habe (sprich [blablalba] ).


Ich versteh nicht, was du auf dem Arduino speichern willst:
Nach der Zeichen-Pause kannst du ein Zeichen dekodieren und ausgeben.
Bei der Wort-Pause gibst du ein extra Leerzeichen aus.
Bei der Satz-Pause gibst du ein extra Newline  ( '\n' )
Nach 10 Pausen Ruhe ( oder eher deutlich später ) kommt "Übertragung beendet".
Arduino hat und braucht hierfür kaum Speicher.


Was ich Speicher will ist das was du auch vergessen hast oder ich den vielleicht selbstverständlichen Weg nicht weiß.

Um die Zeichenfolge " . . - " entschlüsseln zu können musst du die Zeichenfolge erst einmal Speichern bzw zusammen schieben.

Das stelle ich mir nun aber eher "einfach" vor. Man könnte einen Array mit 4 bzw 3 (wegen der 0 Speicherfläche ?? ) erzeugen und mit 0 o.ä. füllen. Wenn jetz ein Punkt kommt den Platz mit 1 vollschreiben und bei Strich eben mit 2. Um dann etwas zusammen geschobenes auszugeben lässt man die Nullen eben "fallen" und schreibt den Array dann wieder mit Nullen voll damit kein Fehler für die nächsten Zeichen übrig bleibt.



@spaceball:

Danke für deine Überlegungen! Die werde ich auch mal ausprobieren! ;)
int sensorValue hast du anscheinend initialisiert aber nie gebraucht und kann deshalb weggelassen werden?

millis() - time verstehe ich auch nicht so ganz vom Prinzip her. Dachte time = millis() .

Das wäre ja dann das gleiche wie " x - x " und das ist immer null.

Von daher müsste man 2 unterschiedliche Zeiteinheiten parralel laufen lassen und deren Differenz würde dann dem hier entsprechen oder sehe ich das falsch?

Ich frage mich nur wann dann die andere Zeit einheit anfagen soll. Da man dann aufgrund der schon gelieferten Zeichensätze zusätzlich Zeit mit einberechnen müsste, welche ja variieren und daher meinen Ausgaben am Schluss noch ein verbrauch_time = XY machen müsste abhängig von den punkten und Strichen.


Danke auf jedenfall schon mal euch beiden für eure Super Unterstützung!!!! :) :) :)


Gruß
Flo

MaFu

millis() liefert die Anzahl der Millisekunden zurück, die seit dem starten des Arduino vergangen sind. Daher ändert sich der Wert ständig.
Mit time = millis() merkst Du dir den aktuellen Wert. Mit millis() - time bekommst Du die Millisekunden, die seit dem Merken vergangen sind.
_______
Manfred

spaceball

Hallo mrlowalowa,
tja, das sensorValue ist wirklich  umsonst. Hatte ich am Anfang anstatt "signal" gedacht.

time= millis();
damit nehme ich den aktuellen Wert der hochgezählten Zeitvariablen ( wie von MaFu beschrieben... Danke! ).
Dann warte ich mit der while-Schleife solange, bis sich der Sensorzustand von Licht zu Dunkel oder umgekehrt ändert und lese dann noch mal die Zeítvariable aus.
Nun ergibt die Differenz die Länge des Signals: entweder des Lichtsignals oder der Pause!
Somit kann ich auch gleich zwischen Kurz oder Lang und zwischen Leerzeichen, Zeilenumbruch und "Signalzwischenraum" unterscheiden.

Natürlich bleibt das Programm in der while-Schleife hängen, solange sich  der Sensorzustand nicht ändert.
Dies sollte aber in Deinem Fall kein Problem darstellen.

Wegen dem Array:
Wenn ich meinem Beispiel folge, würde die 0 den Vergleich starten, der die gespeicherte Signalfolge mit der in einem mehrzeiligen 2D-Array gespeicherten Buchstabentabelle abgleicht und darin den entsprechenden Eintrag ermittelt.
Das Array müßte Byte entsprechen, da es 2 Signal-Zustände  gibt (Kurz und Lang) und eben noch den "da kommt nichts mehr Zustand" (Array-Wert = z.B. 255 oder auch 0 ...), falls die Morsetabelle nur ein kurzes Piep verlangt...

Gruß
Reinhard

PS.: Ich entschuldige mich im Voraus, falls meine grauen Zellen meine Überlegungen etwas verwirrend formuliert haben sollten, aber um 1:40 Uhr und nach mehreren Geburtstagsfeierbierchen läufts einfach nicht mehr ganz so rund....
XD

uwefed


Go Up