Share:
Notifications
Clear all

Code not working  

  RSS

1936b87ece3729930112824b2c89da19?s=80&d=mm&r=g
(@frabraha)
New Member
Joined: 4 years ago
Posts: 2
03/10/2016 8:03 pm  

I’ve build the startracker using arduino UNO, A4988 and NEMA 17 motor.

I’ve connected everything, and added the code (a little modified). I can hear that the motor has power and is on. But when I press start, nothing happens.

What is wrong?

#define  BACK_PIN  13
#define  STOP_PIN  12
#define  START_PIN 11
#define  ENABLE_PIN 6
#define  DIR_PIN 5
#define  LED_ON_PIN 10
#define  LED_OFF_PIN 9
#define  LED_BACK_PIN 8


#define COMINGUPSPEED 1.25
#define LENGTH 228
// Calculus here:
#define STEP ((2*3.14159)/1436)*LENGTH //rotational velocity of the small gear

#define RPS (STEP/(60*0.2549))/COMINGUPSPEED //rotational velocity of the large gear

#define ZERO_SPEED 65535
#define STEPS_PER_REV 3200     // 200 steps motor with 1/16 microstepping
#define MAX_RPM (RPS*60.0)   

// BIT functions
#define CLR(x,y) (x&=(~(1<<y)))
#define SET(x,y) (x|=(1<<y))

//uint16_t rpm;
float rpm;
uint16_t period;
uint16_t userCommand=0;
uint8_t motor_enable;

// TIMER 1: STEP INTERRUPT
ISR(TIMER1_COMPA_vect)
{
  if (motor_enable)
    {
    SET(PORTB,4);
    delayMicroseconds(2);
    CLR(PORTB,4);
    }
}

