Go to the documentation of this file.00001
00006 #include <TimerOne.h>
00007 #include <pcf8574.h>
00008
00009
00010 bool Flag=false;
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
00023
00024
00025
00026
00027
00028
00029
00030
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
00142
00143
00144
00145
00146
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
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
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