Ir ao conteúdo
  • Cadastre-se

Enviar conjunto de caracteres por serial


thicomico

Posts recomendados


#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

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...