communiceren met com poort

Status
Niet open voor verdere reacties.

lukkezeh

Gebruiker
Lid geworden
26 sep 2006
Berichten
29
Hallo allemaal,

Voor school heb ik nu een project waarmee ik moet communiceren met de com poort. Vanaf de com poort gaat het via het rs232 protocol naar mijn microcontroller (AT90s2313). Ik heb nu een programmatje waarmee ik op mijn beeldscherm al iets kan zien. Nu wil ik alleen nog dat op mijn printje ook de ledjes aangaan.
Hieronder zal ik hetgeen wat ik al af heb posten. Kan iemand mij verder helpen zodat ik alle info naar mijn com poort kan sturen?

Alvast heel erg bedankt.

Code:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;



//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
              Shape1->Brush->Color=clYellow;
              Shape2->Brush->Color=clYellow;
              Shape3->Brush->Color=clYellow;
              Shape4->Brush->Color=clYellow;
              Shape5->Brush->Color=clYellow;
              Shape6->Brush->Color=clYellow;
              Shape7->Brush->Color=clYellow;
              Shape8->Brush->Color=clYellow;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{

        //zorgen dat variabelen a t/m k int zijn
                int a,b,c,d,e,f,g,h,i,j,k;

        //alle waardes goed zetten en er voor zorgen dat de rondjes goed kleuren
                if (CheckBox1->Checked == true){
                        a = 0x01;
                        Shape1->Brush->Color=clRed;
                }
                else {
                        a = 0x00;
                        Shape1->Brush->Color=clYellow;
                }

               if (CheckBox2->Checked==true){
                        b = 0x02;
                        Shape2->Brush->Color=clRed;
                }
                else {
                        b = 0x00;
                        Shape2->Brush->Color=clYellow;
                }

                 if (CheckBox3->Checked==true){
                        c = 0x04;
                        Shape3->Brush->Color=clRed;
                }
                else {
                        c = 0x00;
                        Shape3->Brush->Color=clYellow;
                }

                 if (CheckBox4->Checked==true){
                        d = 0x08;
                        Shape4->Brush->Color=clRed;
                }
                else {
                        d = 0x00;
                        Shape4->Brush->Color=clYellow;
                }

                if (CheckBox5->Checked==true){
                        e = 0x10;
                        Shape5->Brush->Color=clRed;
                }
                else {
                        e = 0x00;
                        Shape5->Brush->Color=clYellow;
                }

                if (CheckBox6->Checked==true){
                        f = 0x20;
                        Shape6->Brush->Color=clRed;
                }
                else {
                        f = 0x00;
                        Shape6->Brush->Color=clYellow;
                }

                if (CheckBox7->Checked==true){
                        g = 0x40;
                        Shape7->Brush->Color=clRed;
                }
                else {
                        g = 0x00;
                        Shape7->Brush->Color=clYellow;
                }

                if (CheckBox8->Checked==true){
                        h = 0x80;
                        Shape8->Brush->Color=clRed;
                }
                else {
                        h = 0x00;
                        Shape8->Brush->Color=clYellow;
                }

        //ales optellen
                k = a + b+c+d+e+f+g+h;

        //in label 1 de waarde van variabele k plaatsen
                Label1->Caption  = k;
}

//---------------------------------------------------------------------------
 
Hallo lukkezeh,

Ik ben absoluut geen pro in dit, maar ik probreer tenminste jouw op het goede pad te brengen.

Ten eerste moet je een variabele aanmaken van het type HANDLE (bijv. HANDLE my_comhandle).
Die moet in eerste instantie NULL zijn. Daarna maak je een commpoort aan met bijv.
my_comhandle = CreateFile(_T("COM1:"), GENERIC_WRITE | GENERIC_READ, false, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

voor meer info over deze parameters krijg je ophttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcedata5/html/wce50lrfcreatefile.asp

Nu heeft my_comhandle een waarde, die je kunt controleren of er met succes een compoort geinitialiseerd is. Dit kun je doen met b.v.
if (my_comhandle != INVALID_HANDLE_VALUE) // INVALID_HANDLE_VALUE is een standaard waarde.

Vervolgens moet je dan de commTimeOuts instellen. hier is een voorbeeld van hoe je dit kunt doen

COMMTIMEOUTS my_commTO;

my_commTO.ReadIntervalTimeout = 0;
my_commTO.ReadTotalTimeoutConstant = 0;
my_commTO.ReadTotalTimeoutMultiplier = 250;
my_commTO.WriteTotalTimeoutConstant = 0;
my_commTO.WriteTotalTimeoutMultiplier = 250;

meer info ook op de msdn website.(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecoreos5/html/wce50lrfcommtimeouts.asp)

daarna roep je SetCommTimeouts(my_comhandle, &my_commTO) aan om de timming instellingen door te sturen. SetCommTimeouts() is van het type bool en returned !0 indien een succes of een 0 voor failure. meer info hierover op http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecoreos5/html/wce50lrfsetcommtimeouts.asp

Als laatse moet je de commsettings instellen en meegeven. Hieronder kan je een voorbeeld zien.

DCB my_CommDCB;

my_CommDCB.BaudRate = CBR_9600;
my_CommDCB.fBinary = true;
my_CommDCB.fParity = false;
my_CommDCB.fOutxCtsFlow = false;
my_CommDCB.fOutxDsrFlow = false;
my_CommDCB.fDtrControl = false;
my_CommDCB.fDsrSensitivity = false;
my_CommDCB.fOutX = false;
my_CommDCB.fInX = false;
my_CommDCB.fNull = false;
my_CommDCB.fRtsControl = false;
my_CommDCB.ByteSize = 8;
my_CommDCB.Parity = NOPARITY;
my_CommDCB.StopBits = ONESTOPBIT;
SetCommState(my_comhandle, &my_CommDCB) != 0;

SetCommState() returned ook een bool zodat je weer kan controleren of alles goed gegaan is. Ook hierover is er meer info: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/setcommstate.asp

nou dat was 'em en nog success!:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan