int req = 5; //mic REQ line goes to pin 5 through q1 (arduino high pulls request line low) int dat = 2; //mic Data line goes to pin 2 int clk = 3; //mic Clock line goes to pin 3 int i = 0; int j = 0; int k = 0; byte mydata[14]; int num; void setup(){ Serial3.begin(9600); Serial.begin(9600); pinMode(req, OUTPUT); pinMode(clk, INPUT); pinMode(dat, INPUT); digitalWrite(clk, HIGH); // enable internal pull ups digitalWrite(dat, HIGH); // enable internal pull ups digitalWrite(req,LOW); // set request at LOW } void loop(){ // get data from mic digitalWrite(req, HIGH); // generate set request for( i = 0; i < 13; i++ ) { k = 0; for (j = 0; j < 4; j++) { while( digitalRead(clk) == LOW) { } // hold until clock is high while( digitalRead(clk) == HIGH) { } // hold until clock is low bitWrite(k, j, (digitalRead(dat) & 0x1)); // read data bits, and reverse order ) } // extract data mydata[i] = k; // sign = mydata[4]; // decimal = mydata[11]; // units = mydata[12]; } // assemble measurement from bytes char buf[7]; for(int lp=0;lp<6;lp++) buf[lp]=mydata[lp+5]+'0'; buf[6]=0; num=atol(buf); //assembled measurement, no decimal place added //Serial3.write(num); Serial3.print(num, DEC); Serial3.print("$"); // Serial.println(num); digitalWrite(req,LOW); // delay(25); }