[BC++6] LPT aansturen in Borland C++ Builder 6

Pagina: 1
Acties:

  • insan1ty
  • Registratie: Oktober 2001
  • Laatst online: 15-03-2023
Ik probeer nu dus in Borland C++ 6.0 mn LPT poort aan te sturen.
Onder Windows XP met dat dlportio ding, mn LCD werkt ook dus dat is het probleem niet.

Ik wil het per se in C++ maken omdat ik die taal redelijk onder de knie heb, in tegenstelling tot Visual Basic. Het nadeel is dus dat je via Google voornamelijk Visual Basic code vindt of code in C of C++ 3 ofzo... Wat dus niet werkt.
Ik ben gewend aan het invoeren van code in een OnClick event van bijv een button. De oude C is niet OO en ik heb geen idee wat ik daarmee moet. Het gaat mij dus specifiek om code voor Borland C++ Builder 6 [het enige pakket dat ik heb]

Zoiets:
Afbeeldingslocatie: http://www.smsmonster.nl/files/interface.jpg
Probleem is dus dat die dos commando's niet werken.
outportb wordt niet herkend bijvoorbeeld..
Maar als ik het zo doe kan het wel [via google gevonden]:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//switch led on /off in Visual C++

#include <conio.h>
#include <windows.h>

int main()
{
    int counter;
    //10 loops
    for(counter = 0;counter<=9;counter++)
    {
    _outp(0x378,1); //output is high
    _sleep(250); //250 mS delay
    _outp(0x378,0); //output is low
    _sleep(250);
    }

    return 0;
}

Maar dan kan ik het weer niet in een button zetten.

Ik zit ook met de status... Die wil ik niet uitlezen maar gewoon in het programma zelf bijhouden. Ik had daar dit voor bedacht, maar hiermee gaat ie alleen aan en niet meer uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int status1;
if (status1==0)
 {
 Label1->Caption="uit";
 status1=1;
 }
 else
 {
 Label1->Caption="aan";
 status1=0;
 }
}


Kan iemand mij misschien helpen met het construeren van de juiste code?

offtopic:
Ik weet dat jullie denken, oh god niet weer een LPT topic :P Maar ik ben nou al 3 dagen aan het Googlen, searchen op GoT en CO, code uit aan het proberen maar ik ben nu dus ten einde raad.
Ik heb dus een print incl relais enzo gemaakt [Jaja galvanisch gescheiden :P ] en die wil ik hier dus graag mee aansturen.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Je probleem is dat status1 een variabele van de functie is, en bij elke funcie call krijg je dus een verse. Die is bovendien ongeinitialiseerd, dus je hebt een kans van 2^-32 dat 't lampje naar uit gaat.

Nou heb je C++ aardig onder de knie, dus dan snap je ook dat TForm1 een class is, die members kan hebben, en die members worden wel bewaard als de method returned.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • insan1ty
  • Registratie: Oktober 2001
  • Laatst online: 15-03-2023
MSalters schreef op 17 december 2003 @ 23:14:
Je probleem is dat status1 een variabele van de functie is, en bij elke funcie call krijg je dus een verse. Die is bovendien ongeinitialiseerd, dus je hebt een kans van 2^-32 dat 't lampje naar uit gaat.

Nou heb je C++ aardig onder de knie, dus dan snap je ook dat TForm1 een class is, die members kan hebben, en die members worden wel bewaard als de method returned.
Oh. Het schijnt dus dat ik C++ toch niet zo goed onder de knie had als ik dacht... Het is mijn eerste probeersel in een OO environment met hardware aansturing. Voor school hebben we wel eens van die editveld-en-knopjes-rekenopdrachten moeten maken... En dat ging me redelijk af. Dus vandaar.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je mag onder windows eigenlijk niet direct poorten aanspreken. Onder 95, 98 en ME werkt het nog, maar bij NT, 2000 en XP niet meer. Als je zoekt op dit forum vind je aardig wat topics hierover en de bijbehorende oplossingen.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Als je deze regel dan in je OnClick event zet:
code:
1
_outp(0x378,1); //output is high


Als dat voorbeeldje wat je gaf werkt, dan zou dit ook moeten werken. Hiermee maak je dan een uitgang hoog. Door te checken of een uitgang hoog is kan je hem bij de volgende klik weer laag maken.

[ Voor 4% gewijzigd door Verwijderd op 18-12-2003 09:16 ]