rotary table programming

Home Model Engine Machinist Forum

Help Support Home Model Engine Machinist Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
hello Bruce
when I test the program it tells me
Compilation error: Keypad.h: No such file or directory
best regard André
First thing you need to do is add this library Keypad.h to your Arduino IE.
If you do not know how to do it watch this video


Second recopy the program and paste in your Arduino IE.
I have tried it and Arduino IE 2.3.2 had no problems compiling the code.

Sketch uses 8734 bytes (27%) of program storage space. Maximum is 32256 bytes.
Global variables use 590 bytes (28%) of dynamic memory, leaving 1458 bytes for local variables. Maximum is 2048 bytes.

/*
A program for controlling a single stepper motor driving a rotary table.
Uses a 4x4 matrix keypad for entry of degrees and direction to move the table.
Serial I2C display, Pololu stepper driver.
*/

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'.','0','#','D'}
};
byte rowPINS[ROWS] = {11,10,9,8};
byte colPINS[COLS] = {7,6,5,4};
Keypad kpd = Keypad(makeKeymap(keys),rowPINS,colPINS, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x20 for a 16 chars and 2 line display
//setup vars
const int stp = 12; //connect pin 12 to step
const int dir = 13; // connect pin 13 to dir
const int StepsPerRotation = 400; //Set Steps per rotation of stepper
const int TableRatio = 72; //ratio of rotary table
const int Multiplier = (StepsPerRotation * TableRatio)/360;
const int stepdelay = 1;
float Degrees = 0; //Degrees from Serial input
float ToMove = 0; //Steps to move
int Direction;
int repeat = 0;


void setup()
{
lcd.init(); // initialize the lcd
pinMode(stp, OUTPUT);
pinMode(dir, OUTPUT);

// Print welcome message to the LCD.
lcd.backlight();
lcd.print("Rotary Table Control");
lcd.setCursor(0,2);
lcd.print(" CrankyTechGuy CNC");
lcd.setCursor(0,3);
lcd.print(" Copyright 2014");
delay(2000);
lcd.init();
}
void rotation(float tm, int d)
{
if(d == 0)
{
digitalWrite(dir, LOW);
}
else
{
digitalWrite(dir, HIGH);
}

for(int i = 0; i < tm; i++)
{
digitalWrite(stp, HIGH);
delay(stepdelay);
digitalWrite(stp, LOW);
delay(stepdelay);
}
}
float GetNumber()
{
float num = 0.00;
float decimal = 0.00;
float decnum = 0.00;
int counter = 0;
char key = kpd.getKey();
lcd.print("Rotary Table Control");
lcd.setCursor(0,2);lcd.print("Enter degrees then");lcd.setCursor(0,3);lcd.print("press [#].");
lcd.setCursor(8,1);
bool decOffset = false;
while(key != '#')
{
switch (key)
{
case NO_KEY:
break;

case '.':
if(!decOffset)
{
decOffset = true;
}
lcd.print(key);
break;

case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
if(!decOffset)
{
num = num * 10 + (key - '0');
lcd.print(key);
}
else if((decOffset) && (counter <= 1))
{
num = num * 10 + (key - '0');
lcd.print(key);
counter++;
}
break;
}
decnum = num / pow(10, counter);
key = kpd.getKey();
}
return decnum;
}
int GetDirection()
{
int dir = 0;
lcd.setCursor(0,2);lcd.print(" ");

lcd.setCursor(0,3);
lcd.print(" FWD[A] REV");
while(dir == 0)
{
char key = kpd.getKey();
if(key == 'A')
{
dir = 1;
}
else if(key == 'B')
{
dir = -1;
}
}

lcd.clear();
return dir;
}
void loop()
{
if(repeat == 0)
{
Degrees = GetNumber();
Direction = GetDirection();
}

Degrees = Degrees * Direction;
if(Degrees < 0)
{
ToMove = (Degrees*Multiplier)*-1;
lcd.setCursor(0,0);
lcd.print("REV ");
lcd.print(abs(Degrees),2);lcd.print((char)223);
lcd.setCursor(6,1);
lcd.print("Moving");
rotation(ToMove,0);
lcd.setCursor(6,1);
lcd.print(" ");
}
else
{
ToMove = Degrees*Multiplier;
lcd.setCursor(0,0);
lcd.print("FWD ");
lcd.print(Degrees,2);lcd.print((char)223);
lcd.setCursor(6,1);
lcd.print("Moving");
rotation(ToMove,1);
lcd.setCursor(6,1);
lcd.print(" ");
}
lcd.setCursor(0,2);
lcd.print("Repeat[A] Cancel");
char key = kpd.getKey();
while(key != 'B')
{
key = kpd.getKey();
if(key == 'A')
{
if(Degrees < 0)
{
ToMove = (Degrees*Multiplier)*-1;
lcd.setCursor(6,1);
lcd.print("Moving");
rotation(ToMove,0);
lcd.setCursor(6,1);
lcd.print(" ");
}
else
{
ToMove = Degrees*Multiplier;
lcd.setCursor(6,1);
lcd.print("Moving");
rotation(ToMove,1);
lcd.setCursor(6,1);
lcd.print(" ");
}
}
}
lcd.clear();

}
 
Last edited:

Latest posts

Back
Top