D:/DRISSI/arduino-0022/arduino-0022/libraries/pcf8574/pcf8574.cpp
Go to the documentation of this file.
00001 
00006 #include <TimerOne.h>
00007 #include <pcf8574.h>
00008 
00009          
00010 bool Flag=false;                                                // The time out flag
00011 
00012 // 
00013 void expanderWrite(unsigned char _data ) 
00014 {
00015   Wire.beginTransmission(expander);
00016   Wire.send(_data);
00017   Wire.endTransmission();     
00018 }
00019 
00020 
00021 
00022 // TimeOut in  microseconds
00023 // Return -5 Timeout reached
00024 // return >= Value from i2c
00025 //Char b is expander value before any action is taken
00026 //Write an instruction to led OFF or ON 
00027 // Reports back staus of  transmission  activity as per Arduino wire.h library
00028 // 0 = Success, 1 =data too long to fit in transmit buffer
00029 // 2 =recieved NACK on transmit address ,
00030 // 3 =recieved NACK on transmit data,4 =other error
00031 
00032 int  expanderRead(int TimeOut) 
00033 {
00034       byte _data=0;
00035       Wire.requestFrom(expander, 1);
00036       Flag=false;
00037       Timer1.initialize(TimeOut);
00038       Timer1.attachInterrupt(ISR_Interrupt);
00039       Timer1.start();
00040             
00041      
00042      do
00043      {
00044        if(Wire.available())
00045        {
00046            _data=Wire.receive();
00047            return _data;
00048        }
00049      }
00050      while(Flag==0);
00051      Timer1.detachInterrupt();                        
00052                                 
00053      Timer1.stop();
00054      Flag=false;
00055      return -5;    
00056 }
00057 
00058 char Button1(){ 
00059         char  b; 
00060           char e ;  
00061               
00062               e = Wire.endTransmission();
00063               b = expanderRead(100000) ; 
00064 #ifdef __DEBUG__LED__BUTTONS__
00065               Serial.println(expanderRead(100000), BIN);
00066 #endif
00067               b = b & 0xF0;
00068                     if (e >0)   return -e;
00069                 if (b == 0XA0){
00070                         return -5;}
00071              
00072                else if ( b & (1<<4)){        
00073                 return 0; }  
00074             else  {    
00075               return 1;}
00076           
00077  }
00078 
00079 
00080 
00081 
00082 
00083 
00084 
00085 
00086 
00087 
00088 
00089   
00090 char Button2(){ 
00091         char  b; 
00092           char e ;  
00093               
00094               e = Wire.endTransmission();
00095               b = expanderRead(100000); 
00096               b = b & 0xF0;
00097                     if (e >0)   return -e;
00098                 if (b == 0XA0)  return -5;
00099              
00100                 if ( b & (1<<5)){
00101                               
00102                 return 0; }  
00103             else  {    
00104               return 1;}
00105           
00106  }
00107  char Button3(){ 
00108         char  b; 
00109           char e ;  
00110               
00111               e = Wire.endTransmission();
00112               b = expanderRead(100000); 
00113               b = b & 0xF0;
00114                     if (e >0)   return -e;
00115                 if (b == 0XA0)  return -5;
00116              
00117                 if ( b & (1<<6)){
00118                               
00119                 return 0; }  
00120             else  {    
00121               return 1;}
00122           
00123  }
00124   char Button4(){ 
00125         char  b; 
00126          char e ;  
00127               
00128               e = Wire.endTransmission();
00129               b = expanderRead(100000); 
00130              b = b & 0xF0; 
00131                     if (e >0)   return -e;
00132                 if (b == 0XA0)  return -5;
00133              
00134                 if ( b & (1<<7)){
00135                               
00136                 return 0; }  
00137             else  {    
00138               return 1;}
00139           
00140  }
00141 //Char b is expander value before any action is taken
00142 //Write an instruction to led OFF or ON 
00143 // Reports back staus of  transmission  activity as per Arduino wire.h library
00144 // 0 = Success, 1 =data too long to fit in transmit buffer
00145 // 2 =recieved NACK on transmit address ,
00146 // 3 =recieved NACK on transmit data,4 =other error
00147 
00148 
00149  
00150 char Led1(char state){        
00151                   char b;
00152                   b = expanderRead(10000);  
00153                   if (state == 0){
00154                          expanderWrite( b | (1<<0));        
00155                    }
00156                    else{
00157                          expanderWrite(b & (0<<0)); 
00158                    }
00159                   delay(100);
00160                   char e;       
00161                   char status = Wire.endTransmission();
00162                       if (status >0){
00163                         return -status;
00164                    }
00165                    else{
00166                         return 0;
00167                    }
00168 }
00169 char Led2(char state){        
00170                   char b;
00171                   b = expanderRead(10000);  
00172                   if (state == 0){
00173                          expanderWrite( b | (1<<1));        
00174                    }
00175                    else{
00176                          expanderWrite(b & (0<<0)); 
00177                    }
00178                   delay(100);
00179                   char e;       
00180                   char status = Wire.endTransmission();
00181                       if (status >0){
00182                         return -status;
00183                    }
00184                    else{
00185                         return 0;
00186                    }
00187 }
00188 char Led3(char state){        
00189                   char b;
00190                   b = expanderRead(10000);  
00191                   if (state == 0){
00192                          expanderWrite( b | (1<<2));        
00193                    }
00194                    else{
00195                          expanderWrite(b & (0<<0)); 
00196                    }
00197                   delay(100);
00198                   char e;       
00199                   char status = Wire.endTransmission();
00200                       if (status >0){
00201                         return -status;
00202                    }
00203                    else{
00204                         return 0;
00205                    }
00206 } 
00207 char Led4(char state){        
00208                   char b;
00209                   b = expanderRead(10000);  
00210                   if (state == 0){
00211                          expanderWrite( b | (1<<3));        
00212                    }
00213                    else{
00214                          expanderWrite(b & (0<<0)); 
00215                    }
00216                   delay(100);
00217                   char e;       
00218                   char status = Wire.endTransmission();
00219                       if (status >0){
00220                         return -status;
00221                    }
00222                    else{
00223                         return 0;
00224                    }
00225 }/*
00226 bool Led2(){
00227      b= expanderRead()== 0x0B;
00228      return ~b;
00229   
00230 }
00231 bool Led3(){
00232      b= expanderRead()== 0x0D;
00233      return ~b;
00234   
00235 }
00236 
00237 bool Led4(){
00238      b= expanderRead()== 0x0E;
00239      return ~b;
00240   
00241 }
00242 
00243 */
00244 
00245 
00246 
00247 void ISR_Interrupt()
00248  { Flag=true;
00249      Timer1.detachInterrupt();
00250      
00251    
00252  
00253     
00254  }     
00255 
00256 
00257 
00258 
00259 
00260 
00261 
00262 
00263 
00264 
00265 
00266 
00267 
00268 
00269 
00270 
00271