Eu e uns colegas chegamos próximos do que queremos, fizemos a programação em C++ achamos mais eficaz, ainda falta alguns ajustes, pois na hora que compila o oscilador ainda não está 100% certo, mas segue o código até o momento:
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <cctype>
using namespace std;
int main(void)
{
// Variáveis
char opc;
int valor;
char szBuff[4];
char szBuff3[25];
char szBuff2[6];//='Caracter ';
strcpy(szBuff2, "Chave ");
strcpy(szBuff3, " press...#### ECOM 7 #####");
HANDLE hSerial;
DCB dcbSerialParams = {0};
DWORD dwBytesRead = 0;
DWORD dwBytesWrite = 0;
cout << endl;
cout << "___ Interface Serial ___" << endl;
cout << endl;
// Abre a porta serial COM1
hSerial = CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hSerial==INVALID_HANDLE_VALUE)
{
if(GetLastError()==ERROR_FILE_NOT_FOUND)
{
cout << "Erro! Porta não encontrada." << endl;
}
cout << "Erro! A porta não pode ser aberta." << endl;
}
// Configura os parâmetros da porta
dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams))
{
cout << "Erro! Parâmentros da porta não encontrados." << endl;
}
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if(!SetCommState(hSerial, &dcbSerialParams))
{
cout << "Erro! Os parâmentros da porta não puderam ser setados." << endl;
}
opc = '0';
while (opc != '3')
{
cout << endl;
cout << "2) Ler e escrever na porta COM1" << endl;
cout << "3) Sair" << endl;
cout << "Opcao = ";
cin >> opc;
if (opc == '2')
{
cout << "Tecle algo para encerrar a leitura..." << endl;
while (!kbhit())
{
strcpy(szBuff,"");
if(!ReadFile(hSerial, szBuff, 4, &dwBytesRead, NULL))
{
cout << "Erro! Leitura da porta." << endl;
}
///cout << endl;
cout << "Caracter = " << szBuff<< endl;
char var1[4];
int aux;
cout<< "szBuff = " << szBuff << endl;
for(int i = 0 ; i < 5 ; i++)
if(!isdigit(szBuff))
szBuff='0';
valor = atoi(szBuff);
if(szBuff!=0)
{
if(valor < 2000)
{
WriteFile(hSerial, "1", 1, &dwBytesRead, NULL);
WriteFile(hSerial, "4", 1, &dwBytesRead, NULL);
}
if(valor >=3000)
{
WriteFile(hSerial, "2", 1, &dwBytesRead, NULL);
WriteFile(hSerial, "3", 1, &dwBytesRead, NULL);
}
}
// szBuff = strcpy("0000");
}
}
}
// Fecha a porta serial COM1
CloseHandle(hSerial);
system("pause");
return 0;
}