Serial programmering

Tags:    c++ php danske bogstaver charset

<< < 123 > >>
Hej jeg har fået lavet en motor til computeren som er koblet med plus til pin 3 på min serial port(com1) og minus benet er koblet til pin 5 stel forbindelsen! Men nu vil jeg gerne lave et program så jeg kan få motoren til at køre er der evt. nogle der kan lave et program for mig??? og forklare mig hvordan det virker! helst i c/c++ da jeg har en lille smule kendskab til det!!! håber nogle kan hjælpe!

Hilsen Johan



26 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Er det en meget lille motor? Ellers tror jeg at der er risiko for at du brænder porten af hvis du kobler motoren til den, eller at motoren ikke vil køre.

Men ellers skal du bare sende nogle data, der er et lille eksempel her:

http://home20.inet.tele.dk/midgaard/snip/modem.html



Jeg håber ikke den brænder af men burde have sikret den med et tip noget med en diode! Men har ikke det helt store forstand på det kan du ikke lave et program så jeg overhovedet kan prøve af om motoren virker???



Du kan prøve at slette Rx(...) og Tx(...) i main() fra linket fra før, og så sætte følgende ind i stedet:

while(1)
Tx(ComPort, "AT");

Så burde der ske et eller andet.



Ok det har jeg gjort og jeg compilede det og kørte det men der skete ikke noget er det den rigtige kode den kom til at se sådan ud:

#include <stdio.h>
#include <windows.h>

void SetTimeOut(HANDLE Port, int sec)
{
COMMTIMEOUTS commtimeouts;
GetCommTimeouts(Port, &commtimeouts);
commtimeouts.ReadIntervalTimeout = 1000*sec;
commtimeouts.ReadTotalTimeoutMultiplier = 10;
commtimeouts.ReadTotalTimeoutConstant = 1000*sec;
SetCommTimeouts(Port, &commtimeouts);
}

void Tx(HANDLE Port, const char *data)
{
DWORD Dummy;
WriteFile(Port, data, strlen(data), &Dummy, 0);
WriteFile(Port, "\\r\\n", 2, &Dummy, 0);
}

void Rx(HANDLE Port)
{
char Buffer[128];
DWORD Length, i;

ReadFile(Port, Buffer, 128, &Length, 0);

for(i = 0; i < Length; i++)
if(Buffer != '\\r')
printf("%c", Buffer);
}

int main(void)
{
DCB dcb;
HANDLE ComPort = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

GetCommState(ComPort, &dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fOutxCtsFlow = 1;
SetCommState(ComPort, &dcb);
SetTimeOut(ComPort, 1);

while(1)
Tx(ComPort, "AT");

CloseHandle(ComPort);

return 0;
}




Ja, det ser rigtigt ud.
Er det Com2 du vil bruge, ellers skal du ændre det i kaldet til CreateFile().

Har du et voltmeter?



Jeg ved ikke rigtigt om det er com1 eller com2 og ja jeg har et voltmeter!



Hvis din PC kun har en com-port er det COM1. Hvis den har flere må du prøve dig frem.

Prøv at måle spændingen mellem de to pinde på porten med og unden programmet kørende og uden motoren tilkoblet.



Ok jeg prøvede hvor jeg tog motoren fra og satte volt voltmeteret til og uden jeg gjorde noget så var voltmeteret på 0.20 og 0.21 volt den står sådan og svinger og når jeg så prøvede at køre programmet skete der ingen ændringer!
og jeg har kun en serial port!



Ups mig der målte forkert pin 3 og pin 5 står og så svinger mellem -10.02 og -10.03



Og stadig ingen ændring når jeg kører programmet!



<< < 123 > >>
t