Friday, November 3, 2017

Lab 16 - Hbridge Motor Control

CLASSWORK:
Automated Single Motor Control:
//Simple Motor Speed Control Program
const int MOTOR=9; //Motor on Digital Pin 9
const int LED=6;
const int POT=A0;
void setup()
{
 Serial.begin (9600);
 pinMode (MOTOR, OUTPUT);
 pinMode (LED, OUTPUT);
 pinMode (POT, INPUT);
}
void loop()
{
 for (int i=0; i<256; i++)
 {
 Serial.println(i);
 analogWrite(MOTOR, i);
 analogWrite(LED, i);
 delay(10);
 }
 delay(2000);
 for (int i=255; i>=0; i--)
 {
 Serial.println(i);
 analogWrite(MOTOR, i);
 analogWrite(LED, i);
 delay(10);
 }
 delay(2000);

}

HOMEWORK:
Motor Control with Serial IO
//Motor Control with Serial IO

int velocity = 255;
char data; //Holds incoming character
int M1_Left = 12; //Motor Input 1
int M1_Right = 11; //Motor Input 2
int M2_Left = 10; //Motor Input 1
int M2_Right = 9; //Motor Input 2
void setup()
{
 Serial.begin(9600); //Serial Port at 9600 baud

 Serial.println("Begin Motor Control:");
 Serial.println("");
 Serial.println("Enter number for control options:");
 Serial.println("1. Stop");
 Serial.println("2. Forward");
 Serial.println("3. Reverse");
 Serial.println("4. Read Current Speed");
 Serial.println("5. Increase Speed");
 Serial.println("6. Decrease Speed");
 Serial.println("7. Reset Speed");
}
void loop()
{
  
 //Only act when data is available in the buffer
 if (Serial.available() > 0)
 {
 data = Serial.read(); //Read byte of data
 //Turn LED on
 if (data == '1')
 {
 stop();
 Serial.println("Stop");
// Serial.println("LED ON");
 }
 //Turn LED off
  if (data == '2')
 {
 forward(velocity);
 Serial.println("Forward");
 boolean inputState = HIGH;
 }

 else if (data == '3')
 {
 reverse(velocity);
 Serial.println("Reverse");
 boolean inputState = LOW;
 }

 else if  (data == '4')
 {
 Serial.println("Velocity=");
 Serial.println(velocity);
 }

else if  (data == '5')
 {
 if(velocity<0)
 {
  velocity=1;
 }
 if(velocity>255)
 {
  velocity=255;
 }
 else {
  velocity++;
 }
 }
 else if  (data == '6')
 {
 if(velocity<0)
 {
  velocity=1;
 }
 if(velocity>255)
 {
  velocity=255;
 }
 else {
  velocity--;
 }
 }
 else if(data=='7')
{
  Serial.println("Velocity Reset");
  velocity=255;
}
 else 
 {
 stop();
 }
 }
}

void forward (int rate)
{
 //val_left=map(val,0,512,255,0);
// boolean inPin1 = LOW;
// boolean inPin2 = rate;

 int inPin1 = LOW;
 int inPin2 = rate;
 analogWrite(M1_Left, inPin1); 
 analogWrite(M1_Right , inPin2); 

 analogWrite(M2_Left, inPin1); 
 analogWrite(M2_Right , inPin2); 

// Serial.print("Inpin1: ");
// Serial.print(inPin1);
// Serial.print("   ");
// Serial.print("Inpin2: ");
// Serial.print(inPin2);
// Serial.print("   ");
//
// Serial.print("Rate: ");
// Serial.println(rate);
}

void reverse (int rate)
{
 //val_left=map(val,0,512,255,0);
// boolean inPin1 = rate;
// boolean inPin2 = LOW;
 int inPin1 = rate;
 int inPin2 = LOW;
 analogWrite(M1_Left, inPin1); 
 analogWrite(M1_Right , inPin2); 

 analogWrite(M2_Left, inPin1); 
 analogWrite(M2_Right , inPin2); 

// Serial.print("Inpin1: ");
// Serial.print(inPin1);
// Serial.print("   ");
// Serial.print("Inpin2: ");
// Serial.print(inPin2);
// Serial.print("   ");
//
// Serial.print("Rate: ");
// Serial.println(rate);
}
void stop()
{
// boolean inPin1 = LOW;
// boolean inPin2 = LOW;
 int inPin1 = LOW;
 int inPin2 = LOW;
 digitalWrite(M1_Left, LOW);
 digitalWrite(M1_Right , LOW);

 digitalWrite(M2_Left, LOW);
 digitalWrite(M2_Right , LOW);

// Serial.print("Inpin1: ");
// Serial.print(inPin1);
// Serial.print("   ");
// Serial.print("Inpin2: ");
// Serial.println(inPin2);

}

No comments:

Post a Comment