#include #include #include //LCD Setup Adafruit_PCD8544 display = Adafruit_PCD8544(13, 11, 5, 4, 6); //connect nothing to pin 12 or SS // Functional Setup float Measurement = 0.0; float pos = 0.0; //Zerobutton Setup int Zeroing = 9; // pin no. button sensing for relative positioning int ZeroButton = 0; float zeroposition = 0.0; char* mode[] = {"Absolute", "Zero"}; //Mode Listing int ModeIndex = 0; //Initial mode index //Blade Selection Setup int Blade = 10; //pin no. button sensing for blade selection int BladeButton = 0; char* myBlades[] = {"Ripping", "Plywood", "Dado 1/4", "Dado 3/8"}; //Blade List float KerfOffsets[] = {0.0, 0.063, 0.25, 0.375}; //Index must correspond to myBlades int BladeIndex = 0; //Initial index value //Oversampling Setup float N = pow(4.0,6.0); //number of extra bits disired in the form of 4^No of bits float sf = pow(2.0,6.0); //should equal 2^No of bits void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(3,OUTPUT); // pin 3 is LED control. analogWrite(3,250); display.begin(); //display setup display.clearDisplay(); display.setContrast(50); display.setTextSize(1); // This is just a big splash screen. display.setTextColor(BLACK); display.setCursor(0,0); display.println("Welcome"); display.println("to the"); display.println("Labratory"); display.display(); delay(2000); display.clearDisplay(); display.display(); pinMode(A0,INPUT); pinMode(Zeroing,INPUT); pinMode(Blade,INPUT); } void loop() { ZeroButton = digitalRead(Zeroing); BladeButton = digitalRead(Blade); if (ZeroButton == HIGH) { if (zeroposition == 0 || zeroposition < 0) { zeroposition = ToInches(position()); ModeIndex = 1; } else { zeroposition = 0.0; ModeIndex = 0; } display.clearDisplay(); display.setTextSize(2); display.println(mode[ModeIndex]); display.display(); delay(1000); } if (BladeButton == HIGH) { if (BladeIndex == 3) { BladeIndex = 0; } else { BladeIndex = BladeIndex + 1; } display.clearDisplay(); display.setTextSize(2); display.println("Blade"); display.println(myBlades[BladeIndex]); display.display(); delay(1000); } pos = position(); Measurement = ToInches(pos) - zeroposition - KerfOffsets[BladeIndex]; display.clearDisplay(); display.setTextSize(1); display.setCursor(0,0); display.println(myBlades[BladeIndex]); display.setTextSize(2); display.println(Measurement,3); display.setTextSize(1); display.println(pos); //debug the linpot display.println(mode[ModeIndex]); display.display(); } float position(){ float ave = 0.0; for (int i =0; i < N; i++) { ave = ave + (float)analogRead(A0); } float result = ave / sf; // result = 0.0004484*result+0.0563128; return result; } float ToInches(float val) { //float inches = 0.0004484*val+0.0563128; // Cal : 11-25-15 //float inches = 0.0004476*val+0.0380241; // Cal : 12-13-15 //float inches = 0.0004546*val+0.0174400; // Cal : 12-21-15 float inches = 0.0004512*val+0.0055947; // Cal : 12-29-15 return inches; }