Skip to content

Commit 09a1c92

Browse files
authored
Merge pull request #21 from SoonerRobotics/feat-businout
Feature BusInOut
2 parents 35f7e50 + b05153f commit 09a1c92

File tree

4 files changed

+100
-0
lines changed

4 files changed

+100
-0
lines changed

arduino/Arduino.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ using namespace std;
1212

1313
#define INPUT 0x0
1414
#define OUTPUT 0x1
15+
#define INPUT_PULLUP 0x2
1516

1617
#define true 0x1
1718
#define false 0x0

src/BusInOut.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#include "BusInOut.h"
2+
3+
BusInOut::BusInOut(int p0, int p1, int p2, int p3,
4+
int p4, int p5, int p6, int p7,
5+
int p8, int p9, int p10, int p11,
6+
int p12, int p13, int p14, int p15) {
7+
8+
int pins[] = {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15};
9+
for (int i=0; i<16; i++) {
10+
_pin[i] = pins[i];
11+
}
12+
}
13+
14+
void BusInOut::mode(int mode) {
15+
for (int i=0; i<16; i++) {
16+
if (_pin[i] != -1)
17+
pinMode(_pin[i], mode);
18+
}
19+
}
20+
21+
void BusInOut::write(int value) {
22+
for (int i=0; i<16; i++) {
23+
if (_pin[i] != -1) {
24+
digitalWrite(_pin[i], (value >> i) & 1);
25+
}
26+
}
27+
}
28+
29+
int BusInOut::read() {
30+
int value = 0;
31+
for (int i=0; i<16; i++) {
32+
if (_pin[i] != -1)
33+
value |= digitalRead(_pin[i]) << i;
34+
}
35+
return value;
36+
}

src/BusInOut.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#ifndef BusInOut_H
2+
#define BusInOut_H
3+
4+
#include <Arduino.h>
5+
6+
class BusInOut
7+
{
8+
9+
public:
10+
BusInOut(int p0, int p1 = -1, int p2 = -1, int p3 = -1,
11+
int p4 = -1, int p5 = -1, int p6 = -1, int p7 = -1,
12+
int p8 = -1, int p9 = -1, int p10 = -1, int p11 = -1,
13+
int p12 = -1, int p13 = -1, int p14 = -1, int p15 = -1);
14+
15+
void mode(int mode);
16+
17+
void write(int value);
18+
int read();
19+
20+
private:
21+
int _pin[16];
22+
};
23+
24+
#endif

tests/test_businout.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include <BusInOut.h>
2+
#include <catch.hpp>
3+
4+
TEST_CASE("Constructors and mode")
5+
{
6+
BusInOut test(1,2,4);
7+
test.mode(INPUT_PULLUP);
8+
9+
REQUIRE(getModeAtPin(1) == INPUT_PULLUP);
10+
REQUIRE(getModeAtPin(2) == INPUT_PULLUP);
11+
REQUIRE(getModeAtPin(4) == INPUT_PULLUP);
12+
}
13+
14+
TEST_CASE("Write test")
15+
{
16+
BusInOut test(1,2,4,6,8);
17+
test.mode(OUTPUT);
18+
test.write(0b10110);
19+
20+
REQUIRE(getValueAtPin(1) == 0);
21+
REQUIRE(getValueAtPin(2) == 1);
22+
REQUIRE(getValueAtPin(4) == 1);
23+
REQUIRE(getValueAtPin(6) == 0);
24+
REQUIRE(getValueAtPin(8) == 1);
25+
}
26+
27+
TEST_CASE("Read test")
28+
{
29+
BusInOut test(1,2,4,6,8);
30+
test.mode(INPUT);
31+
32+
setValueAtPin(1, 0);
33+
setValueAtPin(2, 1);
34+
setValueAtPin(4, 1);
35+
setValueAtPin(6, 0);
36+
setValueAtPin(8, 1);
37+
38+
REQUIRE(test.read() == 0b10110);
39+
}

0 commit comments

Comments
 (0)