Hello Friends , I am Tryng to make dc motor controller . which moves motor forward and reverse betweeen two values set by potentiometers and third pot is used for feedback
here s my Code
#include <SPI.h>
#include <Wire.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ezButton.h>
LiquidCrystal_I2C lcd(0x27,16,2);
ezButton select(6);
ezButton reset(7);
//ezButton home(8);
int Extension = A0 ;
int Extension_value ;
int Flexion = A1 ;
int Flexion_value ;
//int Pot_speed = A2 ;
int pot_position = A2 ;
int position_value ;
int forward = 11 ;
int forward_state ;
int reverse = 12 ;
int reverse_state;
int s_limit = 2 ;
int e_limit = 3 ;
int up = 4 ;
int dn = 5 ;
int reps = 6 ;
int menu = 7 ;
int home = 8 ;
int button1 = 0 ;
int button2 = 0 ;
int count_value = 0 ;
int prestate = 0 ;
int r = 0;
void setup() {
lcd.init();
lcd.backlight();
///////////////////////////HOMING//////////////////
while(digitalRead(s_limit)== HIGH){
digitalWrite(reverse , HIGH);
lcd.setCursor(0, 0);
lcd.print("INITIALISING PLS ");
lcd.setCursor (0 ,1);
lcd.print("WAIT.......");
delay(200);
lcd.clear();
}
/////////////////////////////////////////////
pinMode (Extension , INPUT) ;
pinMode (Flexion , INPUT) ;
// pinMode (pot_speed , INPUT) ;
pinMode (pot_position , INPUT) ;
pinMode (up , INPUT) ;
pinMode (dn , INPUT) ;
pinMode (reps , INPUT) ;
pinMode (menu , INPUT) ;
pinMode (home , INPUT) ;
pinMode (forward , OUTPUT) ;
pinMode (reverse , OUTPUT) ;
Serial.begin(115200);
digitalWrite (reverse , LOW);
digitalWrite (forward ,LOW);
}
void loop() {
button1 = digitalRead (up) ;
button2 = digitalRead (dn) ;
///////////////////Buttons////////////////////////////
if (button1 == HIGH && prestate == 0) {
count_value++;
prestate = 1;
}
else if (button2 == HIGH && prestate == 0) {
count_value--;
prestate = 1;
}
else if(button1 == LOW && button2 == LOW) {
prestate = 0;
}
if(count_value<0){
count_value = 0;
}
//////////////mapping and displaying pot values ////////////////////////////
Extension_value = analogRead (Extension) ;
Extension_value = map(Extension_value, 0, 1023, 0, 120) ;
Flexion_value = analogRead (Flexion) ;
Flexion_value = map(Flexion_value, 0, 1023, 0, 120) ;
position_value = analogRead (pot_position) ;
position_value = map(position_value, 0, 1023, 0, 120) ;
/////////////////////////////LCD PRINT/////////////////////////////////////
lcd.setCursor(0,0);
lcd.print("Ex:");
lcd.print (Extension_value);
lcd.setCursor(7,0);
lcd.print("Fx:");
lcd.print(Flexion_value);
lcd.setCursor(0,1);
lcd.print("ExAngle:");
lcd.print(position_value);
lcd.print(" Rp:");
lcd.print(count_value);
////////////////////////// NEW CODE //////////////////////////////////////////
//////////////////////// Motor Movement //////////////////////////////////////
// digitalWrite (forward , HIGH) ;
if (Flexion_value < position_value){
digitalWrite (reverse , HIGH);
digitalWrite (forward , LOW);
}
if (Extension_value > position_value){
digitalWrite (forward , HIGH);
digitalWrite (reverse , LOW);
}
// else{
// digitalWrite (reverse , LOW);
// digitalWrite (forward , HIGH);
// }
//////////////////////////////////////////////////////////////////////////
//count_value = count_value - 1 ;
}
My question is i want to execute ///motor movement//// part only when menu button is pressed and it must loop that part count value no of times which is set by up and down buttons