我的問題是Arduino的具體問題,但如果您知道如何在C中使用它,它在Arduino IDE中也會類似。如何在字節變量中設置位(Arduino)
所以,我有5個整數變量:
R1,R2,R3,R4,R5
它們的值爲0(關閉)或1(開)。 我想這些存儲在一個字節變量讓我們把它轉發,不加入他們,但設置某些位1/0無論是0或1 例如:
1,1,0,0 ,1
我想在我的繼電器的字節變量的值完全相同,不 R1 + R2 + R3 + R4 + R5在這種情況下將是十進制3,二進制11.
謝謝!
我的問題是Arduino的具體問題,但如果您知道如何在C中使用它,它在Arduino IDE中也會類似。如何在字節變量中設置位(Arduino)
所以,我有5個整數變量:
R1,R2,R3,R4,R5
它們的值爲0(關閉)或1(開)。 我想這些存儲在一個字節變量讓我們把它轉發,不加入他們,但設置某些位1/0無論是0或1 例如:
1,1,0,0 ,1
我想在我的繼電器的字節變量的值完全相同,不 R1 + R2 + R3 + R4 + R5在這種情況下將是十進制3,二進制11.
謝謝!
如何:
char byte = (r1 << 4) | (r2 << 3) | (r3 << 2) | (r4 << 1) | r5;
或者周圍的其他方式:
char byte = r1 | (r2 << 1) | (r3 << 2) | (r4 << 3) | (r5 << 4);
我建議使用位的結構的統一。它增加了清晰度,便於攜帶。您可以指定單個或任何大小的相鄰位。隨着快速重新安排他們。
union {
uint8_t BAR;
struct {
uint8_t r1 : 1; // bit position 0
uint8_t r2 : 2; // bit positions 1..2
uint8_t r3 : 3; // bit positions 3..5
uint8_t r4 : 2; // bit positions 6..7
// total # of bits just needs to add up to the uint8_t size
} bar;
} foo;
void setup() {
Serial.begin(9600);
foo.bar.r1 = 1;
foo.bar.r2 = 2;
foo.bar.r3 = 2;
foo.bar.r4 = 1;
Serial.print(F("foo.bar.r1 = 0x"));
Serial.println(foo.bar.r1, HEX);
Serial.print(F("foo.bar.r2 = 0x"));
Serial.println(foo.bar.r2, HEX);
Serial.print(F("foo.bar.r3 = 0x"));
Serial.println(foo.bar.r3, HEX);
Serial.print(F("foo.bar.r4 = 0x"));
Serial.println(foo.bar.r5, HEX);
Serial.print(F("foo.BAR = 0x"));
Serial.println(foo.BAR, HEX);
}
在這裏您可以擴大這個聯盟比字節的
注uint8_t是相同的字節。
甚至可以將聯合擴展爲一個字節數組,然後通過串行端口發送字節或將它們作爲一個長字等單獨發送出去......參見更多extensive example。
最佳答案,但工會可能很難理解新手 – rslite
感謝它工作正常,除了我需要它倒序。 – user3329848
@ user3329848查看編輯答案。 –