Avant tout, lisez le manuel de programmation (vous pouvez le trouver sur la page dedocumentation). Quelques exemples de programmes en C/C++ son décrit sur ces pages :
Linux, gcc. PowerAnt de type SwSe. Allume et éteint les leds une part une.
#include <stdio.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include <termios.h> #include <unistd.h> void init_raw_tty( int fd ){ struct termios newtio; bzero(&newtio, sizeof(newtio)); newtio.c_cflag = B9600 | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; /* set input mode (non-canonical, no echo,...) */ newtio.c_lflag = 0; newtio.c_cc[VTIME] = 10; newtio.c_cc[VMIN] = 0; tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); } FILE * powerants; int powerants_int; void printAnswer( void ){ int inCh; do { inCh = fgetc(powerants); if( inCh > 0 ){ //printf("%c",inCh); } else { printf("x"); fputc(0x1B,powerants); fflush(powerants); tcdrain(powerants_int); fprintf(powerants,"?%\r"); fflush(powerants); tcdrain(powerants_int); }; } while( inCh != 0x0D ); } int main( int ArgC, char * ArgV[] ){ powerants_int = open("/dev/ttyS1",O_RDWR | O_NOCTTY ); if(! powerants_int ){ fprintf( stderr, "ERROR: (open) %s\n", strerror( errno ) ); return -1; }; init_raw_tty( powerants_int ); powerants = fdopen( powerants_int, "w+b" ); fprintf(powerants,"%c",0x1B); // Clear PowerAnt input buffer fprintf(powerants,"??\r"); printAnswer(); fprintf(powerants,"=ABCDEFGH\r"); printf("=ABCDEFGH\n"); printAnswer(); char ltr = 'A'; char ltr2 = 'a'; int x = 3600; while( x-- ){ fprintf(powerants,"=%c\r",ltr); //printf("=%c\n",ltr); printAnswer(); //usleep( 1 ); fprintf(powerants,"=%c\r",ltr2); //printf("=%c\n",ltr2); printAnswer(); //usleep( 1 ); ltr++; ltr2++; if( ltr > 'H'){ ltr = 'A'; ltr2 = 'a'; }; }; return 0; };
Linux, gcc. PowerAnt de type SwSe. Fait clignoter l'ensemble des leds. Le programme est trop rapide et l'utilisateur verra les leds toujours allumées :). .
#include <stdio.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include <termios.h> #include <unistd.h> void init_raw_tty( int fd ){ struct termios newtio; bzero(&newtio, sizeof(newtio)); newtio.c_cflag = B9600 | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; /* set input mode (non-canonical, no echo,...) */ newtio.c_lflag = 0; newtio.c_cc[VTIME] = 10; newtio.c_cc[VMIN] = 0; tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); } FILE * powerants; int powerants_int; void printAnswer( void ){ int inCh; do { inCh = fgetc(powerants); if( inCh > 0 ){ printf("%c",inCh); } else { printf("x"); }; } while( inCh != 0x0D ); } int main( int ArgC, char * ArgV[] ){ powerants_int = open("/dev/ttyS1",O_RDWR | O_NOCTTY ); if(! powerants_int ){ fprintf( stderr, "ERROR: (open) %s\n", strerror( errno ) ); return -1; }; init_raw_tty( powerants_int ); powerants = fdopen( powerants_int, "w+b" ); fprintf(powerants,"%c",0x1B); // Clear the PowerAnt input buffer int x = 3600; while( x-- ){ fprintf(powerants,"=AbCdEfGh\r"); printAnswer(); fprintf(powerants,"=aBcDeFgH\r"); printAnswer(); }; return 0; };
Windows, Borland C++ v6. PowerAnt de type SwSw, La fenêtre du programme vous donne le controle total d'un PowerAnt.
#include <vcl.h> #pragma hdrstop #include "Begin.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } #include <winbase.h> #include <stdio.h> DCB pwrAntDCB; HANDLE pwrAntHANDLE; COMMTIMEOUTS pwrAntCommTimeouts; void ShowError( const char * whereError ){ LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the string. MessageBox( NULL, (const char *)lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION ); // Free the buffer. LocalFree( lpMsgBuf ); } BOOL openPwrAntPort( const char * comName ){ pwrAntHANDLE = CreateFile( comName ,GENERIC_READ | GENERIC_WRITE // Read-Write access ,0 // Cannot be shared ,NULL // Security Attributes ,OPEN_EXISTING // Open existing file ,FILE_ATTRIBUTE_NORMAL || FILE_FLAG_WRITE_THROUGH // | FILE_FLAG_NO_BUFFERING // Auto flush ,NULL // Template File ); if( ! pwrAntHANDLE ){ ShowError("CreateFile"); return FALSE; }; if( ! GetCommState( pwrAntHANDLE, &pwrAntDCB )){ ShowError("GetCommState"); return FALSE; }; if( ! BuildCommDCB( "baud=9600 parity=N data=8 stop=1", &pwrAntDCB ) ){ ShowError("BuildCommDCB"); return FALSE; }; if( ! SetCommState( pwrAntHANDLE, &pwrAntDCB )){ ShowError("SetCommState"); return FALSE; }; if( ! GetCommTimeouts( pwrAntHANDLE, &pwrAntCommTimeouts ) ){ ShowError("GetCommTimeouts"); return FALSE; }; pwrAntCommTimeouts.ReadIntervalTimeout = 10; // milliseconds pwrAntCommTimeouts.ReadTotalTimeoutMultiplier = 0; // pwrAntCommTimeouts.ReadTotalTimeoutConstant = 0; // pwrAntCommTimeouts.WriteTotalTimeoutMultiplier = 0; // pwrAntCommTimeouts.WriteTotalTimeoutConstant = 0; // if( ! SetCommTimeouts( pwrAntHANDLE, &pwrAntCommTimeouts ) ){ ShowError("SetCommTimeouts"); return FALSE; }; return TRUE; } BOOL pwrAntCMD( const char * cmd ){ unsigned char buff[70]; unsigned long i; unsigned long io_i; for( i = 0 ; cmd[i] ; i++ ){ buff[i] = cmd[i]; }; buff[i++] = 0x0D; buff[i++] = 0x00; // /* { unsigned char buff2[100]; unsigned char * buffptr = buff2; MessageBox( NULL, buff , "Send Command", MB_OK|MB_ICONINFORMATION ); for( unsigned int x = 0 ; x < i ; x++ ){ buffptr += sprintf( buffptr, "%02x ", buff[x] ); }; MessageBox( NULL, buff2 , "Answer by Bytes", MB_OK|MB_ICONINFORMATION ); } */ if( ! WriteFile( pwrAntHANDLE ,buff , i-1 // Do not send Zero at end of command , &io_i , NULL )){ ShowError("WriteFile"); return FALSE; }; if( ! FlushFileBuffers( pwrAntHANDLE )){ ShowError("FlushFileBuffers"); return FALSE; }; // Read the answer from PowerAnt if( ! ReadFile( pwrAntHANDLE ,buff , 50 // Full PowerAnt Buffer Length , &io_i , NULL )){ ShowError("ReadFile"); return FALSE; }; buff[io_i] = 0; // Null Termination if( io_i > 3 || (buff[0] != '+') ){ MessageBox( NULL, buff , "Command execution result", MB_OK|MB_ICONINFORMATION ); /* unsigned char buff2[100]; unsigned char * buffptr = buff2; for( unsigned int x = 0 ; x < io_i ; x++ ){ buffptr += sprintf( buffptr, "%02x ", buff[x] ); }; MessageBox( NULL, buff2 , "Answer by Bytes", MB_OK|MB_ICONINFORMATION ); */ }; return TRUE; } void closePwrAntPort( void ){ if( ! CloseHandle( pwrAntHANDLE )){ ShowError("CloseFile"); return; }; } void __fastcall TForm1::FormCreate(TObject *Sender) { openPwrAntPort( "COM2" ); } void __fastcall TForm1::FormDestroy(TObject *Sender) { closePwrAntPort(); } void __fastcall TForm1::Button1Click(TObject *Sender){ // In Edit1 properties field OEMConvert MUST BE TRUE! pwrAntCMD( Edit1->Text.c_str() ); } void __fastcall TForm1::CheckBox12Click(TObject *Sender) { if( CheckBox12->Checked ){ pwrAntCMD("=E"); } else { pwrAntCMD("=e"); }; } void __fastcall TForm1::CheckBox11Click(TObject *Sender) { if( CheckBox11->Checked ){ pwrAntCMD("=F"); } else { pwrAntCMD("=f"); }; } void __fastcall TForm1::CheckBox10Click(TObject *Sender) { if( CheckBox10->Checked ){ pwrAntCMD("=G"); } else { pwrAntCMD("=g"); }; } void __fastcall TForm1::CheckBox9Click(TObject *Sender) { if( CheckBox9->Checked ){ pwrAntCMD("=H"); } else { pwrAntCMD("=h"); }; } void __fastcall TForm1::CheckBox16Click(TObject *Sender) { if( CheckBox16->Checked ){ pwrAntCMD("=N"); } else { pwrAntCMD("=n"); }; } void __fastcall TForm1::CheckBox15Click(TObject *Sender) { if( CheckBox15->Checked ){ pwrAntCMD("=M"); } else { pwrAntCMD("=m"); }; } void __fastcall TForm1::CheckBox14Click(TObject *Sender) { if( CheckBox14->Checked ){ pwrAntCMD("=L"); } else { pwrAntCMD("=l"); }; } void __fastcall TForm1::CheckBox4Click(TObject *Sender) { if( CheckBox4->Checked ){ pwrAntCMD("=D"); } else { pwrAntCMD("=d"); }; } void __fastcall TForm1::CheckBox3Click(TObject *Sender) { if( CheckBox3->Checked ){ pwrAntCMD("=C"); } else { pwrAntCMD("=c"); }; } void __fastcall TForm1::CheckBox2Click(TObject *Sender) { if( CheckBox2->Checked ){ pwrAntCMD("=B"); } else { pwrAntCMD("=b"); }; } void __fastcall TForm1::CheckBox5Click(TObject *Sender) { if( CheckBox5->Checked ){ pwrAntCMD("=A"); } else { pwrAntCMD("=a"); }; } void __fastcall TForm1::CheckBox8Click(TObject *Sender) { if( CheckBox8->Checked ){ pwrAntCMD("=I"); } else { pwrAntCMD("=i"); }; } void __fastcall TForm1::CheckBox7Click(TObject *Sender) { if( CheckBox7->Checked ){ pwrAntCMD("=J"); } else { pwrAntCMD("=j"); }; } void __fastcall TForm1::CheckBox6Click(TObject *Sender) { if( CheckBox6->Checked ){ pwrAntCMD("=K"); } else { pwrAntCMD("=k"); }; } void __fastcall TForm1::Button2Click(TObject *Sender) { pwrAntCMD("??"); } void __fastcall TForm1::Button3Click(TObject *Sender) { pwrAntCMD("?="); } void __fastcall TForm1::Button4Click(TObject *Sender) { pwrAntCMD("?%"); } void __fastcall TForm1::Button5Click(TObject *Sender) { pwrAntCMD("?#"); }
Vous pouvez télécharger les différents codes sources au format Zip.