speed = distance/time calculation

hi

i have got the variables for distance (not a whole number) and time (not a whole number)

i would like to calculate a value for speed using these variables, from which i can run PWM. I have added the section of code below.

However when i have input values for both the vairable i do not get a value for 'speed1'...

any ideas why this is? and is the code i am using for my pwm correct?

speed1 = (count1 / time_1);
    
    int speed1 = abs(speed1);
    drive1 = map(speed1, 0, speed1, 0, 225);
    digitalWrite (enablePin, HIGH);
    
    if (count1 <(0))
      {
      analogWrite(motor1Pin, drive1);
      digitalWrite(motor2Pin, LOW);
      }
    if (count1 >(0))
      {
      digitalWrite(motor1Pin, LOW); 
      analogWrite(motor2Pin,drive1);   
      }

btw the pwm will control a hbridge... with terminals enable, motor1 and motor 2

In the code you are using variable speed1 before the declaration.
Besides that speed1 cannot be an int if you need to calculate with float variables like you say.

For further help it is best to post your complete sketch.

Part 1:

/*

  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 * Pot to Analog 0
 * enable pin 8
 * motor 1 pin 9
 * motor 2 pin 10
 */

#include <LiquidCrystal.h>                          // include the library code:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);             // initialize the library with the numbers of the interface pins
  
        int sensorPin = A1;                         // select the input pin for the potentiometer for time
        int sensorValue = 0;                        // variable to store the value coming from the sensor

  const int motor1Pin = 9;                          // H-bridge leg 1 (pin 9, 1A)
  const int motor2Pin = 10;                         // H-bridge leg 2 (pin 10, 2A)
  const int enablePin =8;                           // H-bridge enable pin 8
  const int PotPin = A0;                            // input pin for the potentiometer for speed/direction
  
        int x = 10;
        int zero_speed;
        int Reverse;
        int Forward;
        int sensorValue2 = 1;                       // variable to store the value coming from the sensor
        
        int value = analogRead(PotPin);             // read value from pot at sensorPin Rotation
        int speed = abs(value - 512)/2 ;            // 0..1023 -> -512.0..+512 -> 512..0..512 -> 256..0..256
        int direction = value < 512;                // or "value > 512" to reverse the action of the pot
 
        char flag;
        
        int countP = 0;
        int countPA = 0;
        int countPB = 0;
        int countPC = 0;
        int countPD = 0;
        
        int count1 = 0;
        int time_1;
        int speed1;
        int drive1;
        
        int loop_count;
        
 //*************************************************************************************
 
 void enter_point_A()                               // Subroutime "enter_point_a"
{
  lcd.clear();                                      // Clear Screen 
  lcd.setCursor(1, 0);                              // set the cursor to column 0, line 0
  lcd.print("Enter Data for");                      // Print "Enter Data for"
  lcd.setCursor(4, 1);                              // set the cursor to column 4, line 1
  lcd.print("Point A");                             // Print "Point A"
  delay(3000);                                      // Delay
  lcd.clear();                                      // Clear Screen
}

 //*************************************************************************************
   
  void Pot_SpeedA()
  {
  lcd.setCursor(0, 1);                                // set the cursor to column 0, line 1
  lcd.print("Rotation:");                             // Print "Rotation"
    
    while (digitalRead(1) == LOW)                 // if button is  not pressed 
    {
    digitalWrite (enablePin, HIGH);
    int retval = analogRead(value);
      
      if (retval < 510)
        {
        Reverse = map(retval, 0, 510, 255, 0);
        analogWrite (motor1Pin, Reverse);
        count_pulse_neg_1();
        }
        else if(retval > 518)
          {
          Forward = map(retval, 518, 1023, 0, 255);
          analogWrite (motor2Pin, Forward);
          count_pulse_pos_1();
          }
        else
          {
          analogWrite (motor1Pin, 0);
          analogWrite (motor2Pin, 0);
          lcd.setCursor(10,1);
          lcd.print(count1);
        }

  if (digitalRead(1) == HIGH)                 // if button is pressed 
    {                                         // then go to sub routine
    lcd.clear();                              // Clear Screen
    }
   }
 }
//*****************************************************************************************  
void Pot_TimeA()
{
    while (digitalRead(1) == LOW)                 // if button is  not pressed 
    {
    lcd.setCursor(0, 1);                              // set the cursor to column 0, line 0 
    lcd.print("Time:");                                // Print "Time"
    lcd.setCursor(8, 1);                              // set the cursor to column 8, line 0
    lcd.print(".");                                   // Print ":"
    lcd.setCursor(12, 1);                             // set the cursor to column 12, line 0
    lcd.print("Min");                                 // Print "Min"
    
int val = analogRead(sensorPin);            // read value from pot at sensorPin time
    time_1 = map(val, 0, 1023, 0, 600);     // map function
    
    lcd.setCursor(6,1);                       // set the cursor to column 0, line 1
    lcd.print(time_1/60);                     // Print "val/100"  
   
    lcd.setCursor(8, 1);                      // set the cursor to column 2, line 1
    lcd.print(":");                           // Print ":"
  
    lcd.setCursor(9,1);                       // set the cursor to column 3, line 1
    lcd.print(time_1/10);                     // Print "val/10"
    
    if (digitalRead(1) == HIGH)                 // if button is pressed 
       {                                           // then go to sub routine
       lcd.clear();                              // Clear Screen
       }
    }
}

