//Ardunio Mega ToolIndexer with Keypad and LCD #include "AccelStepper.h" // AccelStepper Library #include #include // Keypad Library #include "U8glib.h" // U8glib for Nokia LCD #define VERSION_STRING "8 Position Turret version 0.1" #define Switch 8 //Pin 8 connected to Switch out #define Relay 9 // pin 9 connected to the relay for the air valve #define EN 10 // define TB6600 Enable pin #define backlight_pin 11 #define dir_pin A1 // forward = HIGH, reverse = LOW byte homed = false; byte swVal; int curr = 0; int req = 0; int dist = 0; //-------- define the keypad -------- const byte ROWS = 4; //four rows const byte COLS = 4; //four columns char keys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = {37, 36, 35, 34}; // Ardunio mega2560 pins connected to the row pins of the keypad byte colPins[COLS] = {33, 32, 31, 30}; // Ardunio mega2560 pins connected to the column pins of the keypad // --------------- initialize an instance of class NewKeypad ---------------- Keypad MyKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //-------------------- U8glib setup for Nokia LCD ------------------- U8GLIB_PCD8544 u8g(3, 4, 6, 5, 7); //CLK=3, DIN=4, CE=6, DC=5, RST=7 //------------------------ AccelStepper Setup --------------------------- AccelStepper stepper(1, A0, dir_pin); // 1 = Easy Driver interface, A0 = Step pin of Easy Driver, A1 = DIR pin of Easy Driver int Steps = 400; // motor steps(200) * microsteps(8) * ratio(2) / number positions(8) //------------------------ setup() start ---------------------------- void setup() { Serial.begin(9600); // for debugging pinMode (EN, OUTPUT); pinMode (Switch, INPUT); pinMode (Relay, OUTPUT); //---------------- Set TB6600 Enable to false ----------------- digitalWrite (EN, HIGH); //----------------- Power the backlight LEDS ------------------ analogWrite(backlight_pin, 0); // Set the backlight intensity (0=Bright, 255=Dim) //-------- AccelStepper speed and acceleration setup ---------- stepper.setMaxSpeed(2500); // Not too fast or there will be missed steps stepper.setAcceleration(1100); //-------------- Draw starting screen on Nokia LCD ------------ u8g.firstPage(); do { u8g.setFont(u8g_font_profont11); u8g.drawStr(0, 10, "8 POS TOOLCHANGER"); u8g.drawStr(0, 20, "TO HOME"); u8g.drawStr(0, 30, "PRESS ZERO"); } while (u8g.nextPage() ); // end of setup } void loop() { // put your main code here, to run repeatedly: byte b; char keypressed = MyKeypad.getKey(); // Get value 0f keypad button if pressed if (keypressed != NO_KEY) { // if keypad button pressed check which key it was switch (keypressed) { case '1': getTool(1); break; case '2': getTool(2); break; case '3': getTool(3); break; case '4': getTool(4); break; case '5': getTool(5); break; case '6': getTool(6); break; case '7': getTool(7); break; case '8': getTool(8); break; case '9': //evalKey(9); break; case '0': findHome(); break; case '*': // evalKey(*); break; case '#': break; case 'A': //evalKey(A); break; case 'B': //evalKey(B); break; case 'C': //evalKey(C); break; case 'D': //evalKey(D); break; } } if (Serial.available() > 0) { b=Serial.read(); // reads 1 byte switch(b) { case 'Q':{ Serial.println(curr); break; } case 'V':{ Serial.println(VERSION_STRING); break; } case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': getTool(b-'0'); }//end switch (b) }//end if serial available //Serial.println(digitalRead(Switch)); //delay(2000); } void findHome() { swVal = digitalRead(Switch); if ( swVal == LOW) { homed = true; // set homed true curr = 1; Serial.println("findHome if"); } else { digitalWrite(Relay, HIGH); // unlock turret do { // find home stepper.setCurrentPosition(0); stepper.runToNewPosition(- Steps); Serial.println("findHome do"); swVal = digitalRead(Switch); delay(250); } while (swVal == HIGH); homed = true; curr = 1; stepper.setCurrentPosition(0); digitalWrite(Relay, LOW); // lock turret } draw(); } void getTool(int T) { req = T; draw(); if (req != curr) { if (req < curr) { dist = req + 8 - curr; } else { dist = req - curr; } if (dist != 4) { if (dist > 4) { dist = dist - 8; } else { //dist = dist } } digitalWrite(Relay, HIGH); // unlock turret stepper.runToNewPosition((Steps * dist)); stepper.setCurrentPosition(0); curr = req; digitalWrite(Relay, LOW); // lock turret } draw(); Serial.println(dist); } void draw() { u8g.firstPage(); do { u8g.setFont(u8g_font_profont11); u8g.drawStr(0, 10, "HOMED"); u8g.setPrintPos(60, 10); u8g.print(homed); u8g.drawStr(0, 20, "CURR TOOL"); u8g.setPrintPos(60, 20); u8g.print(curr); u8g.drawStr(0, 30, "REQ TOOL"); u8g.setPrintPos(60, 30); u8g.print(req); } while ( u8g.nextPage() ); }