From 2eee8e28e26b0104db4b882031dc9976b82a2c6b Mon Sep 17 00:00:00 2001 From: Taras Panechko Date: Fri, 28 Mar 2025 21:09:31 +0200 Subject: [PATCH 1/3] add first lab --- .../mc_lab_01/Panechko_Taras_Lab_1/lab.ino | 150 ++++++++++++++++++ .../mc_lab_01/Panechko_Taras_Lab_1/schema.png | Bin 0 -> 41921 bytes 2 files changed, 150 insertions(+) create mode 100644 mc_labs/mc_lab_01/Panechko_Taras_Lab_1/lab.ino create mode 100644 mc_labs/mc_lab_01/Panechko_Taras_Lab_1/schema.png diff --git a/mc_labs/mc_lab_01/Panechko_Taras_Lab_1/lab.ino b/mc_labs/mc_lab_01/Panechko_Taras_Lab_1/lab.ino new file mode 100644 index 0000000..c077eb6 --- /dev/null +++ b/mc_labs/mc_lab_01/Panechko_Taras_Lab_1/lab.ino @@ -0,0 +1,150 @@ +#include +#include + +const char* ssid = "Galaxy S20 FE 5G"; +const char* password = "0985211834"; + +ESP8266WebServer server(80); + +const int ledPins[] = {13, 0, 2}; // LEDs on pins 13, 0, 2 +const int buttonPin = 15; // Button on pin 15 + +const int ledInterval = 500; // Time between LED changes +const int debounceTime = 50; // Button debounce time +const int doubleClickTime = 300; // Time for double click + +int currentLedIndex = 0; +bool reverseDirection = false; +bool isRunning = false; +bool buttonIsPressed = false; + +unsigned long lastDebounce = 0; +unsigned long lastClick = 0; +unsigned long lastWebClick = 0; + +int clickCount = 0; +int webClickCount = 0; + +void setup() { + WiFi.begin(ssid, password); + Serial.begin(115200); + + while (WiFi.status() != WL_CONNECTED) { + delay(1000); + Serial.print("."); + } + + Serial.println("\nIP Address: " + WiFi.localIP().toString()); + + pinMode(buttonPin, INPUT_PULLUP); + for (int ledPin : ledPins) { + pinMode(ledPin, OUTPUT); + } + + server.on("/", handleWebPage); + server.on("/click", handleButtonClick); + server.begin(); +} + +void loop() { + server.handleClient(); + handleButtonInput(); + handleDoubleClick(); + updateLeds(); +} + +void handleWebPage() { + String html = " +

LED Control

