Skip to content

Commit c06672e

Browse files
add serial code
1 parent 2b33721 commit c06672e

File tree

3 files changed

+43
-12
lines changed

3 files changed

+43
-12
lines changed

code/armdroid-class/armbase.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,5 @@ class AbstractArmdroid {
7979
this->writeToPort(i, 0);
8080
}
8181
}
82-
virtual void writeToPort(uint8_t address, uint8_t data);
82+
virtual void writeToPort(uint8_t address, uint8_t data) {};
8383
};

code/armdroid-class/armdroid-class.ino

+1-10
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
11
#include "armdroid.hpp"
22

3-
#define PA 6
4-
#define PB 7
5-
#define PC 8
6-
#define PD 9
7-
#define P0 2
8-
#define P1 5
9-
#define P2 4
10-
#define PK 3
11-
12-
ParallelArmdroid arm(PA, PB, PC, PD, P0, P1, P2, PK);
3+
PartialSerialArmdroid arm(4, 7, 2, 0x012, 0x3456);
134

145
void setup() {
156
pinMode(A0, INPUT);

code/armdroid-class/armdroid.hpp

+41-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class ParallelArmdroid : public AbstractArmdroid {
2020
void writeToPort(uint8_t address, uint8_t data) {
2121
uint8_t bits = data << 3 | address;
2222
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));
2424
}
2525
delayMicroseconds(20);
2626
digitalWrite(this->port[7], LOW);
@@ -29,3 +29,43 @@ class ParallelArmdroid : public AbstractArmdroid {
2929
delayMicroseconds(20);
3030
}
3131
};
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

Comments
 (0)