Friday, November 3, 2017

Day 13 - Higher Dimensional Arrays

CLASSWORK:
Power Plant Data Code
/* */
/* This program computes power averages over ten weeks. */
#include <stdio.h>
#define NROWS 8
#define NCOLS 7
#define FILENAME "power1.txt"
int main(void)
{
/* Declare variables. */
int i, j;
int power[NROWS][NCOLS], col_sum;
FILE *file_in;
/* Read information from a data file. */
file_in = fopen(FILENAME,"r");
if (file_in == NULL)
printf("Error opening input file. \n");
else
{
for (i=0; i<=NROWS-1; i++)
for (j=0; j<=NCOLS-1; j++)
fscanf(file_in,"%d",&power[i][j]);
/* Compute and print daily averages. */
for (j=0; j<=NCOLS-1; j++)
{
col_sum = 0;
for (i=0; i<=NROWS-1; i++)
col_sum += power[i][j];
printf("Day %d: Average = %.2f \n",j+1,(double)col_sum/NROWS);
}
fclose(file_in); /* Close file. */
}
return 0; /* Exit program. */
}




HOMEWORK:
Terrain Data Code:
/* */
/* This program determines the locations of peaks in an */
/* grid of elevation data; also displays highest peak & lowest */  /* valley. */
#include <stdio.h>
#include <math.h>
#define N 25
#define FILENAME "grid2.txt"
int main(void)
{
/* Declare variables. */
int nrows, ncols, i, j;
double col_initial=0;
double row_initial=6;
double peak_multiplier=100;
double elevation[N][N];
FILE *grid1;
/* Read information from a data file. */
grid1 = fopen(FILENAME,"r");
if (grid1 == NULL)
printf("Error opening input file\n");
else
{
/* Read the header from my txt file to know the # of rows and cols */
fscanf(grid1,"%d %d",&nrows,&ncols);
printf("There are %i rows and %i columns. \n", nrows, ncols);
for (i=1; i<=nrows-1; i++)
for (j=0; j<=ncols-1; j++)
{
fscanf(grid1,"%lf",&elevation[i][j]);
printf("%f ", elevation[i][j]);
if (j == ncols-1)
printf("\n");
}
/* Determine and print peak locations. */
printf("\nTop left point defined as row 1, column 0. \n");
int peak_count = 0;
int valley_count = 0;
double peak_max = 0;
double valley_min = 0;
for (i=2; i<=nrows-2; i++)
for (j=1; j<=ncols-2; j++)
if ((elevation[i-1][j]<elevation[i][j]) && // The first four lines
(elevation[i+1][j]<elevation[i][j]) && // are checking the four
(elevation[i][j-1]<elevation[i][j]) && // directly adjacent
(elevation[i][j+1]<elevation[i][j]) && // values.
(elevation[i-1][j-1]<elevation[i][j]) && // The last four lines
(elevation[i-1][j+1]<elevation[i][j]) && // are checking the four
(elevation[i+1][j-1]<elevation[i][j]) && // values diagonal to it.
(elevation[i+1][j+1]<elevation[i][j])) //------------------------
{
// Calculate distance between two pts on the grid
double d_horiz = (double)j - col_initial;
double d_vertical = (double)i - row_initial;
double peak_dist = peak_multiplier*sqrt(d_horiz*d_horiz + d_vertical*d_vertical);

// Print peak location, peak value, and distance between peak and given point
printf("\nPeak at row: %d, column: %d,\t",i,j);
printf("Value= %f, \t", elevation[i][j]);
printf("Distance from lower left corner: %5.2f feet\n", peak_dist);
peak_count++;
if (elevation[i][j] > peak_max)
{
peak_max = elevation[i][j];
}
}
else if ((elevation[i-1][j]>elevation[i][j]) &&
(elevation[i+1][j]>elevation[i][j]) &&
(elevation[i][j-1]>elevation[i][j]) &&
(elevation[i][j+1]>elevation[i][j]))
{
printf("\nValley at row: %i, column: %i,\t",i,j);
printf("Value= %f, \n", elevation[i][j]);
valley_count++;
if (elevation[i][j] < peak_max) {
valley_min = elevation[i][j];
}
}

printf("\nNumber of peaks: %i \n", peak_count);
printf("\nHighest Peak: %f \n", peak_max);
printf("\nNumber of valleys: %i \n", valley_count);
printf("\nLowest Valley: %f \n", valley_min);
fclose(grid1); /* Close file. */
}
return 0; /* Exit program. */

}

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);

}

Lab 15 - Using Transistors and Driving Motors