+ + "; + server.send(200, "text/html", html); +} + +void handleButtonClick() { + unsigned long currentTime = millis(); + + if (currentTime - lastWebClick < doubleClickTime) { + webClickCount++; + } else { + webClickCount = 1; + } + lastWebClick = currentTime; + + if (webClickCount == 2) { + isRunning = !isRunning; + if (isRunning) { + reverseDirection = !reverseDirection; + Serial.println("Direction changed (Web)"); + } + webClickCount = 0; + } + server.send(200, "text/plain", "OK"); +} + +void handleButtonInput() { + unsigned long currentTime = millis(); + int buttonState = digitalRead(buttonPin); + static bool lastButtonState = HIGH; + + if (buttonState != lastButtonState) { + lastDebounce = currentTime; + lastButtonState = buttonState; + } + + if ((currentTime - lastDebounce) > debounceTime) { + if (buttonState == LOW && !buttonIsPressed) { + buttonIsPressed = true; + if (currentTime - lastClick < doubleClickTime) { + clickCount++; + } else { + clickCount = 1; + } + lastClick = currentTime; + lastButtonState = HIGH; + } else if (buttonState == HIGH && buttonIsPressed) { + buttonIsPressed = false; + } + } +} + +void handleDoubleClick() { + if (clickCount == 2) { + isRunning = !isRunning; + clickCount = 0; + if (isRunning) { + reverseDirection = !reverseDirection; + Serial.println("Direction changed (Button)"); + } + } +} + +void updateLeds() { + if (!isRunning) { + for (int ledPin : ledPins) { + digitalWrite(ledPin, LOW); + } + return; + } + + unsigned long currentTime = millis(); + static unsigned long lastLedChange = 0; + + if (currentTime - lastLedChange > ledInterval) { + lastLedChange = currentTime; + + digitalWrite(ledPins[currentLedIndex], LOW); + + if (reverseDirection) { + currentLedIndex = (currentLedIndex - 1 + 3) % 3; + } else { + currentLedIndex = (currentLedIndex + 1) % 3; + } + + digitalWrite(ledPins[currentLedIndex], HIGH); + } +} \ No newline at end of file diff --git a/mc_labs/mc_lab_01/Panechko_Taras_Lab_1/schema.png b/mc_labs/mc_lab_01/Panechko_Taras_Lab_1/schema.png new file mode 100644 index 0000000000000000000000000000000000000000..17d6c149108ae575724e316abeb4b3b24beffeb5 GIT binary patch literal 41921 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%0A2{PeE=>Z*4etmQ_pjQQ#+o0c+na9Yx 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 literal 0 HcmV?d00001 From 2a2d78bfad532edbe398abc6327565154661935b Mon Sep 17 00:00:00 2001 From: Taras Panechko Date: Mon, 2 Jun 2025 16:46:30 +0300 Subject: [PATCH 2/3] add second lab --- .../Panechko_Taras_lab_02/.gitignore | 2 + .../Panechko_Taras_lab_02/include/README | 0 .../Panechko_Taras_lab_02/lib/README | 46 ++++ .../Panechko_Taras_lab_02/scheme/scheme.jpg | Bin 0 -> 82333 bytes .../Panechko_Taras_lab_02/src/main.cpp | 203 ++++++++++++++++++ .../Panechko_Taras_lab_02/test/README | 11 + .../Panechko_Taras_lab_02/web/index.html | 23 ++ .../Panechko_Taras_lab_02/web/main.js | 59 +++++ 8 files changed, 344 insertions(+) create mode 100644 mc_labs/mc_lab_02/Panechko_Taras_lab_02/.gitignore create mode 100644 mc_labs/mc_lab_02/Panechko_Taras_lab_02/include/README create mode 100644 mc_labs/mc_lab_02/Panechko_Taras_lab_02/lib/README create mode 100644 mc_labs/mc_lab_02/Panechko_Taras_lab_02/scheme/scheme.jpg create mode 100644 mc_labs/mc_lab_02/Panechko_Taras_lab_02/src/main.cpp create mode 100644 mc_labs/mc_lab_02/Panechko_Taras_lab_02/test/README create mode 100644 mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/index.html create mode 100644 mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/main.js diff --git a/mc_labs/mc_lab_02/Panechko_Taras_lab_02/.gitignore b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/.gitignore new file mode 100644 index 0000000..0e36b7e --- /dev/null +++ b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/.gitignore @@ -0,0 +1,2 @@ +.pio +/.idea diff --git a/mc_labs/mc_lab_02/Panechko_Taras_lab_02/include/README b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/include/README new file mode 100644 index 0000000..e69de29 diff --git a/mc_labs/mc_lab_02/Panechko_Taras_lab_02/lib/README b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/lib/README new file mode 100644 index 0000000..9379397 --- /dev/null +++ b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/lib/README @@ -0,0 +1,46 @@ + +This directory is intended for project specific (private) libraries. +PlatformIO will compile them to static libraries and link into the executable file. + +The source code of each library should be placed in a separate directory +("lib/your_library_name/[Code]"). + +For example, see the structure of the following example libraries `Foo` and `Bar`: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional. for custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- README --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +Example contents of `src/main.c` using Foo and Bar: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +The PlatformIO Library Dependency Finder will find automatically dependent +libraries by scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/mc_labs/mc_lab_02/Panechko_Taras_lab_02/scheme/scheme.jpg b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/scheme/scheme.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eae82d2b07b8e1cd3158d0cfc119c06da5ef6e0b GIT binary patch literal 82333 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%0D!Ro1Qi4Ua>x~2J#zL|haa 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 DfGjxi literal 0 HcmV?d00001 diff --git a/mc_labs/mc_lab_02/Panechko_Taras_lab_02/src/main.cpp b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/src/main.cpp new file mode 100644 index 0000000..c1a2de1 --- /dev/null +++ b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/src/main.cpp @@ -0,0 +1,203 @@ +#include +#include +#include +#include + +#define SSID "bodyaFrayer" +#define PASSWORD "12345678" +#define BLINK_INTERVAL 500 +#define HOLD_INTERVAL 500 +#define DEBOUNCE_TIME 50 +#define DOUBLE_CLICK_TIME 300 + +enum class Color { RED, YELLOW, GREEN }; + +typedef struct led_s { + const uint8_t pin; + bool state; + led_s *next; + led_s *prev; + Color color; +} led_t; + +typedef struct button_s { + uint8_t pin; + bool state; + bool wasPressed; + uint32_t pressStartTime; + uint32_t lastClickTime; + uint32_t lastDebounce; + uint8_t clickCount; + bool hardIsHeld; + bool webIsHeld; + bool serialIsHeld; + bool isPressed; + bool lastState; +} button_t; + +led_t redLED = {13, LOW, nullptr, nullptr, Color::RED}; +led_t yellowLED = {12, LOW, nullptr, nullptr, Color::YELLOW}; +led_t greenLED = {14, LOW, nullptr, nullptr, Color::GREEN}; +led_t *currentLED = &redLED; +button_t button = {16, LOW, false, 0, 0, 0, 0, false, false, false, false, HIGH}; + +AsyncWebServer server(80); +AsyncWebSocket ws("/ws"); + +bool reverseDirection = false; +bool isRunning = false; +uint32_t previousBlinkTime = 0; + +enum class Command { NONE, START, STOP }; +Command webCommand = Command::NONE; + +void setupLEDOrder() { + redLED.next = &yellowLED; + redLED.prev = &greenLED; + + yellowLED.next = &greenLED; + yellowLED.prev = &redLED; + + greenLED.next = &redLED; + greenLED.prev = &yellowLED; +} + +void pinSetup() { + pinMode(redLED.pin, OUTPUT); + pinMode(yellowLED.pin, OUTPUT); + pinMode(greenLED.pin, OUTPUT); + pinMode(button.pin, INPUT_PULLUP); +} + +void lightLEDs() { + digitalWrite(redLED.pin, redLED.state); + digitalWrite(yellowLED.pin, yellowLED.state); + digitalWrite(greenLED.pin, greenLED.state); +} + +void lightNextLED() { + uint32_t now = millis(); + if (now - previousBlinkTime >= BLINK_INTERVAL) { + previousBlinkTime = now; + currentLED->state = LOW; + + currentLED = reverseDirection ? currentLED->prev : currentLED->next; + currentLED->state = HIGH; + + lightLEDs(); + switch (currentLED->color) { + case Color::RED: ws.textAll("red"); break; + case Color::YELLOW: ws.textAll("yellow"); break; + case Color::GREEN: ws.textAll("green"); break; + } + } +} + +void turnOffLEDs() { + redLED.state = LOW; + yellowLED.state = LOW; + greenLED.state = LOW; + lightLEDs(); +} + +// --- Web control handlers --- +void handleHold(AsyncWebServerRequest *request) { + button.webIsHeld = true; + request->send_P(200, "text/html", "ok"); +} + +void handleReleased(AsyncWebServerRequest *request) { + button.webIsHeld = false; + request->send_P(200, "text/html", "ok"); +} + +void sendStartSignal(AsyncWebServerRequest *request) { + webCommand = Command::START; + request->send_P(200, "text/html", "ok"); +} + +void sendStopSignal(AsyncWebServerRequest *request) { + webCommand = Command::STOP; + request->send_P(200, "text/html", "ok"); +} + +void serverSetup() { + WiFi.softAP(SSID, PASSWORD); + LittleFS.begin(); + server.serveStatic("/", LittleFS, "/").setDefaultFile("index.html"); + server.on("/hold", HTTP_GET, handleHold); + server.on("/release", HTTP_GET, handleReleased); + server.on("/start", HTTP_GET, sendStartSignal); + server.on("/stop", HTTP_GET, sendStopSignal); + server.addHandler(&ws); + server.begin(); +} + +void handleButtonInput(uint32_t now) { + bool state = digitalRead(button.pin) == LOW; + if (state != button.lastState) { + button.lastDebounce = now; + button.lastState = state; + } + + if ((now - button.lastDebounce) > DEBOUNCE_TIME) { + if (state && !button.isPressed) { + button.isPressed = true; + if (now - button.lastClickTime < DOUBLE_CLICK_TIME) { + button.clickCount++; + } else { + button.clickCount = 1; + } + button.lastClickTime = now; + } else if (!state && button.isPressed) { + button.isPressed = false; + } + } + + if (button.clickCount == 2) { + isRunning = !isRunning; + if (isRunning) { + reverseDirection = !reverseDirection; + Serial.println("Direction changed (Button)"); + } + button.clickCount = 0; + } +} + +void checkWebCommand() { + if (webCommand == Command::START) + { + isRunning = true; + reverseDirection = !reverseDirection; + Serial.println("Direction changed (Web)"); + webCommand = Command::NONE; + } + else if (webCommand == Command::STOP) + { + isRunning = false; + webCommand = Command::NONE; + } +} + +void setup() { + Serial.begin(115200); + setupLEDOrder(); + pinSetup(); + serverSetup(); +} + +void loop() { + static uint32_t now = millis(); + + handleButtonInput(now); + checkWebCommand(); + + if (isRunning || button.webIsHeld || button.serialIsHeld || button.hardIsHeld) + { + lightNextLED(); + } + else + { + turnOffLEDs(); + } +} \ No newline at end of file diff --git a/mc_labs/mc_lab_02/Panechko_Taras_lab_02/test/README b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/test/README new file mode 100644 index 0000000..9b1e87b --- /dev/null +++ b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PlatformIO Test Runner and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PlatformIO Unit Testing: +- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html diff --git a/mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/index.html b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/index.html new file mode 100644 index 0000000..53dba45 --- /dev/null +++ b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/index.html @@ -0,0 +1,23 @@ + + + + + + + +

