Forum: PC-Programmierung Bluetooth Verbindung read() write() Problem


von Alex (Gast)


Lesenswert?

Hallo,

ich habe einen µC mit einem Bluetooth Modul verbunden und versuche jetzt 
mit meinen PC über Bluetooth mit dem µC zu kommunizieren. Ich verwende 
einen Bluetooth Manager um einen virtuellen Port zu erstellen, denn ich 
mit meinem C Programm öffne.
Betriebssystem ist Linux.
Funktioniert auch alles gut soweit.
Das Problem ist, dass ich als Antwort immer das Ergebnis der letzten 
Anfrage erhalte.
In meinem Code Beispiel weiter unten:
Ich SOLLTE bei einer "1" ein "okay" bekommen, bei allem anderen ein "X".
Ich schreibe eine "1" bekomme ein "X", schreibe eine "2" bekomme ein 
"okay", schreibe wieder eine "2" bekomme ich ein "X", "1""X", "1" 
"okay"...
Ich hoffe ihr versteht was ich meine :)
Der Fehler liegt sehr wahrscheinlich auf der Seite des PC's, da mit 
"minicom" alles bestens funktioniert.

Ihr mein Source code, der auf dem PC läuft:
1
#define PORT "/dev/rfcomm1"
2
3
#define FALSE 0
4
#define TRUE 1
5
6
volatile int STOP=FALSE;
7
8
int main()
9
{
10
  int fd, res;
11
  char buf[255] = {0};
12
  char test[]= {0}; //"123456789";
13
  unsigned char input = 0;
14
  int count = 0;
15
  char dummy[255];
16
17
  fd = open(PORT, O_RDWR | O_NOCTTY );
18
  if (fd <0) {perror(PORT); exit(-1); }
19
20
21
 while (STOP==FALSE) {
22
23
   printf("Type 1 for 'okay' as answer, anything else for 'x': ");
24
   fgets(buf, 3, stdin);
25
   sscanf(buf, "%c", &input);
26
   printf("The sign : %c\n",input);
27
   while ( getchar() != '\n' ) sscanf(buf, "%c", dummy);
28
   write(fd, &input, 1);
29
30
   res = read(fd,buf,255);
31
   printf("%s\n", buf);
32
    }
33
34
    return 0;
35
}

Hier der Code auf dem µC:
1
int
2
main (void)
3
{
4
5
  UART_init();
6
  unsigned char test = '0';
7
8
  while(1){
9
10
    test = USART_Receive();
11
12
    wait20ms();
13
14
    if(test == '1'){
15
      USART_Transmit('O');
16
      USART_Transmit('k');
17
      USART_Transmit('a');
18
      USART_Transmit('y');
19
      USART_Transmit(0);
20
    }
21
    else{
22
      USART_Transmit('X');
23
      USART_Transmit(0);
24
    }
25
26
27
  }
28
}

Vielen Dank

von Tobi L. (derarzt)


Lesenswert?

Also die frage ist zwar schon relativ alt aber ich versuch trotzdem mal 
zu antworten^^ich habe mir den sourcecode auf dem mikrocontroller 
angeschaut und spontan würde ich sagen es liegt an den 20ms

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.