Array Problem - Allgemeines Problem mit if in Verbindung von einem A-Sensor

So iPhone App läuft jetz stabil mit folgenden werten: ein Punkt 0.5, eine Pause (zwischen Zeichen) 0.5 , ein Strich 1,5 und zwischen Wörtern auch 1,5 Pause (alles in Sekunden Angabe)

Da mach ich am besten alles was über 450 ms usw ist, da ich wahrscheinlich nicht in die bedingung " == 500 " schreiben kann was den äußeren Umständen echt weng hoch angerechnet währe wenn der exakt 500 messen würde :smiley:

Jedenfalls hab ich noch eine Idee zum speichern der Werte:

Wir haben ja schon Byte x = 0b10101 = .-.- = Buchstabe (das ist die Methode von Michael_x)

Könnte man es nicht einfach so machen, dass man byte x = 0b1 initialisiert und dann bei wert 1 eine 0 hinten dran hängt und bei wert 2 eben eine 1.

Sprich sowas

x = x "+ 1" bzw "+ 0";

Nur will ich nicht den wert um eines erhöhen sondern hinten dran hängen. Das wird mit einem normalen Plus auf diese Weise nicht funktionieren ^^

Hab mich mal zu 2D Arrays kurz schlau gemacht, aber noch ein bis 2 fragen:

Am anfang muss man einen Datatype angeben, jedoch wird in den Zwei Ebenen ja jeweils ein anderer datatype verwendet (int bzw byte und char (für die buchstaben) )

Wie muss ich den dann definieren? Und in die erste Ebene schreibe ich dann meine Byte stränge rein. Nur werden dann bei zum beispiel bei dem buchstaben "e" der Byte strang so aussehen : x = 0b10 ;

Das kommt dann in meine morsetabelle und wird am besten gleich so ausgegeben (??):

byte x = 0b1;
if (wert == 1){     // steht für punkt aus spaceball's idee zu den millis()
   x = x "+ 0";      // hinten dran hängen
}
Serial.print(morsetable[x]);

So sollte das Prinzip ausschauen:

Bei kurzen pausen wird einfach hochgezählt und eventuell bei über 4 ein Fehler ausgegeben.
Bei dreifacher Pause (nächstes Wort) Wird ein Befehl gegeben den Byte strang auszuwerten und zu Printen.
und bei Fünffacherpause wird eine neue Zeile Begonnen bzw Die Übertragung beendet, falls es über 4 sec lang sein sollte

Bräuchte jetz erstmal nur die Sache mit den Bytes und wie ob das so mit dem 2D Array funktioniert wie ich es in meinem kleinen Sample versucht habe zu veranschaulichen. :slight_smile:

Gruß
Flo

EDIT:

mein 2D Array schaut nun so aus: bei DIM_0_SIZE und DIM_1_SIZE wird wahrscheinlich die länge des Alphabets rein gehören? (--> 26)

byte char array [DIM_0_SIZE] [DIM_1_SIZE] = {
   //as many vals as dim1
  {0b101, 0b11000, 0b11010, 0b1100, 0b10, 0b10010, 0b1110, 0b10000, 0b100, 0b10111, 0b1101, 0b10100, 
0b111, 0b110, 0b1111, 0b10110, 0b11101, 0b1010, 0b1000, 0b11, 0b1001, 0b10001, 0b1011, 0b11001, 0b11011, 0b11100},
  {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z}//as many rows as dim0
};