@@ -20,7 +20,7 @@ class ParallelArmdroid : public AbstractArmdroid {
20
20
void writeToPort (uint8_t address, uint8_t data) {
21
21
uint8_t bits = data << 3 | address;
22
22
for (uint8_t i = 0 ; i < 7 ; i++) {
23
- digitalWrite (this ->port [i], bits & (1 << i) ? HIGH : LOW );
23
+ digitalWrite (this ->port [i], bits & (1 << i));
24
24
}
25
25
delayMicroseconds (20 );
26
26
digitalWrite (this ->port [7 ], LOW);
@@ -29,3 +29,43 @@ class ParallelArmdroid : public AbstractArmdroid {
29
29
delayMicroseconds (20 );
30
30
}
31
31
};
32
+
33
+ class PartialSerialArmdroid : public Armdroid {
34
+ private:
35
+ uint8_t dataPin;
36
+ uint8_t clockPin;
37
+ uint8_t latchPin;
38
+ uint32_t dataIndexes;
39
+ uint32_t addressIndexes;
40
+ public:
41
+ PartialSerialArmdroid (uint8_t dataPin, uint8_t clockPin, uint8_t latchPin, uint32_t dataIndexes, uint32_t addressIndexes) {
42
+ this ->dataPin = dataPin;
43
+ this ->clockPin = clockPin;
44
+ this ->latchPin = latchPin;
45
+ pinMode (this ->dataPin , OUTPUT);
46
+ pinMode (this ->clockPin , OUTPUT);
47
+ pinMode (this ->latchPin , OUTPUT);
48
+ digitalWrite (this ->dataPin , LOW);
49
+ digitalWrite (this ->clockPin , LOW);
50
+ digitalWrite (this ->latchPin , HIGH);
51
+ this ->dataIndexes = dataIndexes;
52
+ this ->addressIndexes = addressIndexes;
53
+ }
54
+ void writeToPort (uint8_t address, uint8_t data) {
55
+ uint8_t b = (
56
+ (((address >> ((this ->addressIndexes >> 16 ) & 15 )) & 1 ) ) |
57
+ (((address >> ((this ->addressIndexes >> 8 ) & 15 )) & 1 ) << 1 ) |
58
+ (((address >> ((this ->addressIndexes ) & 15 )) & 1 ) << 2 ) |
59
+ (((data >> ((this ->dataIndexes >> 24 ) & 15 )) & 1 ) << 3 ) |
60
+ (((data >> ((this ->dataIndexes >> 16 ) & 15 )) & 1 ) << 4 ) |
61
+ (((data >> ((this ->dataIndexes >> 8 ) & 15 )) & 1 ) << 5 ) |
62
+ (((data >> ((this ->dataIndexes ) & 15 )) & 1 ) << 6 )
63
+ );
64
+ shiftOut (this ->dataPin , this ->clockPin , LSBFIRST, b);
65
+ delayMicroseconds (20 );
66
+ digitalWrite (this ->latchPin , LOW);
67
+ delayMicroseconds (20 );
68
+ digitalWrite (this ->latchPin , HIGH);
69
+ delayMicroseconds (20 );
70
+ }
71
+ };
0 commit comments