// LABORATORY SUPPLEMENTARY ACTIVITY 1 //
// CARRANZA, ZYRABEL //
// COSME, AIRA JANE //
// SEQUENA, SEVERINO //
// MAGAT, ANGELO //
// VIDAL, WINNARD //
#include <Servo.h>
// PARA SA LEFT AND RIGHT SUPPLEMENTARY ACTIVITY
Servo servo1;
Servo servo2;
// MGA PIN ASSIGNATION PARA SA JOYSTICK, LEDS AT SERVOS
int JS = A1; //JOYSTICK
int BP = A0; //JOYSTICK BUTTON
int LLP = 2; //LEFT LED
int CLP = 4; //CENTER LED
int RLP = 3; //RIGHT LED
int servo1_pin = 8; //SERVO 1
int servo2_pin = 9; //SERVO 2
// POSITION
int x_pos; //JS POSITION
int initial_position = 90; //SERVO 1 POS
int initial_position1 = 90; //SERVO 2 POS
// INITIAL STATE OR TURN OFF BLINKS AND CLICKS
bool Leftblink = false;
bool Rightblink = false;
bool isbuttonpressed = false; // NAPINDOT BA ANG BUTTON
bool blinkAll = false; // PANG-OFF SA MGA LED
const long blinkInterval = 700; // TIME INTERVAL NG BLINK
const long buttonBlinkDuration = 700; // BUTTON CLICKED TIME INTERVAL NG PER BLINK
void setup()
{Serial.begin(9600);
servo1.attach(servo1_pin);
servo2.attach(servo2_pin);
servo1.write(initial_position);
servo2.write(initial_position1);
pinMode(JS, INPUT);
pinMode(BP, INPUT_PULLUP);
pinMode(LLP, OUTPUT);
pinMode(CLP, OUTPUT);
pinMode(RLP, OUTPUT);}
void loop()
{x_pos = analogRead(JS); // STATE NG JS
if (digitalRead(BP) == LOW) { // KUNG NAKAPINDOT BA ANG BUTTON
isbuttonpressed = true;
HAZARDS();} // ON LAHAT
else
{isbuttonpressed = false;}
if (!isbuttonpressed) { // MANGYAYARE LANG KAPAG DI NAKAPINDOT ANG BUTTON
// JS MOVE LEFT
if (x_pos < 300) {
Leftblink = true;
Rightblink = false;
digitalWrite(CLP, LOW); // OFF GITNA
updateServoLeft();}
// JS MOVE RIGHT
else if (x_pos > 700)
{Rightblink = true;
Leftblink = false;
digitalWrite(CLP, LOW); // OFF GITNA
updateServoRight();}
// PARA SA GITNA NA NAKA-ON KAPAG WALANG GINAGALAW
else
{Leftblink = false;
Rightblink = false;
digitalWrite(CLP, HIGH); // ON GITNA
resetServos();}
// PARA MACONTROL ANG MGA BLINKING LEFT OR RIGHT LEDs
if (Leftblink)
{
blinkLED(LLP);
} else {
digitalWrite(LLP, LOW); // LEFT LED OFF
}
if (Rightblink)
{
blinkLED(RLP);
}
else
{
digitalWrite(RLP, LOW); // RIGHT LED OFF
}}}
// NAPINDOT ANG JOYSTICK
void HAZARDS() {
{
digitalWrite(LLP, HIGH);
digitalWrite(CLP, LOW); //OFF GITNA
digitalWrite(RLP, HIGH);
delay(buttonBlinkDuration);
digitalWrite(LLP, LOW);
digitalWrite(RLP, LOW);
delay(buttonBlinkDuration);
// CHECK KUNG NAKAPINDOT PARIN ANG BUTTON
if (digitalRead(BP) == HIGH)
{ return; // TURN OFF ANG FUNCTION KAPAG DI NA NAKAPINDOT ANG USER
}}}
// PARA MABLINK ANG LED
void blinkLED(int ledPin) {
static bool ledState = LOW;
static unsigned long lastBlinkTime = 0;
if (millis() - lastBlinkTime >= blinkInterval)
{lastBlinkTime = millis();
ledState = !ledState;
digitalWrite(ledPin, ledState);}}
// SERVO PAPUNTANG LEFT
void updateServoLeft() {if (initial_position > 10)
{initial_position -= 20;
servo1.write(initial_position);
servo2.write(initial_position);
delay(100);}}
// SERVO PAPUNTANG RIGHT
void updateServoRight() {if (initial_position < 180)
{initial_position += 20;
servo1.write(initial_position);
servo2.write(initial_position);
delay(100);}}
// SERVO RESET
void resetServos() {initial_position = 90;
initial_position1 = 90;
servo1.write(initial_position);
servo2.write(initial_position1);}