Linear Actuator - RobotGeeks Code 1 works but Code 2 doesn't

I've had my starter kit for about a month and I've been playing around with mini linear servos. Since bigger linear servos are pricey, I'm going to try using a linear actuator. I'm having problems with the second code in RobotGeeks tutorial, "Control a Large Linear Actuator with Arduino". The first section controls in/out with two push buttons. The second half builds on that same code and adds preset positions for the buttons. When I play them back to back, the first code to runs perfectly, but the second won't do anything. My actuator has a 2" stroke and the feedback I was getting on the serial monitor on the first code was 61 in and 235 out. I tried adjusting the starting and preset numbers to reflect that but it didn't seem to make a difference. I did noticed was after uploading the first code, each relay had an LED on, with the second code, one one relay will light up. The serial monitor also shows the "goal" to be higher than the current position and that it is moving but neither button does anything other than change the goal number on the serial monitor as it's scrolling. The second code is similar to what I want to accomplish which is to have 3 buttons that will move to three different positions. I'm using an Arduino Uno, Progressive Automations PA-14P-2-50 (with feedback), LC-200 10amp 2 channel relay from Progressive, breadboard, transistors and switches from the starter kit. The diagrams is how I have it wired which is how he shows it but I must be missing something. Thanks for the help!

tutorial https://www.instructables.com/Control-a-Large-Linear-Actuator-With-Arduino/

PA-14-2-50 Linear Actuator With Feedback and Potentiometer - Progressive Automations
LC-200 2 Channel Relay Module - Progressive Automations

/*

Linear Actuator Control using preset position
 
This demo shows how to do basic control of a large linear
actuator using an Arduino and two buttons. Each button is hard
coded with a preset position. Pressing a button will move
the actuator to that position.
 
 The circuit:
 * RobotGeek Pushbutton - Digital Pin 1
 * RobotGeek Pushbutton - Digital Pin 2
 * RobotGeek Relay - Digital Pin 4 
 * RobotGeek Relay - Digital Pin 7 
 
Products Used in this demo:
 - http://www.robotgeek.com/linear-actuators
 - http://www.robotgeek.com/robotgeek-geekduino-sensor-kit
 - http://www.robotgeek.com/robotGeek-pushbutton
 - http://www.robotgeek.com/robotgeek-relay
 
 */

// constants won't change. They're used here to set pin numbers:
const int button1Pin = 2;     // the number of the pushbutton1 pin
const int button2Pin = 4;     // the number of the pushbutton2 pin
const int relay1Pin =  7;      // the number of the Realy1 pin
const int relay2Pin =  8;      // the number of the Relay2 pin
const int sensorPin = 0;    // select the input pin for the potentiometer

// variables will change:
int button1State = 0;         // variable for reading the pushbutton status
int button2State = 0;         // variable for reading the pushbutton status
int sensorValue = 0;  // variable to store the value coming from the sensor

int goalPosition = 350; 
int CurrentPosition = 0; 
boolean Extending = false;
boolean Retracting = false;

void setup() { 

  //start serial connection
  Serial.begin(9600);

  // initialize the pushbutton pin as an input:
  pinMode(button1Pin, INPUT);     
  pinMode(button2Pin, INPUT);    
  // initialize the relay pin as an output:
  pinMode(relay1Pin, OUTPUT);    
  pinMode(relay2Pin, OUTPUT);    
  
  //preset the relays to LOW
  digitalWrite(relay1Pin, LOW); 
  digitalWrite(relay2Pin, LOW); 
  
}

void loop(){
  
  // read the value from the sensor:
  CurrentPosition = analogRead(sensorPin); 
  
  // print the results to the serial monitor:
  Serial.print("Current = " );                       
  Serial.print(CurrentPosition);      
  Serial.print("\t Goal = ");      
  Serial.println(goalPosition);  
  
  // read the state of the pushbutton values:
  button1State = digitalRead(button1Pin);
  button2State = digitalRead(button2Pin);

  if (button1State == HIGH) {     
    // set new goal position
    goalPosition = 300; 
    
    if (goalPosition > CurrentPosition) {
        Retracting = false;
        Extending = true;
        digitalWrite(relay1Pin, HIGH);  
        digitalWrite(relay2Pin, LOW);  
        Serial.println("Extending");     
    }      
    else if (goalPosition < CurrentPosition) {
        Retracting = true;
        Extending = false;
        digitalWrite(relay1Pin, LOW);  
        digitalWrite(relay2Pin, HIGH); 
        Serial.println("Retracting");         
    }  
  }

  if (button2State == HIGH) {     
    // set new goal position
    goalPosition = 500; 
    
    if (goalPosition > CurrentPosition) {
        Retracting = false;
        Extending = true;
        digitalWrite(relay1Pin, HIGH);  
        digitalWrite(relay2Pin, LOW);  
        Serial.println("Extending");   
    }        
    else if (goalPosition < CurrentPosition) {
        Retracting = true;
        Extending = false;
        digitalWrite(relay1Pin, LOW);  
        digitalWrite(relay2Pin, HIGH); 
        Serial.println("Retracting");         
    }  
  }

  if (Extending = true && CurrentPosition > goalPosition) {
    //we have reached our goal, shut the relay off
    digitalWrite(relay1Pin, LOW); 
    boolean Extending = false; 
    Serial.println("IDLE");  
  }
  
  if (Retracting = true && CurrentPosition < goalPosition){
    //we have reached our goal, shut the relay off
    digitalWrite(relay2Pin, LOW); 
    boolean Retracting = false; 
    Serial.println("IDLE");  
  }
  
}

Your post was MOVED to its current location as it is more suitable

What made you think that it was an Introductory Tutorial ?

The "=" is an assignment, not a comparison.

Thank you UKHeliBob, well I wasn't real sure where it should go. I figured since it was a tutorial and not my programing, that I was asking for help with what I was doing wrong and not with what is wrong with the program or tutorial. I didn't think about the tutorial help being specific to tutorials on this site. Thanks again for the correction and the help! Robby

So I completely rewired and believe the ground jumper wire on the 2 channel relay was bad. It appears to be trying to work but it's chattering really bad and I think it's because it's overshooting the setpoint, so that's where I'm headed to next.

Thank you for the reply DrDiettrich, I changed both arguments
if (Extending = true && CurrentPosition > goalPosition){
if (Retracting = true && CurrentPosition < goalPosition){
to
if (Extending == true && CurrentPosition > goalPosition){
if (Retracting == true && CurrentPosition < goalPosition){
I do understand the difference now, thank you.
It didn't seem to help at this time, I think my wiring was one of my problems. Thanks!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.