[c++] gedonder met strings

Pagina: 1
Acties:

  • Zynth
  • Registratie: September 2001
  • Laatst online: 29-07 15:30
ik ben geloof ik weer eens een beetje chagerijnig >:)
Ik ben aan het proberen mijn seriele lcd aan te sturen.
hiervoor had ik op internet een programmaatje in C gevonden.

daarmee kon je als volgt naar het display schrijven:
write(fd,"DE TEKST",aantal-tekens-in-tekststring);
Dit werkt perfect.
Het display ondersteunt ook speciale commando's, als:
\001, \002, etc...
deze sturen dmv: write(fd,"\001",1);
gaat ook perfect.

Maar nu heb ik dit programma geïntegreerd in een socket-programma:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include    <stdio.h>
#include    <sys/types.h>
#include    <sys/stat.h>
#include    <termios.h>
#include    <unistd.h>
#include    <errno.h>
#include    <fcntl.h>

#include "ServerSocket.h"
#include "SocketException.h"
#include <string>

int main ( int argc, int argv[] )
{
  int fd;
  std::cout << "running....\n";

//LCDTEST
struct termios termios;
   
   
    fd=open("/dev/ttyS0",O_WRONLY|O_EXCL);
    if (fd==-1) exit(1);
    if (tcgetattr(fd,&termios)==-1) exit(1);
    cfmakeraw(&termios);
    cfsetospeed(&termios,B19200);
    if (tcsetattr(fd,TCSANOW,&termios)==-1) exit(1);
    usleep(850000);
//  write(fd,"\004\024\030",3); /* hide cursor/wrap=off/scroll=off */
    write(fd,"\004\023\020",3); /* hide cursor/wrap=off/scroll=off */
//EOF LCDTEST   
   
  try
    {
    // Create the socket
    ServerSocket server ( 30000 );

    while ( true )
    {

      ServerSocket new_sock;
      server.accept ( new_sock );

      try
        {
        while ( true )
        {
          std::string data;
          new_sock >> data;
        write(fd,data.c_str(),1);
        }
        }
      catch ( SocketException& ) {}

    }
    }
  catch ( SocketException& e )
    {
    std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
    }

  return 0;
}

in dit stukje:
code:
1
2
3
          std::string data;
          new_sock >> data;
        write(fd,data.c_str(),2;

wordt een string van het netwerk opgevangen en in de string data gegooid.
vervolgens gooit write het naar het lcd.

maar nu komt het:
Het versturen van strings gaat goed.
Maar het versturen van commando's gaat fout.
Ik heb "het aantal tekens in de string" even op 1 gezet, zodat ik een commando kon testen.
Als ik \004 stuur, dan komt er in de string data netjes \004 te staan.
maar hij voert dat gewoon niet goed uit naar het display.

waarom niet!!!??? :P

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Als de LCD letterlijk een "\" verwacht dan moet je dit meesturen "\\001", een dubbele black-slash dus.
Een \0 is namelijk het einde van een string, dus als je dit in een string stopt zal de rest niet mee worden genomen.