Want to build your own DRO system? Interface your Arduino to a Igaging or Mitutoyo Caliper, Mic, or scale.
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];
float num;
void setup() {
Serial.begin(9600);
pinMode(req, OUTPUT);
pinMode(clk, INPUT_PULLUP);
pinMode(dat, INPUT_PULLUP);
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
Serial.println(num/1000, 3); //add decimal
}