void setRpm()
{
  float temp;
  if (rpm == 0)
  {
    ICR1 = ZERO_SPEED;
    digitalWrite(ENABLE_PIN,HIGH);  // Disable motor
  }
  else
  {
    digitalWrite(ENABLE_PIN,LOW);  // Enable motor
 /*   if (rpmMAX_RPM)
      rpm = MAX_RPM;
    temp = (rpm/60.0)*STEPS_PER_REV;
    temp = 2000000 / temp;          //  2000000 = (16000000/8) timer1 16Mhz with 1/8 preescaler
    if (period<600000)
      period=60000;
    period = temp;
    while (TCNT1  ICR1)     // Handle when we need to reset the timer
      TCNT1=0;
    //sei();
  }
}

int buttonSTARTState = 0; 
int buttonSTOPState = 0; 
int buttonBACKState = 0; 
int ENABLEState = 1;
int DIRState = 0;
int LED_ON_State = 0;
int LED_OFF_State = 0;
int LED_BACK_State = 0;

void setup() {

  // Set up the three button inputs, with pullups
  pinMode(BACK_PIN, INPUT_PULLUP);
  pinMode(STOP_PIN, INPUT_PULLUP);
  pinMode(START_PIN, INPUT_PULLUP);
  pinMode(ENABLE_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(LED_ON_PIN, OUTPUT);
  pinMode(LED_OFF_PIN, OUTPUT);
  pinMode(LED_BACK_PIN, OUTPUT);

  Serial.begin(115200);
  digitalWrite(LED_OFF_PIN, HIGH);
  motor_enable = 0;
    // PWM SETUP
  // Fast PWM mode => TOP:ICR1
  TCCR1A =(1<<WGM11);           
//  TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS10);   //No Prescaler, Fast PWM
   TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS11);   // Prescaler 1:8, Fast PWM
  ICR1 = ZERO_SPEED;
  TIMSK1 = (1<<OCIE1A);  // Enable Timer interrupt
  
  rpm = 0;
  
  while (digitalRead(START_PIN)==HIGH);    // Wait until START button is pressed
  motor_enable = 1;
  digitalWrite(LED_OFF_PIN, LOW);
  digitalWrite(LED_ON_PIN, HIGH);
  delay(250);
  while (digitalRead(START_PIN)==LOW);
}

void loop() {

  buttonSTARTState = digitalRead(START_PIN);
  buttonSTOPState = digitalRead(STOP_PIN);
  buttonBACKState = digitalRead(BACK_PIN);
  ENABLEState = digitalRead(ENABLE_PIN);
  DIRState = digitalRead(DIR_PIN);
  LED_ON_State = digitalRead(LED_ON_PIN);
  LED_OFF_State = digitalRead(LED_OFF_PIN);
  LED_BACK_State = digitalRead(LED_BACK_PIN);

 if (digitalRead(START_PIN)==LOW)   // START/STOP Button pressed?
    {
    rpm = 0;
    userCommand=0;
    setRpm();
    if (motor_enable == 1)
      motor_enable = 0;
    else
      motor_enable = 1;
    while (digitalRead(START_PIN)==LOW);   // Wait until botton release
    }
    if (digitalRead(BACK_PIN)==LOW)   //  Button BACK pressed?
    {
         digitalWrite(DIR_PIN,HIGH);    // Motor direction

          rpm=50; 
        setRpm();
  
        if (motor_enable == 1)
          motor_enable = 0;
        else
          motor_enable = 1;
         
    while (digitalRead(BACK_PIN)==LOW);   // Wait until botton release
    }
     if (motor_enable)
      {
        rpm++;
        digitalWrite(LED_ON_PIN,HIGH);
      }
      else
      {
        rpm = 0;
        digitalWrite(LED_ON_PIN,LOW);
      }
  
 if (digitalRead(STOP_PIN)==LOW)   // Decrease button
    {
    digitalWrite(LED_ON_PIN,LOW);
    userCommand--;
    while (digitalRead(STOP_PIN)==LOW);  // Wait until released
    }
  if (digitalRead(BACK_PIN)==LOW)   // Increase button
    {
    digitalWrite(LED_ON_PIN,LOW);
    userCommand++;
    while (digitalRead(BACK_PIN)==LOW);  // Wait until released
    }
}

Quote
1936b87ece3729930112824b2c89da19?s=80&d=mm&r=g
(@frabraha)
New Member
Joined: 4 years ago
Posts: 2
07/10/2016 9:10 am  

I’ve updated the code. Still can’t figure out what’s wrong.

I checked and rechecked everything. Found out that the leds was connected wrong. Now they all work. But still no go on the motor. I can hear that the motor humz when power is connected and makes a clunk noise when I press the buttons. But it still wont move.

I tried to change the pins for the motor, but same result. It humz when power is connected and makes clunky noises when I the buttons.

Anyone have any suggestions on how to fix it?

#define  BACK_PIN  13
#define  STOP_PIN  12
#define  START_PIN 11
#define  ENABLE_PIN 6
#define  DIR_PIN 5
#define  LED_ON_PIN 10
#define  LED_OFF_PIN 9
#define  LED_BACK_PIN 8


#define COMINGUPSPEED 1.25
#define LENGTH 228
// Calculus here:
#define STEP ((2*3.14159)/1436)*LENGTH //rotational velocity of the small gear

#define RPS (STEP/(60*0.2549))/COMINGUPSPEED //rotational velocity of the large gear

#define ZERO_SPEED 65535
#define STEPS_PER_REV 3200     // 200 steps motor with 1/16 microstepping
#define MAX_RPM (RPS*60.0)   

// BIT functions
#define CLR(x,y) (x&=(~(1<<y)))
#define SET(x,y) (x|=(1<<y))

//uint16_t rpm;
float rpm;
uint16_t period;
uint16_t userCommand=0;
uint8_t motor_enable;

// TIMER 1: STEP INTERRUPT
ISR(TIMER1_COMPA_vect)
{
  if (motor_enable)
    {
    SET(PORTB,4);
    delayMicroseconds(2);
    CLR(PORTB,4);
    }
}

void setRpm()
{
  float temp;
  if (rpm == 0)
  {
    ICR1 = ZERO_SPEED;
    digitalWrite(ENABLE_PIN,HIGH);  // Disable motor
  }
  else
  {
    digitalWrite(ENABLE_PIN,LOW);  // Enable motor
 /*   if (rpmMAX_RPM)
      rpm = MAX_RPM;
    temp = (rpm/60.0)*STEPS_PER_REV;
    temp = 2000000 / temp;          //  2000000 = (16000000/8) timer1 16Mhz with 1/8 preescaler
    if (period<600000)
      period=60000;
    period = temp;
    while (TCNT1  ICR1)     // Handle when we need to reset the timer
      TCNT1=0;
    //sei();
  }
}

int buttonSTARTState = 0; 
int buttonSTOPState = 0; 
int buttonBACKState = 0; 
int ENABLEState = 1;
int DIRState = 0;
int LED_ON_State = 0;
int LED_OFF_State = 0;
int LED_BACK_State = 0;

void setup() {

  // Set up the three button inputs, with pullups
  pinMode(BACK_PIN, INPUT_PULLUP);
  pinMode(STOP_PIN, INPUT_PULLUP);
  pinMode(START_PIN, INPUT_PULLUP);
  pinMode(ENABLE_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(LED_ON_PIN, OUTPUT);
  pinMode(LED_OFF_PIN, OUTPUT);
  pinMode(LED_BACK_PIN, OUTPUT);

  Serial.begin(115200);
  digitalWrite(LED_OFF_PIN, HIGH);
  motor_enable = 0;
    // PWM SETUP
  // Fast PWM mode => TOP:ICR1
  TCCR1A =(1<<WGM11);           
//  TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS10);   //No Prescaler, Fast PWM
   TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS11);   // Prescaler 1:8, Fast PWM
  ICR1 = ZERO_SPEED;
  TIMSK1 = (1<<OCIE1A);  // Enable Timer interrupt
  
  rpm = 0;
  
  while (digitalRead(START_PIN)==HIGH);    // Wait until START button is pressed
  motor_enable = 1;
  digitalWrite(LED_OFF_PIN, LOW);
  digitalWrite(LED_ON_PIN, HIGH);
  delay(250);
  while (digitalRead(START_PIN)==LOW);
}

void loop() {

 if (digitalRead(START_PIN)==LOW)   // START/STOP Button pressed?
    {
    rpm = 0;
    userCommand=0;
    setRpm();
    if (motor_enable == 1)
      motor_enable = 0;
    else
      motor_enable = 1;
    while (digitalRead(START_PIN)==LOW);   // Wait until botton release
    }
    if (digitalRead(BACK_PIN)==LOW)   //  Button BACK pressed?
    {
         digitalWrite(DIR_PIN,HIGH);    // Motor direction

          rpm=50; 
        setRpm();
  
        if (motor_enable == 1)
          motor_enable = 0;
        else
          motor_enable = 1;
         
    while (digitalRead(BACK_PIN)==LOW);   // Wait until botton release
    }
     if (motor_enable)
      {
        rpm++;
        digitalWrite(LED_ON_PIN,HIGH);
      }
      else
      {
        rpm = 0;
        digitalWrite(LED_ON_PIN,LOW);
      }
  
 if (digitalRead(STOP_PIN)==LOW)   // Decrease button
    {
    digitalWrite(LED_ON_PIN,LOW);
    userCommand--;
    while (digitalRead(STOP_PIN)==LOW);  // Wait until released
    }
  if (digitalRead(BACK_PIN)==LOW)   // Increase button
    {
    digitalWrite(LED_ON_PIN,LOW);
    userCommand++;
    while (digitalRead(BACK_PIN)==LOW);  // Wait until released
    }
}

2196=154 StarTracker parts bb 2


ReplyQuote
275024ff50a20318a5b12fb3ace69c25?s=80&d=mm&r=g
(@anton-mark)
Estimable Member Customer
Joined: 5 years ago
Posts: 175
12/10/2016 7:15 pm  

I’ve updated the code. Still can’t figure out what’s wrong.

I checked and rechecked everything. Found out that the leds was connected wrong. Now they all work. But still no go on the motor. I can hear that the motor humz when power is connected and makes a clunk noise when I press the buttons. But it still wont move.

I tried to change the pins for the motor, but same result. It humz when power is connected and makes clunky noises when I the buttons.

Anyone have any suggestions on how to fix it?

#define  BACK_PIN  13
#define  STOP_PIN  12
#define  START_PIN 11
#define  ENABLE_PIN 6
#define  DIR_PIN 5
#define  LED_ON_PIN 10
#define  LED_OFF_PIN 9
#define  LED_BACK_PIN 8


#define COMINGUPSPEED 1.25
#define LENGTH 228
// Calculus here:
#define STEP ((2*3.14159)/1436)*LENGTH //rotational velocity of the small gear

#define RPS (STEP/(60*0.2549))/COMINGUPSPEED //rotational velocity of the large gear

#define ZERO_SPEED 65535
#define STEPS_PER_REV 3200     // 200 steps motor with 1/16 microstepping
#define MAX_RPM (RPS*60.0)   

// BIT functions
#define CLR(x,y) (x&=(~(1<<y)))
#define SET(x,y) (x|=(1<<y))

//uint16_t rpm;
float rpm;
uint16_t period;
uint16_t userCommand=0;
uint8_t motor_enable;

// TIMER 1: STEP INTERRUPT
ISR(TIMER1_COMPA_vect)
{
  if (motor_enable)
    {
    SET(PORTB,4);
    delayMicroseconds(2);
    CLR(PORTB,4);
    }
}

void setRpm()
{
  float temp;
  if (rpm == 0)
  {
    ICR1 = ZERO_SPEED;
    digitalWrite(ENABLE_PIN,HIGH);  // Disable motor
  }
  else
  {
    digitalWrite(ENABLE_PIN,LOW);  // Enable motor
 /*   if (rpmMAX_RPM)
      rpm = MAX_RPM;
    temp = (rpm/60.0)*STEPS_PER_REV;
    temp = 2000000 / temp;          //  2000000 = (16000000/8) timer1 16Mhz with 1/8 preescaler
    if (period<600000)
      period=60000;
    period = temp;
    while (TCNT1  ICR1)     // Handle when we need to reset the timer
      TCNT1=0;
    //sei();
  }
}

int buttonSTARTState = 0; 
int buttonSTOPState = 0; 
int buttonBACKState = 0; 
int ENABLEState = 1;
int DIRState = 0;
int LED_ON_State = 0;
int LED_OFF_State = 0;
int LED_BACK_State = 0;

void setup() {

  // Set up the three button inputs, with pullups
  pinMode(BACK_PIN, INPUT_PULLUP);
  pinMode(STOP_PIN, INPUT_PULLUP);
  pinMode(START_PIN, INPUT_PULLUP);
  pinMode(ENABLE_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(LED_ON_PIN, OUTPUT);
  pinMode(LED_OFF_PIN, OUTPUT);
  pinMode(LED_BACK_PIN, OUTPUT);

  Serial.begin(115200);
  digitalWrite(LED_OFF_PIN, HIGH);
  motor_enable = 0;
    // PWM SETUP
  // Fast PWM mode => TOP:ICR1
  TCCR1A =(1<<WGM11);           
//  TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS10);   //No Prescaler, Fast PWM
   TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS11);   // Prescaler 1:8, Fast PWM
  ICR1 = ZERO_SPEED;
  TIMSK1 = (1<<OCIE1A);  // Enable Timer interrupt
  
  rpm = 0;
  
  while (digitalRead(START_PIN)==HIGH);    // Wait until START button is pressed
  motor_enable = 1;
  digitalWrite(LED_OFF_PIN, LOW);
  digitalWrite(LED_ON_PIN, HIGH);
  delay(250);
  while (digitalRead(START_PIN)==LOW);
}

void loop() {

 if (digitalRead(START_PIN)==LOW)   // START/STOP Button pressed?
    {
    rpm = 0;
    userCommand=0;
    setRpm();
    if (motor_enable == 1)
      motor_enable = 0;
    else
      motor_enable = 1;
    while (digitalRead(START_PIN)==LOW);   // Wait until botton release
    }
    if (digitalRead(BACK_PIN)==LOW)   //  Button BACK pressed?
    {
         digitalWrite(DIR_PIN,HIGH);    // Motor direction

          rpm=50; 
        setRpm();
  
        if (motor_enable == 1)
          motor_enable = 0;
        else
          motor_enable = 1;
         
    while (digitalRead(BACK_PIN)==LOW);   // Wait until botton release
    }
     if (motor_enable)
      {
        rpm++;
        digitalWrite(LED_ON_PIN,HIGH);
      }
      else
      {
        rpm = 0;
        digitalWrite(LED_ON_PIN,LOW);
      }
  
 if (digitalRead(STOP_PIN)==LOW)   // Decrease button
    {
    digitalWrite(LED_ON_PIN,LOW);
    userCommand--;
    while (digitalRead(STOP_PIN)==LOW);  // Wait until released
    }
  if (digitalRead(BACK_PIN)==LOW)   // Increase button
    {
    digitalWrite(LED_ON_PIN,LOW);
    userCommand++;
    while (digitalRead(BACK_PIN)==LOW);  // Wait until released
    }
}

Hmm… I am not sure the Arduino UNO can handle the original code (It only has one internal TIMER, the Arduino Leonardo has 2)…


ReplyQuote
9e1a2fe016660801d8f857fb4fe11b42?s=80&d=mm&r=g
(@croccy22)
New Member
Joined: 4 years ago
Posts: 4
08/04/2017 7:53 pm  

Did you ever get yours working. I have exactly the same issue but am also using an UNO. I have a Leonardo turning up tomorrow so will see if that works. Have put some simple stepper motor code on it and that works fine so everything appears to be wired up correctly.


ReplyQuote
9e1a2fe016660801d8f857fb4fe11b42?s=80&d=mm&r=g
(@croccy22)
New Member
Joined: 4 years ago
Posts: 4
13/04/2017 11:13 am  

Did you ever get yours working. I have exactly the same issue but am also using an UNO. I have a Leonardo turning up tomorrow so will see if that works. Have put some simple stepper motor code on it and that works fine so everything appears to be wired up correctly.

Just in case anyone comes across this issue. The Leonardo did indeed solve this issue. So the UNO will not work for this project.


ReplyQuote
d5b943becf78d952f7234ce3140137ca?s=80&d=mm&r=g
(@umairaslam)
New Member Guest
Joined: 2 years ago
Posts: 3
04/02/2019 6:18 pm  

After installation, launch VS Code. Now open the Command Palette (⇧⌘P) and type shell command to find the Shell Command: Install ‘code’ command in PATH command.


ReplyQuote
d5b943becf78d952f7234ce3140137ca?s=80&d=mm&r=g
(@umairaslam)
New Member Guest
Joined: 2 years ago
Posts: 3
04/02/2019 6:18 pm  

After installation, launch VS Code. Now open the Command Palette (⇧⌘P) and type shell command to find the Shell Command: Install ‘code’ command in PATH command.


ReplyQuote
d5b943becf78d952f7234ce3140137ca?s=80&d=mm&r=g
(@umairaslam)
New Member Guest
Joined: 2 years ago
Posts: 3
04/02/2019 6:19 pm  

After installation, launch VS Code. Now open the Command Palette (⇧⌘P) and type shell command to find the Shell Command: Install ‘code’ command in PATH command.


ReplyQuote
Share: