Zytronic touchsensor auslesen

Update 19.05.17

Hallo Zusammen,

ich versuche seit Tagen etwas vernünftiges aus meinem Touchsensor raus zu bekommen, ich bin aber schlicht doof dafür.
Die Daten passen einfach nicht zu dem was ich eigentlich erwarte, könnt ihr euch das mal bitte ansehen?

Aufbau ist einfach:
An meinen Raspberry ist mein Arduino angeschlossen der die aufbereiteten (Zyx100 Chip von Zytronics) Signale vom Touch Sensor empfängt.

Das ist was ich erwarte:

0000000: 02 0b 68 3f 07 fe 07 9d 09 00 df ad 03  ..h?.........
000000d: 02 0b 68 3f 07 fe 07 9d 09 00 df ad 03  ..h?.........
000001a: 02 0b 68 3f 07 fe 07 9d 09 00 df ad 03  ..h?.........
0000027: 02 0b 68 3f 07 fe 07 9d 09 00 df ad 03  ..h?.........
0000034: 02 0b 68 3f 07 fe 07 9d 09 00 df ad 03  ..h?.........
0000041: 02 0b 68 3f 07 fe 07 9d 09 00 df ad 03  ..h?.........
000004e: 02 0b 68 3f 07 fe 07 9d 09 00 df ad 03  ..h?.........
000005b: 02 0b 68 3f 07 fe 07 9d 09 00 df ad 03  ..h?.........
0000068: 02 0b 68 3f 07 15 08 8c 09 00 91 da 03  ..h?.........
0000075: 02 0b 68 3f 07 17 08 8a 09 00 b2 2c 03  ..h?.......,.
0000082: 02 0b 68 3f 07 1a 08 88 09 00 a8 63 03  ..h?.......c.
000008f: 02 0b 68 3f 07 1d 08 86 09 00 7d 1f 03  ..h?......}..
000009c: 02 0b 68 3f 07 20 08 83 09 00 19 d9 03  ..h?. .......

wobei mich nur der HEX Code in der interessiert.

Mein Code sieht im Moment so aus:

#include <SoftwareSerial.h> // befehle anpassen...

SoftwareSerial myserial(10, 11);
int incomingByte = 0;   // for incoming serial data
void setup() {
  Serial.begin(115200);
        myserial.begin(115200);     // opens serial port, sets data rate to 9600 bps
}

void loop() {
char buffer [26];
int i;
//
 // 

        // send data only when you receive data:
        if (myserial.available() > 10) {
          for (i = 0; i < 11; i = i + 1) {
           //Serial.println(buffer[i]);
                // read the incoming byte:
              incomingByte = myserial.read();
        //  delay (1);
       // sprintf(&buffer[i*2],"%x",incomingByte);
         // buffer[i] = incomingByte;
        Serial.print(incomingByte, HEX);
         Serial.print(" ");
        }
      // itoa (incomingByte,buffer,16);
 
          //Serial.println(buffer);
                // say what you got:
               // Serial.print("I received: ");
               // Serial.print(incomingByte, HEX);
             Serial.println("");


        }
}

Das Ergebnis macht zwar einen guten Eindruck die Werte sind aber nicht die die ich erwarte und sie sind auch nicht richtig stabil die Anzahl Bytes variiert (was sie nicht tun sollte):

5F EF 4 F9 43 8F B5 FF 87 40 0 
5F EF 4 78 43 8F B5 FF 87 40 0 
5F EF 4 78 8B D7 EE BB 80 1F 0 
5F EF 4 F9 A3 87 BB C3 2B 0 5F 
EF 4 F9 69 91 BB 35 AA 1F 0 5F 
EF 8 F9 9B 57 D5 FF B7 F1 0 0 
5F EF 4 78 8E 77 D9 FF 93 CA 0 
5F EF 4 78 91 B7 AB FF A6 93 0 
5F EF 4 78 95 D7 AB FF A9 C9 0 
5F EF 4 F9 48 CF 6B FF A9 20 0 
5F EF 4 F9 8B 17 F5 C5 AA 1F 0 
5F EF 4 F9 8E F7 F7 FB 91 0 5F 
EF 4 F9 A4 FB BB 8F 25 0 5F EF 
4 F9 94 17 B8 FF B0 94 0 5F EF 
4 F9 6B 5 F7 74 8E 1F 0 5F EF 
4 F9 4E 2F 78 FF 9D 97 0 5F EF 
4 F9 A2 97 B8 FF B3 24 0 5F EF 
4 F9 50 EF 78 FF 2F F2 0 0 5F 
EF 4 F9 AF 17 B8 FF 88 91 0 5F

Wenn ich das gleiche Programm über den PC laufen lasse, bekomme ich ähnliche Werte, aber die hier konstanten Werte ist nicht die selben.

Vermutlich ist das Thema nicht so kompliziert, für mich ist das allerdings alles sehr neu.

Vielen Dank im Voraus

mark14:
...Aufbau ist einfach...

...Vermutlich ist das Thema nicht so kompliziert, für mich ist das allerdings alles sehr neu.

Vielen Dank im Voraus

Bitte gerne.

Wenn es einfach ist und nicht kompliziert, wieso bekommst du es nicht hin ?

Was soll der Raspi und was soll der Arduino machen ?

Warum postest du keinen Link deines Sensors, damit ersparst du uns das Suchen und wir sehen auch den richtigen Sensor.

Der Raspi wird später Broker im MQTT Netzwerk.
Hier ist der Link zum Chip des Sensors (ZXY100 serial) = Drivers, Manuals & Data Sheets - Zytronic UK

mark14:
Hier habe ich einen Code gefunden der mir die Daten zwar im falschen Format ausgibt es mir aber so scheint als ob die Zeichenfolge ein vernünftiges Muster ausgibt, ich aber den code nicht recht verstehe und ihn daher nicht anpassen kann.

Dann schau doch nach ob die Daten korrekt sind:

void setup() {
  Serial.begin(115200);
}

void loop() {
  static char buffer[33];
  int laenge = (readline(Serial.read(), buffer, sizeof(buffer)));
  if (laenge > 0) {
    Serial.print(F("in: ["));
    Serial.print(laenge);
    Serial.write(']');
    for (byte i = 0; i < laenge; i++) {
      Serial.write(' ');
      if (buffer[i] < 16) {
        Serial.write('0');
      }
      Serial.print(buffer[i], HEX);
    }
    Serial.print(F(" '"));
    for (byte i = 0; i < laenge; i++) {
      Serial.write(buffer[i] < ' ' ? '.' : buffer[i]);
    }
    Serial.println(F("'"));
  }
}

int readline(int readchar, char *buffer, int len) {
  static int pos = 0;
  int rpos;

  if (readchar > 0) {
    switch (readchar) {
      case '\n': // Ignore new-lines
        break;
      case '\r': // Return on CR
        rpos = pos;
        pos = 0;  // Reset position index ready for next time
        return rpos;
      default:
        if (pos < len - 1) {
          buffer[pos++] = readchar;
          buffer[pos] = 0;
        }
    }
  }
  // No end of line has been found, so return -1.
  return -1;
}
in: [12] 54 65 73 74 20 4D 65 73 73 61 67 65 'Test Message'

Es stellt sich heraus dass das Signal so unsauber war dass der Arduino es nicht richtig verstanden hat. Mit einem MAX232 und einigen Kondensatoren war das Thema zu lösen.

Danke
Gruß