[vb]waardes bepalen

Pagina: 1
Acties:

  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08-2025
Ik ben bezig om een programma te schrijven in Visual Basic die de printerpoort aanstuurt. Er zitten 8 ledjes op, die ik afzonderlijk kan aansturen, wil ik bijvoorbeeld ledje 1 laten branden, dan stuur ik de waarde 1, wil ik ledje 2 laten branden dan stuur ik de waarde 2, voor ledje3 stuur ik de waarde 4, en voor ledje4 de waarde 8, enz. enz. (steeds *2)

Nu kan het ook voorkomen, dat de eerste 2 ledjes moeten branden, dan moet ik de waarde 3 sturen. Of ledje 3, 7, 8 dan moet ik weer een de waarde sturen.

Is hier niet een makkelijke bereking voor te doen, dat ik snel kan zien welke waarde ik moet sturen, of moet ik alle aansturingen hard vermelden. Dus zoiets als
code:
1
2
3
4
if led1.enabeld = true then writeln 1
if led8.enabeld= true then writeln 8

enz.

  • Kix@$$
  • Registratie: December 2001
  • Laatst online: 26-08 16:05
Als ik jou was maakte ik hier idd een bitfield van, dus 1 long waar dat allemaal in staat.

Dan kun je bijvoorbeend doen:

Visual Basic:
1
2
3
4
5
6
7
8
Dim lngBitField As Long

lngBitField = 1 Or 2 ' Ledje 1 + 2 bij elkaar optellen

If lngBitField And 1 Then Debug.Print 1
If lngBitField And 2 Then Debug.Print 2
If lngBitField And 4 Then Debug.Print 3
If lngBitField And 8 Then Debug.Print 4


je kan dit ook in een for/next lusje doen, maar dat mag je lekker zelf uitzoeken :+

[ Voor 27% gewijzigd door Kix@$$ op 03-01-2003 11:27 ]


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 07-07 01:04

ZaZ

Tweakers abonnee

Dat is gewoon werken met binaire waardes, en daar kan je zelf een module oid voor schrijven en er zijn er ook vast vele te vinden op het internet (pscode bijv)
en hoe je het wilt toepassen is aan jou

Lekker op de bank


  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08-2025
Ik zat te denken aan deze formule

2^(1-1)+2^(8-1)=2^0+2^7=1+128=129

Hier gaan dus ledje 1 en ledje 8 branden. Eerst wordt er van de waarde van het ledje 1 afgetroken en dan doorgerekent.

Maar hoe werkt het ^ simbool in de forumle, want op het rekenmachintje werkt het wel maar in VB niet


Uitkomst = 2 ^ (Waarde2 - 1) + 2 ^ (Waarde3 - 1)

[ Voor 9% gewijzigd door voodoo202 op 03-01-2003 11:50 ]


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 07-07 01:04

ZaZ

Tweakers abonnee

"2^(1-1)+2^(8-1)" geeft in vb gewoon de waarde 129 terug hoor

Lekker op de bank


  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08-2025
Ja ik had hem ook gevonden, maar eerst werkte het ^ teken niet, maar na het kopieren van de forumule in de help werkte het wel. maar bij gewoon intypen niet. Nu is het enige probleem nog, als het nul is maakt hij er 1 van

Dus 2^(1-1) + 2 ^(8-1) = 2 ^ 0 + 2 ^ 7 = 129

en niet 128

  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 07-07 01:04

ZaZ

Tweakers abonnee

Dan kan je denk ik het hele gebeuren beter in een loop zetten en dan een variable maken en die optellen, en een if statement gebruiken in de loop.

Lekker op de bank


  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08-2025
