[Arduino] Waarheidstabel

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • GeeBee
  • Registratie: Maart 2000
  • Laatst online: 26-08 06:43
Mijn vraag
Ik ben bezig met het aansturen van ledjes via een i2c-kaart die aangesloten is op een Arduino.
De ledjes zitten op poort 0,1, 4 en 5 en hebben dus de waarde 1, 2, 16 en 32 in de byte die naar de kaart geschreven wordt.
Het aan- en uitzetten van individuele LEDjes is gelukt, maar alleen het uitschakelen van een uitgeschakelde led gaat fout, dan gaat-ie namelijk juist aan en daarna uit. Hij knippert dus.
De code hieronder laat dat gebeuren.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <Wire.h>

int i2ckaart=32;
int wachttijd=1000;

void setup()
{
  Wire.begin(); // Koppel arduino aan i2c-bus als Master
  Serial.begin(9600);
  aan(0);
  delay(wachttijd);
}

void aan(int lampjes)
{
  int lampjesbyte=0;
  Wire.beginTransmission(i2ckaart);
  Wire.requestFrom(i2ckaart,8);
  int huidigelampjes= Wire.read();
  switch (lampjes)
  {
    case 1:
      lampjesbyte = huidigelampjes | 1;
    break;
    case 2:
      lampjesbyte = huidigelampjes | 2;
    break;
    case 3:
      lampjesbyte = huidigelampjes | 16;
    break;
    case 4:
      lampjesbyte = huidigelampjes | 32;
    break;
  }
  Wire.write(lampjesbyte);
  Wire.endTransmission();
}

void uit(int lampjes)
{
  Wire.beginTransmission(i2ckaart);
  Wire.requestFrom(i2ckaart,8);
  int huidigelampjes= Wire.read();
  int lampjesbyte=huidigelampjes;
  switch (lampjes)
  {
    case 1:
      lampjesbyte = huidigelampjes ^ 1;
    break;
    case 2:
      lampjesbyte = huidigelampjes ^ 2;
    break;
    case 3:
      lampjesbyte = huidigelampjes ^ 16;
    break;
    case 4:
      lampjesbyte = huidigelampjes ^ 32;
    break;
  }
  Wire.write(lampjesbyte);
  Wire.endTransmission();
}

void loop()
{
  aan(1);
  uit(3);
  delay(wachttijd);
}


Mijn vraag is dus: welke operator hoort er bij het '^' te staan?

Waarheidstabel:
0 ^ 0 = 0
0 ^ 1 = 0
1 ^ 0 = 1
1 ^ 1 = 0

Relevante software en hardware die ik gebruik
Arduino

Wat ik al gevonden of geprobeerd heb
Veel logica operators en combinaties getest.

[ Voor 0% gewijzigd door GeeBee op 04-06-2019 07:21 . Reden: Waarheidtabel aangevuld ]

Woof, woof, woof! That's my other dog imitation.

Beste antwoord (via GeeBee op 04-06-2019 11:17)


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-09 12:01

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

GeeBee schreef op dinsdag 4 juni 2019 @ 00:50:
[...]

Waarheidstabellen:
0 ^ 1 = 0
1 ^ 1 = 0

Relevante software en hardware die ik gebruik
Arduino

Wat ik al gevonden of geprobeerd heb
Veel logica operators en combinaties getest.
Dit is geen complete waarheidstabel en je geeft geen compleet beeld. Als alleen die 2 false zijn, dan gok ik dat 1 ^ 0 = 1 en 0 ^ 0 = 1? In dat geval moet je gewoon de negate van de 2e variabele nemen. Ook is "veel logica operators" niet geheel helpend. Ik kan je er wel een aantal geven, maar weet dus niet wat je allemaal al geprobeerd hebt.

Maar ik neem aan dat je op zoek bent naar een manier om een bit uit te zetten als die aanstaat en hem anders niet aan te passen? Oftewel een bit clearen?

[ Voor 10% gewijzigd door Gropah op 04-06-2019 01:35 ]


Acties:
  • +1 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

AND'en met het omgekeerde.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

^ is XOR, daarmee kun je bitjes omdraaien. Maar dat betekent dus ook dat ze op 1 komen als ze 0 waren. Als je specifieke bits uit wil zetten, dan zul je inderdaad een AND NOT moeten gebruiken (bits & ~mask)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11-09 12:01

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • GeeBee
  • Registratie: Maart 2000
  • Laatst online: 26-08 06:43
Bitmasking was inderdaad wat ik nodig had. AND NOT -> & ~
code:
1
lampjesbyte = huidigelampjes & ~1;

... enzovoort werkt!

[ Voor 27% gewijzigd door GeeBee op 04-06-2019 11:19 ]

Woof, woof, woof! That's my other dog imitation.

Pagina: 1