The following warnings occurred:
Warning [2] count(): Parameter must be an array or an object that implements Countable - Line: 864 - File: showthread.php PHP 7.4.33 (FreeBSD)
File Line Function
/showthread.php 864 errorHandler->error




Help with Arduino code
#1
I found a sketch on CNCZone that uses an Arduino with an I2C module on the LCD, and a 4x4 matrix keypad to control a Rotary Table. The sketch allows input of a # of degrees to move the RT.
I have adapted the code to my specific setup and have it working with the exception that it won't change direction. Will the Arduino/C++ experts please take a look at the code and see if there is something obvious. As it is, I can input # 0f degrees and cause stepper movement, repeat the movement, and reset to enter different # of degrees,but the direction option doesn't work. Either direction option moves the stepper in the same direction.

Code:
/*
Degrees only
This sketch was downloaded from http://www.cnczone.com/forums/arduino/215402-cnc.html#post1461918.
It is the first sketch in the thread. I have modified it to match my setup.

Sketch works to set # of degree to rotate, but I cannot get it to change direction.

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 = 200; //Set Steps per rotation of stepper
const int TableRatio = 90; //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 = 1;
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 Control");
  lcd.setCursor(0,2);
  lcd.print("by sloucs,on CNCZone");
  lcd.setCursor(0,3);
  lcd.print("Modified by Chucketn" );
  delay(2000);
  
}

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 Control");
   lcd.setCursor(0,2);
   lcd.print("Enter Deg & Press  #");
   lcd.setCursor(0,3);
   lcd.print("                    ");
   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 d = 0;
  lcd.setCursor(0,2);
  lcd.print("                    ");
  
  lcd.setCursor(0,3);
  lcd.print("    FWD [A]  REV [B]");
  while(d == 0)
  {
     char key = kpd.getKey();
     if(key == 'A')
  {
    d = 1;
  }
  else if(key == 'B')
  {
    d = -1;
  }
  }
   Direction = d;  
lcd.clear();  
return d;
//lcd.print(d);
//delay(2000);
}

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(8,1);
      lcd.print("Moving");
      rotation(ToMove,0);
      lcd.setCursor(8,1);
      lcd.print("      ");      
    }
    else
    {
      ToMove = Degrees*Multiplier;
      lcd.setCursor(0,0);
      lcd.print("FWD  ");
      
      lcd.print(Degrees,2);
      lcd.print((char)223);
      lcd.setCursor(8,1);
      lcd.print("Moving ");
      rotation(ToMove,1);
      lcd.setCursor(8,1);
      lcd.print("      ");
    }
    lcd.setCursor(0,1);
    lcd.print("To Cont  Press [A]");
    lcd.setCursor(0,2);
    lcd.print("To Reset Press [D]");
    char key = kpd.getKey();
    while(key != 'D')
    {
      key = kpd.getKey();
      if(key == 'A')
      {
        if(Degrees < 0)
        {
          ToMove = (Degrees*Multiplier)*-1;
          lcd.setCursor(8,1);
          lcd.print("Moving");
          rotation(ToMove,0);
          lcd.setCursor(8,1);
          lcd.print("      ");          
        }
        else
        {
          ToMove = Degrees*Multiplier;
          lcd.setCursor(8,1);
          lcd.print("Moving");
          rotation(ToMove,1);
          lcd.setCursor(8,1);
          lcd.print("      ");          
        }
      }
    }
    lcd.clear();
    
}

Thanks in advance,

Chuck
Micromark 7x14 Lathe, X2 Mill , old Green 4x6 bandsaw
The difficult takes me a while, the impossible takes a little longer.
Reply
Thanks given by:


Messages In This Thread
Help with Arduino code - by chucketn - 04-04-2015, 02:33 PM
RE: Help with Arduino code - by Vinny - 04-04-2015, 02:52 PM
RE: Help with Arduino code - by EdK - 04-04-2015, 05:21 PM
RE: Help with Arduino code - by chucketn - 04-04-2015, 06:19 PM
RE: Help with Arduino code - by EdK - 04-04-2015, 06:49 PM
RE: Help with Arduino code - by Vinny - 04-04-2015, 07:05 PM
RE: Help with Arduino code - by chucketn - 04-05-2015, 06:34 AM
RE: Help with Arduino code - by arvidj - 04-05-2015, 08:43 AM
RE: Help with Arduino code - by chucketn - 04-05-2015, 09:40 AM
RE: Help with Arduino code - by EdK - 04-05-2015, 09:57 AM
RE: Help with Arduino code - by EdK - 04-05-2015, 10:38 AM
RE: Help with Arduino code - by chucketn - 04-05-2015, 10:09 AM
RE: Help with Arduino code - by EdK - 04-05-2015, 10:19 AM
RE: Help with Arduino code - by chucketn - 04-05-2015, 12:20 PM
RE: Help with Arduino code - by EdK - 04-05-2015, 02:50 PM
RE: Help with Arduino code - by Vinny - 04-05-2015, 04:25 PM
RE: Help with Arduino code - by chucketn - 04-05-2015, 06:22 PM
RE: Help with Arduino code - by EdK - 04-05-2015, 06:49 PM
RE: Help with Arduino code - by Vinny - 04-05-2015, 06:50 PM
RE: Help with Arduino code - by EdK - 04-06-2015, 08:29 AM
RE: Help with Arduino code - by chucketn - 04-06-2015, 11:25 AM
RE: Help with Arduino code - by EdK - 04-06-2015, 11:48 AM
RE: Help with Arduino code - by Vinny - 04-06-2015, 03:47 PM
RE: Help with Arduino code - by EdK - 04-06-2015, 05:26 PM
RE: Help with Arduino code - by EdK - 04-06-2015, 05:34 PM
RE: Help with Arduino code - by Vinny - 04-06-2015, 05:41 PM
RE: Help with Arduino code - by EdK - 04-06-2015, 05:44 PM
RE: Help with Arduino code - by chucketn - 04-06-2015, 05:58 PM
RE: Help with Arduino code - by chucketn - 04-06-2015, 06:00 PM
RE: Help with Arduino code - by chucketn - 04-06-2015, 06:07 PM
RE: Help with Arduino code - by Vinny - 04-06-2015, 07:48 PM
RE: Help with Arduino code - by EdK - 04-07-2015, 05:41 AM
RE: Help with Arduino code - by chucketn - 04-07-2015, 08:02 AM
RE: Help with Arduino code - by chucketn - 04-07-2015, 08:06 AM



Users browsing this thread: 2 Guest(s)