CLASSWORK:
Automated Motor Control w/ For Loop
//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:
Single Motor Control with Potentiometer
//Simple Motor Speed Control Program
const int MOTOR=9; //Motor on Digital Pin 9
const int LED=6;
const int POT=A2;
int val = 0;
void setup()
{
 Serial.begin (9600);
 pinMode (MOTOR, OUTPUT);
 pinMode (LED, OUTPUT);
 //pinMode (POT, INPUT);
}
void loop()
{
  val = analogRead(POT);
  val = map(val, 0, 1023, 0, 255);
  Serial.println(val);
  delay(100);
  analogWrite(MOTOR, val);
  analogWrite(LED, val);

}

Dual Motor Control with Potentiometer
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
int pot=A0;
int val=0;
int velocity=0;
void setup()
{
 Serial.begin(9600);
 pinMode(pot, INPUT);
 pinMode(M1_Left, OUTPUT);
 pinMode(M1_Right , OUTPUT);
 pinMode(M2_Left, OUTPUT);
 pinMode(M2_Right , OUTPUT);
}
void loop(){
 val=analogRead(pot);
 //val=map(val,0,1023,0,256);
 //val_left=map(val,0,512,255,0);
 //go forward
 if (val > 562){
  velocity = map(val, 563, 1023, 0, 255);
  forward(velocity);
 delay(500); //1 sg
 }
 else if (val < 462) {
  velocity = map(val, 461, 0, 0, 255);
  reverse(velocity);
  delay(500); //1 sg
 //delay(1000); //1 sg
 //stop();
 //delay(250); //250ms
 }
 else {
  velocity = 0;
  stop();
  delay(500);
 }
 Serial.print("POT val: ");
 Serial.print(val);
 Serial.print("   ");
 Serial.print("Velocity: ");
 Serial.print(velocity);
 Serial.print("   ");
// Serial.print("Inpin1: ");
// Serial.print(inPin1);
// Serial.print("   ");
// Serial.print("Inpin2: ");
// Serial.println(inPin2);
 delay(200);
}
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); 

 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); 

 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);

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

}

Day 16 - More Pointers

HOMEWORK:
El Nino Conditions:
/*------------------------*/
/* This program reads a data file of ENSO index values and */
/* determines the maximum El Nino condition in the file. */

#include <stdio.h>
#define FILENAME "ENSO.txt"
#define MAX_SIZE 10

int main(void)
{
/* Declare variables and function prototypes. */
int k = 0, year[MAX_SIZE], qtr[MAX_SIZE], max_k = 0, min_k = 0;
double index[MAX_SIZE];
FILE *enso;
/* Read sensor data file. */
enso = fopen(FILENAME, "r");
if (enso == NULL)
printf("Error opening input file. \n");
else
{
while (fscanf(enso, "%d %d %lf",year+k,qtr+k,index+k)==3)
{
//printf("%d %d %f \n", *(year+k),*(qtr+k),*(index+k));
if (*(index+k) > *(index+max_k))
{
max_k = k;
}
if (*(index+k) < *(index+max_k))
{
min_k = k;
}
k++;
}
/* Print data for maximum El Nino condition. */
printf("Maximum El Nino Conditions in Data File \n");
printf("Year: %d, Quarter: %d \n",*(year+max_k),*(qtr+max_k));
printf("Max Index Value: %f \n", *(index+max_k));

/* Print data for minimum El Nino condition. */
printf("\nMinimum El Nino Conditions in Data File \n");
printf("Year: %d, Quarter: %d \n",*(year+min_k),*(qtr+min_k));
printf("Min Index Value: %f \n", *(index+min_k));
/* Close file. */
fclose(enso);
}
/* Exit program */
return 0;
}

/*---------------------------------------------------*/

Day 17 - Pointers in Function References + Bob Ross

