Go Down

Topic: caliper data interface (Read 3209 times) previous topic - next topic

supertechqc

May 19, 2013, 05:36 pm Last Edit: May 21, 2013, 11:39 pm by supertechqc Reason: 1
                **********************Caliper Data Interface*************************

                 Successfully produced a professional usable Caliper Data Output to interface with a Serial Monitor using the Arduino Uno R3.
                                       
                                                              -Foot Pedal Switch (Boss FS-5U) to capture caliper data.
                                                              -LM339 to convert caliper signals clock and data to TTL.
                                                              -Power Supply for the Calipers using an Led to Regulate.
                   
                                 ------------------Visit supertechqc Youtube Channel for details---------------------  


Here is the code for the Caliper Data Interface:


Code: [Select]


/*
________________________________________________________________
************Program Name:CALIPER_DATA_OUTPUT_05_20_2013
************By J. Poston:
**********Date Initiated:4-22-213
************Date Revised:5-20-2013
*/
int dataIn = 4;
int clockIn = 2;
const int buttonPin = 5;     // the number of the pushbutton pin
int buttonState =0;         // variable for reading the pushbutton status
const int i=10;  //Determines the DELAY Low and High for each led state
int isin=0; //inch=1?mm=0
int isfs=0; //
int index;
unsigned long xData,oData;//
long previousMillis = 0; // will store last time LED was updated
long interval = 500; // interval at which to blink (milliseconds)
long previousGetMillis = 0; //
long Timeout = 8; // 8ms
const int ledon=3; // verification for experimenting change
int m;
void setup()
{

 // initialize the pushbutton pin as an input:
 pinMode(buttonPin, INPUT);    
 digitalWrite(dataIn, 1);
 digitalWrite( clockIn, 1);
 pinMode(dataIn, INPUT); //DATA line goes to Arduino digital pin 4
 pinMode(clockIn, INPUT);
 Serial.begin(9600);
 delay(500);
 attachInterrupt(0,getBit,RISING); //CLOCK line goes to Arduino digital pin 2
 index =0;
 xData=0;
 oData=999;

 Print_Header();//Runs the Subroutine
 pinMode(ledon,OUTPUT); //makes digital pin 3 and output
 Test_Light();  //Runs the subroutine that makes pin 3 blink and LED
}
void loop()
{
 buttonState = digitalRead(buttonPin);
 delay(5);
 if (buttonState == HIGH) {    
   if ((index !=0) && (millis() - previousGetMillis > Timeout) ) {
     index=0;
     xData=0;
   };
   if (index >23) {
     if (oData !=xData) {
       if (isfs==1)
         Serial.print('-');
       if (isin==1){ //
         xData *=5;
         Serial.print(xData/10000);
         Serial.print('.');
         if ((xData % 10000)<1000){
           if ((xData % 10000)<100){
             if ((xData % 10000)<10){
               Serial.print('0');
             };
             Serial.print('0');
           };
           Serial.print('0');
         };
         Serial.println(xData % 10000);
         delay(100); //keeps inches from spitting out lots of the same measures
       }
       else { // mm

         Serial.print(xData/100);
         Serial.print('.');
         if ((xData % 100)<10) //0
             Serial.print('0');
         Serial.println(xData % 100);
       };
     };
     oData =xData;
     index=0;
     delay(5);
     xData=0;
   };
   if (millis() - previousMillis > interval) {
     previousMillis = millis();
   }
 }
}
void getBit(){
 previousGetMillis=millis();
 if(index < 20){
   if(digitalRead(dataIn)==1){
     xData|= 1<<index;

   };
 }
 else {

   if (index==20)
     isfs=digitalRead(dataIn);
   if (index==23) //24 1=inch
     isin=digitalRead(dataIn);
 };
 index++;  
}
/*
^^^^^^^^^^^^^^^^^^^^^^^^Sub Routines^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*/
void Print_Header()
{
 Serial.println("****************************************************************");
 Serial.println("     Program: Digital Caliper Data SPC  (Running)               ");
 Serial.println("****************************************************************");

}

void Test_Light()
{
 delay(100);
 for(m=0;m<20;m++)
 {

   digitalWrite(ledon,HIGH);
   delay(30);
   digitalWrite(ledon,LOW);
   delay(30);
 }

}



  Leonardo Experts!!! *Have you Come Up With Code for Using the Leonardo to Keyboard data to Excel?*              

     ------------ View Schematic Below (Still in progress)-----------  
Don't get dismayed to Negative Activist!!!  These are usually Trolls who are first responders to your post.

Go Up