ZaZ schreef op 03 January 2003 @ 12:20:
Dan kan je denk ik het hele gebeuren beter in een loop zetten en dan een variable maken en die optellen, en een if statement gebruiken in de loop.
Ik gebruik nu dit, en het werkt goed zover ik kan zien

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub Timer1_Timer()
Dim Waarde1, Waarde2, Waarde3, Waarde4, Waarde5, Waarde6, Waarde7, Uitkomst
Waarde1 = 0
Waarde2 = 0
Waarde3 = 0
Waarde4 = 0
Waarde5 = 0
Waarde6 = 0
Waarde7 = 0
waarde8 = 0
Uitkomst = 0
If Check1.Value = 1 Then Waarde1 = 1 - 1
If Check2.Value = 1 Then Waarde2 = 2 - 1
If Check3.Value = 1 Then Waarde3 = 3 - 1
If Check4.Value = 1 Then Waarde4 = 4 - 1
If Check5.Value = 1 Then Waarde5 = 5 - 1
If Check6.Value = 1 Then Waarde6 = 6 - 1
If Check7.Value = 1 Then Waarde7 = 7 - 1
If Check8.Value = 1 Then waarde8 = 8 - 1
If Check1.Value = 0 Then Uitkomst = Uitkomst - 1
If Check2.Value = 0 Then Uitkomst = Uitkomst - 1
If Check3.Value = 0 Then Uitkomst = Uitkomst - 1
If Check4.Value = 0 Then Uitkomst = Uitkomst - 1
If Check5.Value = 0 Then Uitkomst = Uitkomst - 1
If Check6.Value = 0 Then Uitkomst = Uitkomst - 1
If Check7.Value = 0 Then Uitkomst = Uitkomst - 1
If Check8.Value = 0 Then Uitkomst = Uitkomst - 1
Text1.Refresh

Uitkomst = Uitkomst + (2 ^ Waarde1) + (2 ^ Waarde2) + (2 ^ Waarde3) + (2 ^ Waarde4) + (2 ^ Waarde5) + (2 ^ Waarde6) + (2 ^ Waarde7) + (2 ^ waarde8)


DlPortWritePortUchar Val(TextAddr), Uitkomst
Text1.Text = Uitkomst
Text1.Refresh
End Sub

  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 07-07 01:04

ZaZ

Tweakers abonnee

Als het werkt... 'if it ain't broke, don't fix it'
En als je verder wilt gaan met proggen etc. dan moet je gewoon wat boeken checken, dan leer je vanzelf hoe je hetzelfde in een paar regels kan doen.
Om je nog wat te laten experimenteren: probeer eens het hele gebeuren in een array te proppen, en dat met een loop.
Het is nog steeds dan niet de netste manier, maar we zijn hier om dingen op te steken nietwaar?
Klooi lekker verder en we zien het wel weer als het niet lukt :)

[ Voor 4% gewijzigd door ZaZ op 03-01-2003 13:47 ]

Lekker op de bank


  • voodoo202
  • Registratie: Januari 2002
  • Laatst online: 04-08-2025
ZaZ schreef op 03 January 2003 @ 13:45:
Als het werkt... 'if it ain't broke, don't fix it'
En als je verder wilt gaan met proggen etc. dan moet je gewoon wat boeken checken, dan leer je vanzelf hoe je hetzelfde in een paar regels kan doen.
Om je nog wat te laten experimenteren: probeer eens het hele gebeuren in een array te proppen, en dat met een loop.
Het is nog steeds dan niet de netste manier, maar we zijn hier om dingen op te steken nietwaar?
Klooi lekker verder en we zien het wel weer als het niet lukt :)
K bedankt, ik zal het proberen.

Maar ik ben zeker nog niet klaar, want ik moet hem ook nog andersom laten werken. Dus dat ik een waarde heb en dan ik dan kan zien welke ledjes geschakeld zijn.

bijvoorbeeld, ik krijg de waarde 162, daar moet ik de waardes uithalen, dat led 2, 6,8 brand.

Zijn hier trouwens geen mensen die dit ook op school hebben gehad ?
Het apparaat heet CenSim, en hebben we moeten maken met elektro op het ROC in eindhoven (vroeger TLE)

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

voodoo202 schreef op 03 januari 2003 @ 14:46:
[...]
bijvoorbeeld, ik krijg de waarde 162, daar moet ik de waardes uithalen, dat led 2, 6,8 brand.
Tip: zoek in MSDN op And ;)

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • The_Butler
  • Registratie: April 2001
  • Laatst online: 26-08 18:41
Ik werk om heel eerlijk te zijn dagelijks met dit soort materie, en ik heb 1 functie geschreven die 16 bits naar 1 Uint (16 bit positief getal) schrijft. Als je dat hebt dan kan je ieder LED-je een eigen bit geven en heen er weer werken. Het is en binair naar hex conversie, werkt perfect in de industriele data techniek (Profibus) en ik denk dat als je een functie schrijft dit ook voor jou moet werken.

at your service

Pagina: 1