PINB bit test
9 berichten
• Pagina 1 van 1
- michel.de.meester
- Berichten: 5
- Geregistreerd: 24 Mei 2021, 20:03
- Woonplaats: Boom, België
PINB bit test
Hallo,
Ik wil testen of bit 0 van PINB laag (0) is (in een ISR(PCINT_vect) PinChange interrupt routine)
Uiteraard is de Serial.print enkel voor Debug, nadien wordt hij verwijderd.
Dit lijkt echter niet te werken, geeft altijd 'condition is True', ongeacht wat Bit 0 is.
Als ik hetzelfde doe om te checken of Bit 0 hoog (1) is werkt het wel
Iemand enig idee?
Alvast bedankt,
Michel
Ik wil testen of bit 0 van PINB laag (0) is (in een ISR(PCINT_vect) PinChange interrupt routine)
Uiteraard is de Serial.print enkel voor Debug, nadien wordt hij verwijderd.
- Code: Alles selecteren
if(PINB | 0b11111110 == 0b11111110) {
Serial.print("Condition is True")
}
Dit lijkt echter niet te werken, geeft altijd 'condition is True', ongeacht wat Bit 0 is.
Als ik hetzelfde doe om te checken of Bit 0 hoog (1) is werkt het wel
- Code: Alles selecteren
if(PINB & 0b00000001 == 0b00000001) {
Serial.print("Condition is True")
}
Iemand enig idee?
Alvast bedankt,
Michel
Advertisement
Re: PINB bit test
in de bovenste staat een OR en een == tegelijk mag er maar 1 zijn
dus if (PINB &0b11111110){serial.print ("true")}
dit is de oplossing
er zijn nog wel meer mogelijkheden zoals direct in de interupt want je mag ook PIN HIGH etc schrijven maar dat staat er niet bij
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) (recommended)
attachInterrupt(interrupt, ISR, mode) (not recommended)
attachInterrupt(pin, ISR, mode) (Not recommended. Additionally, this syntax only works on Arduino SAMD Boards, Uno WiFi Rev2, Due, and 101.)
Parameters
interrupt: the number of the interrupt. Allowed data types: int.
pin: the Arduino pin number.
ISR: the ISR to call when the interrupt occurs; this function must take no parameters and return nothing. This function is sometimes referred to as an interrupt service routine.
mode: defines when the interrupt should be triggered. Four constants are predefined as valid values:
LOW to trigger the interrupt whenever the pin is low,
CHANGE to trigger the interrupt whenever the pin changes value
RISING to trigger when the pin goes from low to high,
FALLING for when the pin goes from high to low.
The Due, Zero and MKR1000 boards allow also:
HIGH to trigger the interrupt whenever the pin is high.
Returns
dus if (PINB &0b11111110){serial.print ("true")}
dit is de oplossing
er zijn nog wel meer mogelijkheden zoals direct in de interupt want je mag ook PIN HIGH etc schrijven maar dat staat er niet bij
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) (recommended)
attachInterrupt(interrupt, ISR, mode) (not recommended)
attachInterrupt(pin, ISR, mode) (Not recommended. Additionally, this syntax only works on Arduino SAMD Boards, Uno WiFi Rev2, Due, and 101.)
Parameters
interrupt: the number of the interrupt. Allowed data types: int.
pin: the Arduino pin number.
ISR: the ISR to call when the interrupt occurs; this function must take no parameters and return nothing. This function is sometimes referred to as an interrupt service routine.
mode: defines when the interrupt should be triggered. Four constants are predefined as valid values:
LOW to trigger the interrupt whenever the pin is low,
CHANGE to trigger the interrupt whenever the pin changes value
RISING to trigger when the pin goes from low to high,
FALLING for when the pin goes from high to low.
The Due, Zero and MKR1000 boards allow also:
HIGH to trigger the interrupt whenever the pin is high.
Returns
paul deelen
shooter@home.nl
shooter@home.nl
- michel.de.meester
- Berichten: 5
- Geregistreerd: 24 Mei 2021, 20:03
- Woonplaats: Boom, België
Re: PINB bit test
Hallo Shooter,
Ben er even zoet mee geweest....
Is volgens mij iets met de volgorde van bewerkingen.....
Als ik PINB | 0b11111110 tussen extra haakjes zet lukt het wel
Strange dat het met AND wel werkt zonder die extra haakjes.
Michel
shooter schreef:in de bovenste staat een OR en een == tegelijk mag er maar 1 zijn
Ben er even zoet mee geweest....
Is volgens mij iets met de volgorde van bewerkingen.....
Als ik PINB | 0b11111110 tussen extra haakjes zet lukt het wel
- Code: Alles selecteren
if((PINB | 0b11111110) == 0b11111110) {
Serial.print("Condition is True")
}
Strange dat het met AND wel werkt zonder die extra haakjes.
Michel
Re: PINB bit test
michel.de.meester schreef:Hallo,
Hallo.
(X OF Y == Y) is altijd Y , ongeacht de X en de haakjes.
Re: PINB bit test
Je bent verward door de vele onduidelijke voorbeelden van mensen die menen veel slimmer dan jij te zijn.
Als A = 0b0010 en jij wil weten of bit1, en enkel bit 1, gezet is, dan doe je meestal een &.
If (A & 0010 == true) {bit1 is set.}
Als A = 0b0010 en jij wil weten of bit1, en enkel bit 1, gezet is, dan doe je meestal een &.
If (A & 0010 == true) {bit1 is set.}
Re: PINB bit test
OF gebruik je meestal om een bit te "zetten"
A = 0b0000
B = A | 0010.
Bit 1 van B is dan zeker 1.
A = 0b0000
B = A | 0010.
Bit 1 van B is dan zeker 1.
- michel.de.meester
- Berichten: 5
- Geregistreerd: 24 Mei 2021, 20:03
- Woonplaats: Boom, België
Re: PINB bit test
ctunes schreef:OF gebruik je meestal om een bit te "zetten"
Of ook om te checken of een bepaalde bit 0 is.
Voorbeeld:
Byte = 0101
Mask = 1101 (checken of bit 1 laag is, zet een nul voor de bits die je wil checken)
Indien Byte OR Mask is gelijk aan Mask dan is de 'condition True' en is dus bit1 laag:
Byte | Mask = 1101 is zelfde als Mask
0101 | 1101 = 1101 is zelfde als Mask
Groetjes,
Michel
Re: PINB bit test
Het kan op meer manieren, dat klopt.
Maar waarom zou je je alle bits controleren, terwijl je er maar in 1 geïnteresseerd bent?
if (BYTE[1] == 0) ???
Maar waarom zou je je alle bits controleren, terwijl je er maar in 1 geïnteresseerd bent?
if (BYTE[1] == 0) ???
9 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten