Ir ao conteúdo
  • Cadastre-se
thicomico

Enviar conjunto de caracteres por serial

Recommended Posts


#include <stdio.h>
#include <stdlib.h>
#include <conio2.h>
#include <windows.h>
#include <string.h>

void menu(void)
{
clrscr();
textcolor(2);
gotoxy(13,3);
printf(". ..: Controle de Motor de Passo por Porta Serial :.. .");

gotoxy(9,7);
printf("Passo Completo - Unipolar");
gotoxy(11,8);
printf("1- Sentido horario\t\t2-Sentido anti-horario");

gotoxy(9,11);
printf("Passo Completo - Bipolar");
gotoxy(11,12);
printf("3- Sentido horario\t\t4-Sentido anti-horario");

gotoxy(9,15);
printf("Meio-passo");
gotoxy(11,16);
printf("5- Sentido horario\t\t6-Sentido anti-horario");

gotoxy(9,19);
printf("Controle de velocidade");
gotoxy(11,20);
printf("A- Aumentar\t D- Diminuir\t P- Parar");

gotoxy(4,24);
printf("Pressione ESC para sair");

textcolor(7);
gotoxy(2,1);
printf("%c",201);//Imprime os 4 cantos do quadro
gotoxy(2,25);
printf("%c",200);
gotoxy(79,1);
printf("%c",187);
gotoxy(79,25);
printf("%c",188);

for(char x=3;x<79;x++)
{//Imprime as extremidades do quadro
gotoxy(x,1);
printf("%c",205);
gotoxy(x,25);
printf("%c",205);
}
for(char y=2;y<25;y++)
{
gotoxy(2,y);
printf("%c",186);
gotoxy(79,y);
printf("%c",186);
}
}

/*****************************************************************************************************************
Abre uma porta de comunicação RS232
Retorna:
Handle do arquivo de comunicação se foi bem sucedido
INVALID_HANDLE_VALUE se não conseguiu.
*****************************************************************************************************************/
HANDLE AbreComm(char *nomearquivo, int taxatransf)
{
HANDLE hcom; //cria um ponteiro de nome hcom
DCB cdcb; //nomeia a estrutura DCB (Device Control Block)
//utilizada para definir todos os parâmetros da comunicação
COMMTIMEOUTS comto; //nomeia a estrutura COMMTIMEOUTS (COMMon TIME OUTS)
//utilizada para definir os timeouts da comunicação

hcom = CreateFile(
nomearquivo, //nome do arquivo
GENERIC_WRITE, //abre arquivo para escrita
0, //indica que o arquivo não pode ser compartilhado
NULL, //utiliza a estrutura default para as funções de segurança
OPEN_EXISTING, //abre o arquivo, se não existir, retorna erro
FILE_ATTRIBUTE_NORMAL, //o arquivo deve ser utilizado sozinho
NULL); //sem gabarito de atributos

if(hcom == INVALID_HANDLE_VALUE){ // testa falha na abertura do arquivo
fprintf(stderr, "Nao abriu a %s\n", nomearquivo);
return hcom;}

GetCommState(hcom, &cdcb); //le os parâmetros de comunicação atuais
cdcb.BaudRate = taxatransf; //define a taxa de transmissão
cdcb.ByteSize = 8; //define o tamanho do dado - 8 bits
cdcb.StopBits = ONESTOPBIT; //define o tamanho do stop bit - 1 stop bit
cdcb.Parity = NOPARITY; //define o tipo de paridade - sem paridade

if(!SetCommState(hcom,&cdcb)){ //seta os novos parâmetros de comunicação
fputs("SetCommState", stderr);
return INVALID_HANDLE_VALUE;}

GetCommTimeouts(hcom, &comto); //Le os parâmetros atuais de COMMTIMEOUTS
comto.ReadIntervalTimeout = MAXDWORD;//tempo máximo entre a chegada
//de dois caracters consecutivos(ms)
comto.ReadTotalTimeoutMultiplier = 0;
comto.ReadTotalTimeoutConstant = 0;
comto.WriteTotalTimeoutMultiplier = 0;
comto.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hcom, &comto); //seta os parâmetros de COMMTIMEOUTS
return hcom;}


int main(void)
{
HANDLE hcom; // Cria o ponteiro, área de memória
unsigned long n;
char t[1]; // Buffer de armazenamento do caracter
char *nome="COM1"; // Define nome do arquivo, no caso, a porta usada
int baud=1200; // Taxa de transmissão

hcom=AbreComm(nome,baud); //abre o aquivo e relaciona com ponteiro
if(hcom==INVALID_HANDLE_VALUE) {getch();return 1;} //se não abriu arquivo/porta,
// encerra o programa
//**** Descrição da função de envio para a serial ******************************

// função para escrever um dado do arquivo
// hcom = nome do ponteiro
// tecla = buffer de dados
// 1 = número de bytes a receber do buffer
// &n = número de bytes efetivamente recebidos
// NULL = sem sobreposição/overlapped
//WriteFile(hcom,tecla, 1, &n, NULL); //escreve conteúdo do buffer
//no arquivo/porta

menu();
do
{
if(kbhit()) // Identifica se tecla foi pressionada no teclado
{
*t='U';
WriteFile(hcom,t, 1, &n, NULL); //escreve conteúdo do buffer
WriteFile(hcom,t, 1, &n, NULL); //escreve conteúdo do buffer
WriteFile(hcom,t, 1, &n, NULL); //escreve conteúdo do buffer
WriteFile(hcom,t, 1, &n, NULL); //escreve conteúdo do buffer
*t=getch(); // Armazena no buffer a tecla
WriteFile(hcom,t, 1, &n, NULL); //escreve conteúdo do buffer
WriteFile(hcom,t, 1, &n, NULL); //escreve conteúdo do buffer
}
} while (*t!=27);
CloseHandle(hcom);
clrscr();
getch();
return 0;
}




O Código acima que desenvolvi envia o caracter digitado pelo teclado pela porta serial. Gostaria de alterar o mesmo para que envie uma string de 6 caracteres. porém estou enfrentando problemas. Alguem sabe como pode ser feito isso?

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×