img_8510

 

 

 

For this assignment, I studied the behavior of time and created a device that is a simple timer/clock.  Using the Arduino, I created a program that measures 30 seconds in human time, and upon reaching its goal, blinks the 2 LEDs with great joy at reaching its goal [and finishing this assignemnt] (and then quickly setting back to repeat this task over and over again).

https://youtu.be/8Q7p-kD7-nM

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Import libraries.
 #include <Servo.h></pre>
// ================================================================================
// Define constant values and global variables.
 
// The wiring assignment.
#define LED1PIN 5
#define LED2PIN 6
#define SERVO_PIN 9
#define BLINKDELAY 100 // in milliseconds
int CurrentAngle;
 
// Create an object to control the servo by declaring it. The Servo C++ class
// is defined in the Servo library.
Servo servo;
 
// ================================================================================
// Configure the hardware once after booting up. This runs once after pressing
// reset or powering up the board.
 
void setup()
{
// Initialize the serial UART at 9600 bits per second.
Serial.begin(9600);
 
// Initialize the Servo object to use the given pin for output.
servo.attach(SERVO_PIN);
}
// ================================================================================
// Linear servo movement function. This will step from the start angle to the
// end angle as requested. This emits servo updates at a constant rate. It
// does not return until the movement is complete.
//
// start - angle in degrees
// end - angle in degrees
// speed - optional argument, speed in degrees/sec
//
void linear_move(int start, int end, float speed = 6.0)
{
// Specify the number of milliseconds to wait between updates.
const int interval = 20;
 
// Compute the size of each step in degrees. Note the use of float to capture
// fractional precision. The constant converts speed units from milliseconds
// to seconds: deg/step = (deg/sec) * (sec/msec) * (msec/step)
float step = speed * 0.001 * interval;
 
// Declare a float variable to hold the current servo angle.
float angle = start;
 
// Begin a do-loop. This always executes the body at least once, and then
// iterates if the while condition is met.
do {
servo.write(angle); // update the servo output
delay(interval); // pause for the sampling interval
 
if (end >= start) {
angle += step; // movement in the positive direction
if (angle > end) angle = end;
} else {
angle -= step; // movement in the negative direction
if (angle < end) angle = end;
}
} while (angle != end);
 
// Update the servo with the exact endpoint before returning.
servo.write(end);
}
 
// ================================================================================
 
void loop()
{
 
for (int i = 0; i < 10; i++) {
CurrentAngle = 180;
linear_move(0, CurrentAngle);
 
if (CurrentAngle = 180) {
for (int i = 0; i < 3; i++) {
digitalWrite(LED1PIN, HIGH); // turn LED1 on
delay(BLINKDELAY);
digitalWrite(LED1PIN, LOW); // turn LED1 off
 
digitalWrite(LED2PIN, HIGH); // turn LED2 on
delay(BLINKDELAY);
digitalWrite(LED2PIN, LOW); // turn LED2 off
delay(BLINKDELAY);
}
}
 
linear_move(180, 0, 600);
CurrentAngle = 0;
}
}