HOMEWORK:
Seismic Event Code:
/* This program reads a seismic data file and then */
/* determines the times of possible seismic events. */
#include <stdio.h>
#define FILENAME "seismic2.txt"
#define MAX_SIZE 1000
//#define THRESHOLD 1.5
int main(void)
{
/* Declare variables and function prototypes. */
int k, t=0, g, npts, short_window, long_window, event_count=0;
double sensor[MAX_SIZE], event[MAX_SIZE], time_incr, short_power;
double long_power, ratio, threshold, event_time;
FILE *file_ptr;
double power_w(double *ptr,int n);
/* Read sensor data file. */
file_ptr = fopen(FILENAME,"r");
if (file_ptr == NULL)
printf("Error opening input file. \n");
else
{
fscanf(file_ptr,"%d %lf",&npts,&time_incr);
printf("Time increment: %f seconds \n", time_incr);
if (npts > MAX_SIZE)
printf("Data file too large for array. \n");
else
{
/* Read data into an array. */
for (k=0; k<=npts-1; k++)
fscanf(file_ptr,"%lf",&sensor[k]);
/* Read window sizes from the keyboard. */
printf("Enter number of points for short window: \n");
scanf("%d",&short_window);
printf("Enter number of points for long window: \n");
scanf("%d",&long_window);
printf("Enter a positive number for threshold value: \n");
scanf("%lf",&threshold);
if (threshold < 1)
{
printf("Sorry, threshold must be greater than 1.");
return 0;
}

/* Compute power ratios and search for events. */
for (k=long_window-1; k<=npts-1; k++)
{
short_power = power_w(&sensor[k],short_window);
long_power = power_w(&sensor[k],long_window);
ratio = short_power/long_power;
if (ratio > threshold)
{
printf("Possible event at 180*%d seconds \n",k);
event[t] = time_incr*(double)k;
t++;
g=t;
//printf("%d \n", g);
}
else
printf("No event at 180*%d seconds \n",k);
}
/* Close file. */
fclose(file_ptr);
}
//for (t=0; t<=g-1; t++)
//printf("%f \n", event[t]);
if (g==1)
printf("Number of Events: %d\n", g);
else
{
for (t=0; t<=g-2; t++)
{
event_time = (event[t+1] - event[t]);
printf("Event time= %f \n", event_time);
//printf("Time Increment= %f \n", time_incr);
if ((int)event_time <= (int)time_incr)
{
event_count++;
//printf("Event Count= %d \n", event_count);
}
}
printf("Number of Events: %d\n", event_count);
}
}
return 0;
}
/*????????????????????????????????????????????????????????????-*/
/* This function computes the average power in a specified */
/* window of a double array. */
double power_w(double *ptr, int n)
{
/* Declare and initialize variables. */
int k;
double xsquare=0;
/* Compute sum of values squared in the array x. */
for (k=0; k<=n-1; k++)
xsquare += *(ptr-k)*(*(ptr-k));
/* Return the average squared value. */
return xsquare/n;
}


Lab 17 - Joystick Motor Control

CLASSWORK:
// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output

void setup() {
 pinMode(SW_pin, INPUT);
 digitalWrite(SW_pin, HIGH);
 Serial.begin(115200);
}
void loop() {
 Serial.print("Switch: ");
 Serial.print(digitalRead(SW_pin));
 Serial.print("\n");
 Serial.print("X-axis: ");
 Serial.print(analogRead(X_pin));
 Serial.print("\n");
 Serial.print("Y-axis: ");
 Serial.println(analogRead(Y_pin));
 Serial.print("\n\n");

 delay(500);
}

HOMEWORK:
Joystick Motor Car Control
// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output

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() {
 pinMode(SW_pin, INPUT);
 digitalWrite(SW_pin, HIGH);
 Serial.begin(115200);
}
void loop() {
 Serial.print("Switch: ");
 Serial.print(digitalRead(SW_pin));
 Serial.print("\n");
 Serial.print("X-axis: ");
 Serial.print(analogRead(X_pin));
 Serial.print("\n");
 Serial.print("Y-axis: ");
 Serial.println(analogRead(Y_pin));
 Serial.print("\n\n");
 delay(500);

if (analogRead(X_pin) >520)
{
  forward(255);
}

else if (analogRead(X_pin)<470)
{
 reverse(255);
}

else if ( analogRead(Y_pin)>500)
{
  analogWrite (M2_Left, 0); //Motor Input 1
 analogWrite(M2_Right , 255); //Motor Input 2
 //analogWrite (M2_Left, 0); //Motor Input 1
// analogWrite(M2_Right , 0); //Motor Input 2
}

else if ( analogRead(Y_pin)<485)
{
  analogWrite (M1_Left, 0); //Motor Input 1
 analogWrite(M1_Right , 255); //Motor Input 2
 //analogWrite (M2_Left, 0); //Motor Input 1
// analogWrite(M2_Right , 0); //Motor Input 2
}
 else 
    stop();

}

void forward (int rate)
{

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

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


}
void reverse (int rate)
{

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

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


}
void stop()
{

 int inPin1 = LOW;
 int inPin2 = LOW;
 digitalWrite(M1_Left, LOW);
 digitalWrite(M1_Right , LOW);

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



}

Lab 18 - Bluetooth Wireless Communication

CLASSWORK:
char data = 0; //Variable for storing received data
int sig1;
int sig2;
void setup()
{
 Serial.begin(9600); //Sets the baud for serial data transmission
 pinMode(13, OUTPUT); //Sets digital pin 13 as output pin
}
void loop()
{
 if(Serial.available() > 0) // Send data only when you receive data:
 {
 data = Serial.read(); //Read the incoming data & store into data
 Serial.print(data); //Print Value inside data in Serial monitor
 Serial.print("\n");
 if(data == '1') // Checks whether value of data is equal to 1
 {
 Serial.println("Matthew's On Signal");
 digitalWrite(13, HIGH); //If value is 1 then LED turns ON
 }
 else if(data == '0') // Checks whether value of data is equal to 0
 {
 Serial.println("Matthew's Off Signal");
 digitalWrite(13, LOW); //If value is 0 then LED turns OFF
 }
 }
}

HOMEWORK:
Motor Control with Serial IO using Bluetooth
//Motor Control w/ 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);
}