BusInOut_Arduino 0.1.0
Temperature sensor device operation sample code for Arduino
Loading...
Searching...
No Matches
BusInOut.cpp
Go to the documentation of this file.
1#include "BusInOut.h"
2
4 uint8_t bit0,
5 uint8_t bit1,
6 uint8_t bit2,
7 uint8_t bit3,
8 uint8_t bit4,
9 uint8_t bit5,
10 uint8_t bit6,
11 uint8_t bit7
12 )
13{
14 _bits[ 0 ] = bit0;
15 _bits[ 1 ] = bit1;
16 _bits[ 2 ] = bit2;
17 _bits[ 3 ] = bit3;
18 _bits[ 4 ] = bit4;
19 _bits[ 5 ] = bit5;
20 _bits[ 6 ] = bit6;
21 _bits[ 7 ] = bit7;
22
23 config( INPUT );
24}
25
26uint8_t BusInOut::config( int conf )
27{
28 uint8_t last_bit = -1;
29
30 for ( int i = 0; i < 8; i++ )
31 {
32 if ( _bits[ i ] == nc )
33 continue;
34
35 pinMode( _bits[ i ], conf );
36 last_bit = i;
37 }
38
39 _width = last_bit + 1;
40 _mode = conf;
41
42 return last_bit;
43}
44
45void BusInOut::value( uint8_t v )
46{
47 for ( int i = 0; i < _width; i++ )
48 {
49 if ( _bits[ i ] == nc )
50 continue;
51
52 digitalWrite( _bits[ i ], (v >> i) & 0x01 );
53 }
54}
55
56uint8_t BusInOut::value( void )
57{
58 uint8_t r = 0x00;
59
60 for ( int i = 0; i < _width; i++ )
61 {
62 if ( _bits[ i ] == nc )
63 continue;
64
65 r |= (digitalRead( _bits[ i ] ) ? 0x01 : 0x00) << i;
66 }
67
68 return r;
69}
70
72{
73 value( v );
74 return *this;
75}
76
78{
79 return *this;
80}
81
82BusInOut::operator int()
83{
84 return value();
85}
BusInOut(uint8_t bit0=nc, uint8_t bit1=nc, uint8_t bit2=nc, uint8_t bit3=nc, uint8_t bit4=nc, uint8_t bit5=nc, uint8_t bit6=nc, uint8_t bit7=nc)
Definition BusInOut.cpp:3
uint8_t value(void)
Definition BusInOut.cpp:56
uint8_t _bits[8]
Definition BusInOut.h:69
uint8_t _width
Definition BusInOut.h:70
BusInOut & operator=(uint8_t v)
Definition BusInOut.cpp:71
uint8_t config(int conf)
Definition BusInOut.cpp:26
uint8_t _mode
Definition BusInOut.h:71
static constexpr uint8_t nc
Definition BusInOut.h:22