#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
bool activitySelected = false; // Flag to track if an activity is selected
#define BUTTON_PIN 7
int Dpin1 = 13;
int PWM1 = 12;
int Dpin2 = 11;
int PWM2 = 10;
int Dpin3 = 9;
int PWM3 = 8;
int t = 100;
int led[] = {Dpin1, PWM1, Dpin2, PWM2, Dpin3, PWM3};
int turn = 2;
void printMenu() {
Serial.println("\nPress A for Activity 3");
Serial.println("Press B for Activity 4");
Serial.println("Press C for Activity 5");
}
void setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
Wire.setClock(10000);
lcd.setCursor(2, 0);
lcd.print("Hello World!");
lcd.setCursor(1, 1);
lcd.print("Digital Logic.");
for (int i = 0; i <= 6; i++) {
pinMode(led[i], OUTPUT);
}
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.begin(9600);
printMenu();
}
void ActThree() {
Serial.print("Enter 8 character text: \n");
String text = "";
int count = 0;
while (count < 8) {
if (Serial.available()) {
String c = Serial.readString();
text += c;
c.trim();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(c);
count++;
if(c == 'E'){
count = 1;
}
}
}
Serial.print("Received text: ");
Serial.println(text);
}
void ActFour(){
Serial.print("Enter 8 character text: \n");
String text = "";
int count = 0;
while (count < 8) {
if (Serial.available()) {
String c = Serial.readString();
text += c;
c.trim();
for(int i = 0; i <= 16 + c.length(); i++){
lcd.clear();
lcd.noCursor();
lcd.setCursor(i, 0);
lcd.print(c);
lcd.setCursor(i, 1);
lcd.print(c);
delay(400);
lcd.clear();
}
count++;
}
}
Serial.print("Received text: ");
Serial.println(text);
}
void ActFive() {
int buttonState;
int lastButtonState = LOW;
int pressCount = 0;
while (true) {
buttonState = digitalRead(BUTTON_PIN);
if (buttonState == HIGH && lastButtonState == LOW) {
delay(50);
buttonState = digitalRead(BUTTON_PIN);
if (buttonState == HIGH) {
pressCount++;
if (pressCount == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pattern 1 selected");
lcd.setCursor(0, 1);
lcd.print("Pattern 2");
for(int i = 0; i<=turn; i++){
for(int i = 0; i <= 8; i++){
digitalWrite(led[i],HIGH);
delay(t);
}
for(int i = 8; i >= 0; i--){
digitalWrite(led[i],LOW);
delay(t);
}
}
} else if (pressCount == 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pattern 1");
lcd.setCursor(0, 1);
lcd.print("Pattern 2 selected");
for(int i = 0; i <= turn; i++){
for(int i = 0; i <= 2; i++){
digitalWrite(led[i],HIGH);
}
delay(500);
for(int i = 0; i <= 4; i++){
digitalWrite(led[i],LOW);
}
for(int i = 3; i <= 6; i++){
digitalWrite(led[i],HIGH);
}
delay(500);
for(int i = 3; i <= 6; i++){
digitalWrite(led[i],LOW);
}
}
}
if (pressCount >= 2) {
pressCount = 0;
}
}
}
lastButtonState = buttonState;
if (Serial.available() > 0) {
String input = Serial.readStringUntil('\n');
input.trim();
if (input.equalsIgnoreCase("Exit")) {
break;
}
}
delay(10);
}
}
void loop() {
while(Serial.available()){
char j = (char)Serial.read();
if(j == 'A'){
ActThree();
printMenu();
}
if(j == 'B'){
ActFour();
printMenu();
}
if(j == 'C'){
ActFive();
printMenu();
}
}
}