//*****************************************************************************************  

void count_pulse_pos_1()

{
  if((digitalRead(13) == HIGH) && (flag == 0))
    {
    count1 ++ ;
    flag = 1;
    digitalWrite(7, HIGH);
    for (loop_count =0; loop_count < 1500; loop_count ++)
      {
        
      }
    }
   if((digitalRead(13) == LOW) && flag == 1)
      {
      flag = 0; 
      digitalWrite(7, LOW);
      for (loop_count =0; loop_count < 1500; loop_count ++)
      {
        
      }
    }  
}

//***********************************************************************  

void count_pulse_neg_1()

{
  if((digitalRead(13) == HIGH) && (flag == 0))
    {
    count1 --;
    flag = 1;
    digitalWrite(7, HIGH);
    for (loop_count =0; loop_count < 1500; loop_count ++)
      {
        
      }
    }
   if((digitalRead(13) == LOW) && flag == 1)
      {
      flag = 0;
      digitalWrite(7, LOW);
      for (loop_count =0; loop_count < 1500; loop_count ++)
      {    
    
      }
    }  
}

Part 2:

//***********************************************************************
void count_playbackF()

{
  if((digitalRead(13) == HIGH) && (flag == 0))
    {
    countP --;
    flag = 1;
    digitalWrite(7, HIGH);
    for (loop_count =0; loop_count < 1500; loop_count ++)
      {
        
      }
    }
   if(digitalRead(13) == LOW)
      {
      flag = 0;
      digitalWrite(7, LOW);
      for (loop_count =0; loop_count < 1500; loop_count ++)
      {    
    
      }
      }  
}

//***********************************************************************

void count_playbackR()

{
  if((digitalRead(13) == HIGH) && (flag == 0))
    {
    countP ++;
    flag = 1;
    digitalWrite(7, HIGH);
    for (loop_count =0; loop_count < 1500; loop_count ++)
      {
        
      }
    }
   if(digitalRead(13) == LOW)
      {
      flag = 0;
      digitalWrite(7, LOW);
      for (loop_count =0; loop_count < 1500; loop_count ++)
      {    
    
      }
      }  
}
//***********************************************************************

void zero_motor()
{
 zero_speed= map(x, 0,50,0, 255);
 lcd.setCursor(1,0);    
 lcd.print("Configuration"); 
 lcd.setCursor(2,1);    
 lcd.print("In Progress"); 
    while(1)
     {
     digitalWrite(enablePin, HIGH);
     analogWrite (motor1Pin, zero_speed);  
     digitalWrite(motor2Pin, LOW); 

      if(digitalRead(6) == HIGH)
         {
         digitalWrite(motor1Pin, LOW);  
         digitalWrite(motor2Pin, LOW); 
         lcd.clear();
         return; 
         }  
     } 
     lcd.clear();
} 

 //*************************************************************************************
 
void playback()
{

lcd.setCursor (4,0);
lcd.print("PLAYBACK");


while(1)
  {
   if (digitalRead(16) == HIGH)  
     {
     playbackA();
     }

  }
}
 //*************************************************************************************

void playbackA()
{  
  countP = 0;

  while(1) 
   {
    //lcd.setCursor (4,1);
    //lcd.print("POINT A");
    lcd.setCursor (0,1);
    lcd.print (count1);
    lcd.setCursor (4,1);
    lcd.print (countP);
    lcd.setCursor (9,1);
    lcd.print (speed1);    
    lcd.setCursor (13,1);
    lcd.print (drive1);
    
    speed1 = (count1 / time_1);
    
    int speed1 = abs(speed1);
    drive1 = map(speed1, 0, speed1, 0, 225);
    digitalWrite (enablePin, HIGH);
    
    if (count1 <(0))
      {
      analogWrite(motor1Pin, drive1);
      digitalWrite(motor2Pin, LOW);
      count_playbackF();
      }
    if (count1 >(0))
      {
      digitalWrite(motor1Pin, LOW); 
      analogWrite(motor2Pin,drive1);
      count_playbackR();    
      }
    if (count1 == countP)
      {
      digitalWrite(motor1Pin, LOW);
      digitalWrite(motor2Pin, LOW);
      break;
      }
   }

 }

//*************************************************************************************
void setup() 
{
lcd.begin(16, 2);       // set up the LCD's number of columns and rows: 
zero_motor();

enter_point_A();        // go to sub routine "enter_point_a"
Pot_SpeedA();
delay(1000);
Pot_TimeA();
}

void loop()
{
zero_motor();
zero_motor();
playback(); 
}
    speed1 = (count1 / time_1);
    
    int speed1 = abs(speed1);
    drive1 = map(speed1, 0, speed1, 0, 225);
    digitalWrite (enablePin, HIGH);

You have speed1 as a global variable. Now, you introduce speed1 as a local variable.

Later, when you refer to speed1, are you referring to the local variable or the global variable.

Having local and global variables with the same name is a very bad idea.

it was just somthing i tried i am only using it in this part of the code to give a value to use for the pwm