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. */
}
Greetings! My name is Matthew Ibarra and this is my electronic notebook for ENGR 6 - Programming for Engineers. I am currently taking this class in Fall 2017 at Mt. SAC. In this blog, you can expect to find posts about my classroom activities, laboratory experiments, code documentation, project updates, and other relevant data.
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);
}
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);
}
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);
}
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;
}
/*---------------------------------------------------*/
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;
}
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);
}
// 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);
}
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);
}
Subscribe to:
Posts (Atom)