14 #define NANOEXP_ADDRESS 0x58 31 if ( Wire.endTransmission() )
return;
32 if ( readRegister(
REGTEST3 ) != 0x55 )
return;
48 if ( output > 12 )
return;
52 bitNumber = output<=7?output:output-8;
57 DDRVal = readRegister( regAdd );
58 pullupVal = readRegister( regPuAdd );
59 if ( mode == INPUT ) {
60 bitClear( DDRVal, bitNumber );
61 bitClear( pullupVal, bitNumber );
62 }
else if (mode == OUTPUT) bitSet( DDRVal, bitNumber );
63 else if (mode == INPUT_PULLUP ){
64 bitClear( DDRVal, bitNumber );
65 bitSet( pullupVal, bitNumber );
67 writeRegister( regAdd, DDRVal );
68 writeRegister( regPuAdd, pullupVal );
80 if ( input > 12 )
return 0;
83 regAdd = input<=7?
DR:
DR2;
84 DRVal = readRegister( regAdd );
85 return (
int)bitRead( DRVal, input<=7?input:input-8 );
89 if ( output > 12 )
return;
93 regAdd = output<=7?
DR:
DR2;
94 DRVal = readRegister( regAdd );
95 if (value) bitSet ( DRVal, output<=7?output:output-8 );
96 else bitClear(DRVal, output<=7?output:output-8);
97 writeRegister( regAdd, DRVal );
117 if (input > 5 || input <0 )
return 0;
119 case 0: lowAdd = 0X10;
break;
120 case 1: lowAdd = 0X12;
break;
121 case 2: lowAdd = 0X14;
break;
122 case 3: lowAdd = 0X16;
break;
123 case 4: lowAdd = 0X1C;
break;
124 case 5: lowAdd = 0X1E;
break;
127 return readRegister( lowAdd )+ 256*readRegister( lowAdd+1);
137 int CNanoI2CIOExpander::readRegister(
int add ){
139 Wire.write((uint8_t)add);
140 Wire.endTransmission();
142 return (
int)Wire.read();
152 void CNanoI2CIOExpander::writeRegister(
int add,
int val){
154 Wire.write((uint8_t)add);
155 Wire.write((uint8_t)val);
156 Wire.endTransmission();
170 Serial.println(
"Write 0x10 to 1");
171 writeRegister(1, 0X10);
172 Serial.println(
"Write 0x12 to 2");
173 writeRegister(2, 0X12);
174 int retValReg1 = readRegister(1);
175 int retValReg2 = readRegister(2);
176 Serial.println(
"Read of reg 1 = " + String( retValReg1, HEX ) );
177 Serial.println(
"Read of reg 2 = " + String( retValReg2, HEX ) );
178 return ( (retValReg1 == 0X10) && (retValReg2 == 0X12) );
194 _ioexp.
begin( _componentAdd );
199 Serial.println(
"ici ");
204 _flashingMode =
true;
224 int repeat,
unsigned long period){
225 if ( ( repeat * ( ton + toff) < period ) && repeat >= 2 ){
229 _previousPeriod = millis();
230 begin( pin, ton, toff );
244 if ( _flashingMode ){
246 if ( _repeatCount < _repeat ){
247 if ( (millis()-_previousMillis > _ton) && (_ledState == _onLevel) ){
248 _ledState = _offLevel;
249 _previousMillis = millis();
253 }
else if ( (millis()-_previousMillis > _toff) && (_ledState == _offLevel) ){
254 _ledState = _onLevel ;
255 _previousMillis = millis();
259 }
else if ( millis()-_previousPeriod > _period ){
260 _previousPeriod = millis();
262 _previousMillis = millis();
266 if ( (millis()-_previousMillis > _ton) && (_ledState == _onLevel) ){
267 _ledState = _offLevel;
268 _previousMillis = millis();
271 }
else if ( (millis()-_previousMillis > _toff) && (_ledState == _offLevel) ){
272 _ledState = _onLevel ;
273 _previousMillis = millis();
300 _flashingMode =
false;
313 _offLevel = _onLevel;
324 _ioexp.
pinMode( _pin, OUTPUT );
326 _flashingMode =
false;
335 _ioexp.
pinMode( _pin, OUTPUT );
337 _flashingMode =
false;
void pinMode(int output, int mode)
A method to set the pinMode but...
int digitalRead(int input)
Well knonwn function digitalRead applie to nanoI2CIOExpander but...
void begin(int add=0x5F)
function that start the I2C protocol with nanoI2CIOExpander
void begin(int pin, unsigned long ton, unsigned long toff)
to prepare Led Flashing...
void reverseMode()
Reverse the mode when it should be off it is on and conversely.
void digitalWrite(int output, int value)
Header file of the class CNanoI2CIOExpander...
void low()
to put led allways at OFF state
int analogRead(int input)
A method tha return 10bits value of one of the 6 analog inputs...
void stop()
this function stop LED
void high()
to put led allways at ON state
bool test()
A special test method that use 2 special register to write and read and display on the Serial monitor...
void update()
This function should be call periodicly.