ESP Pushbutton Web Server

+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/main.js b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/main.js new file mode 100644 index 0000000..6ba8211 --- /dev/null +++ b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/main.js @@ -0,0 +1,59 @@ +const button1 = document.getElementById("algo1"); +const button2 = document.getElementById("algo2"); + +const holdTime = 500; +let timer1, wasHeldEnough1, timer2, wasHeldEnough2; + +button1.addEventListener('mousedown', handleHold); +button1.addEventListener('mouseup', handleRelease); +button1.addEventListener('touchstart', handleHold); +button1.addEventListener('touchend', handleRelease); + +button2.addEventListener('mousedown', handleStart); +button2.addEventListener('mouseup', handleStop); +button2.addEventListener('touchstart', handleStart); +button2.addEventListener('touchend', handleStop); + +function handleHold() { + wasHeldEnough1 = false; + timer1 = setTimeout(() => { + wasHeldEnough1 = true; + fetch('/hold').then(); + }, holdTime); +} + +function handleRelease() { + if (wasHeldEnough1) { + fetch('/release').then(); + } + clearTimeout(timer1); + wasHeldEnough1 = false; +} + +function handleStart() { + wasHeldEnough2 = false; + timer2 = setTimeout(() => { + wasHeldEnough2 = true; + fetch('/start').then(); + }, holdTime); +} + +function handleStop() { + + if (wasHeldEnough2) { + fetch('/stop').then(); + } + clearTimeout(timer2); + wasHeldEnough2 = false; +} + +const socket = new WebSocket("ws://192.168.4.1/ws"); + +socket.onmessage = (event) => { + let data = event.data; + document.querySelectorAll('.led').forEach(led => led.classList.remove('active')); + + if (data === "red") document.getElementById("red").classList.add("active"); + if (data === "yellow") document.getElementById("yellow").classList.add("active"); + if (data === "green") document.getElementById("green").classList.add("active"); +} From 421dfbc97c7bb7ec1585cb21a3efab90f6fa5248 Mon Sep 17 00:00:00 2001 From: Taras Panechko Date: Mon, 2 Jun 2025 16:46:44 +0300 Subject: [PATCH 3/3] add second lab --- .../Panechko_Taras_lab_02/web/style.css | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/style.css diff --git a/mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/style.css b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/style.css new file mode 100644 index 0000000..44b5edf --- /dev/null +++ b/mc_labs/mc_lab_02/Panechko_Taras_lab_02/web/style.css @@ -0,0 +1,75 @@ +body { + text-align: center; + margin: 0 auto; + padding-top: 30px; + background-color: #c4c4c4; +} + +.button { + padding: 10px 20px; + font-size: 24px; + text-align: center; + outline: none; + color: #fff; + background-color: #2f4468; + border: none; + border-radius: 5px; + box-shadow: 0 6px #999; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +.button:hover { + background-color: #1f2e45 +} + +.button:active { + background-color: #1f2e45; + box-shadow: 0 4px #666; + transform: translateY(2px); +} + +.ledsContainer { + width: 500px; + max-width: 100vw; + padding: 50px 10px 0 10px; + margin: 0 auto; + display: flex; + align-items: center; + justify-content: space-between; + + .led { + width: 50px; + height: 50px; + border-radius: 50%; + + &#red { + border: 5px solid red; + + &.active { + background: red; + } + } + + &#green { + border: 5px solid green; + + &.active { + background: green; + } + } + + &#yellow { + border: 5px solid yellow; + + &.active { + background: yellow; + } + } + } +} \ No newline at end of file