Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions mc_labs/mc_lab_01/Staryk_Vitalii_Lab_01/1_LED.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
#define LED1_PIN 0
#define LED2_PIN 14
#define LED3_PIN 13

#define BUTTON_PIN 12

extern bool isBlinking;
extern unsigned long prevMillis;
extern const int blinkInterval;
extern unsigned long timerStart;
extern bool timerActive;
extern int ledState;
extern int pauseState;
extern int ledCount;
extern int timer;

int stepState = 0;

void initLEDs() {
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
}

void updateLEDs() {
if (digitalRead(BUTTON_PIN) == LOW && isBlinking) {
isBlinking = false;
timerActive = true;
timerStart = millis();
pauseState = getActiveLed();
Serial.println("Button pressed, pausing LEDs for 15 sec");
}

if (timerActive && millis() - timerStart >= timer) {
isBlinking = true;
timerActive = false;
Serial.println("15 seconds passed, resuming blinking");
}

if (isBlinking) {
unsigned long currentMillis = millis();
if (currentMillis - prevMillis >= blinkInterval) {
prevMillis = currentMillis;

digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
digitalWrite(LED3_PIN, LOW);

int currentLed = getCurrentLed();
switch (currentLed) {
case 0: digitalWrite(LED1_PIN, HIGH); break;
case 1: digitalWrite(LED2_PIN, HIGH); break;
case 2: digitalWrite(LED3_PIN, HIGH); break;
}

stepState++;
if (stepState > 2) {
stepState = 0;
ledState = (ledState + 1) % ledCount;
}
}
} else {
digitalWrite(LED1_PIN, pauseState == 0 ? HIGH : LOW);
digitalWrite(LED2_PIN, pauseState == 1 ? HIGH : LOW);
digitalWrite(LED3_PIN, pauseState == 2 ? HIGH : LOW);
}
}

int getCurrentLed() {
if (stepState == 0) {
return ledState;
} else if (stepState == 1) {
if (ledState == 0) return 2;
if (ledState == 1) return 0;
if (ledState == 2) return 1;
} else if (stepState == 2) {
return ledState;
}
return ledState;
}

int getActiveLed() {
return getCurrentLed();
}
48 changes: 48 additions & 0 deletions mc_labs/mc_lab_01/Staryk_Vitalii_Lab_01/1_laboratory.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

#define BUTTON_PIN 12

bool isBlinking = true;
unsigned long prevMillis = 0;
const int blinkInterval = 500;
unsigned long timerStart = 0;
bool timerActive = false;
int ledState = 0;
int pauseState = LOW;
int ledCount = 3;
int timer = 15000;

const char* ssid = "netis";
const char* password = "password";

ESP8266WebServer server(80);

void updateLEDs();
void web();
void webToggle();
void initLEDs();

void setup() {
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP);

WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected! IP: " + WiFi.localIP().toString());

initLEDs();

server.on("/", web);
server.on("/toggle", webToggle);
server.begin();
}

void loop() {
server.handleClient();
updateLEDs();
}
51 changes: 51 additions & 0 deletions mc_labs/mc_lab_01/Staryk_Vitalii_Lab_01/1_web_server.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#include <ESP8266WebServer.h>

extern ESP8266WebServer server;

extern bool isBlinking;
extern unsigned long timerStart;
extern bool timerActive;
extern int pauseState;
extern int ledState;
extern int ledCount;
extern int timer;

void web() {
String html = "<html>\
<head>\
<meta name='viewport' content='width=device-width, initial-scale=1'>\
<style>\
body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; }\
button { font-size: 20px; padding: 10px 20px; background: navy; color: white; border: none; cursor: pointer; }\
button:hover { background: darkblue; }\
</style>\
<script>\
function toggleLED() {\
var xhr = new XMLHttpRequest();\
xhr.open('GET', 'toggle', true);\
xhr.send();\
}\
</script>\
</head>\
<body>\
<h2>ESP Pushbutton Web Server</h2>\
<button onclick='toggleLED()'>LED PUSHBUTTON</button>\
</body>\
</html>";

server.send(200, "text/html", html);
}

void webToggle() {
isBlinking = !isBlinking;

if (!isBlinking) {
timerActive = true;
timerStart = millis();
pauseState = ledState;

Serial.println("Web button pressed, pausing LEDs for 15 sec");
}

server.send(200, "text/plain", "Toggled");
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed mc_labs/mc_lab_01/Завдання №1(MK).pdf
Binary file not shown.
49 changes: 49 additions & 0 deletions mc_labs/mc_lab_02/Staryk_Vitalii_Lab_02/M_ESP/M_ESP.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

const int CMD_STOP_L = 65;
const int CMD_STOP_M = 66;

const char* ssid = "iPhone de Vitaliy";
const char* password = "iphone14";

ESP8266WebServer server(80);

const int leds[] = {2, 13, 14};
const int numLeds = sizeof(leds) / sizeof(leds[0]);
const int buttonPin = 16;
const int ledBlinkDuration = 15000;

int currentLed = 0;
bool stopRequested = false;
unsigned long stopTime = 0;

extern void setupLeds();
extern void blinkLeds();
extern bool shouldStopLeds();

extern void setupWiFi();
extern void setupServer();
extern void handleWebRequests();
extern void checkRX();

extern void setupButton();
extern void checkButton();

void setup() {
Serial.begin(115200);
setupWiFi();
setupLeds();
setupButton();
setupServer();
}

void loop() {
handleWebRequests();
checkRX();
checkButton();

if (!shouldStopLeds()) {
blinkLeds();
}
}
27 changes: 27 additions & 0 deletions mc_labs/mc_lab_02/Staryk_Vitalii_Lab_02/M_ESP/M_LED.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
extern const int leds[];
extern const int numLeds;
extern int currentLed;
extern bool stopRequested;
extern unsigned long stopTime;

void setupLeds() {
for (int i = 0; i < numLeds; i++) {
pinMode(leds[i], OUTPUT);
digitalWrite(leds[i], LOW);
}
}

void blinkLeds() {
digitalWrite(leds[currentLed], LOW);
currentLed = (currentLed + 1) % numLeds;
digitalWrite(leds[currentLed], HIGH);
delay(500);
}

bool shouldStopLeds() {
if (stopRequested && millis() - stopTime < ledBlinkDuration) {
return true;
}
stopRequested = false;
return false;
}
105 changes: 105 additions & 0 deletions mc_labs/mc_lab_02/Staryk_Vitalii_Lab_02/M_ESP/M_Server.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
#include <ESP8266WebServer.h>

extern ESP8266WebServer server;
extern const char* ssid;
extern const char* password;

extern bool stopRequested;
extern unsigned long stopTime;
extern const int CMD_STOP_L;
extern const int CMD_STOP_M;

void handleRoot() {
String html = "<html>\
<head>\
<meta name='viewport' content='width=device-width, initial-scale=1'>\
<style>\
body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; }\
.led-box { display: inline-block; width: 50px; height: 50px; margin: 10px; border-radius: 10px; border: 2px solid black; }\
.off { background: #333; }\
.on { background: red; }\
button { font-size: 20px; padding: 10px; margin: 5px; background: navy; color: white; border: none; cursor: pointer; }\
button:hover { background: darkblue; }\
</style>\
<script>\
function sendCommand(cmd) {\
var xhr = new XMLHttpRequest();\
xhr.open('GET', '/send?cmd=' + encodeURIComponent(cmd), true);\
xhr.send();\
}\
function updateLEDs() {\
var xhr = new XMLHttpRequest();\
xhr.open('GET', '/status', true);\
xhr.onreadystatechange = function() {\
if (xhr.readyState == 4 && xhr.status == 200) {\
var activeLed = parseInt(xhr.responseText);\
for (var i = 0; i < 3; i++) {\
document.getElementById('led' + i).className = 'led-box ' + (i == activeLed ? 'on' : 'off');\
}\
}\
};\
xhr.send();\
}\
setInterval(updateLEDs, 500);\
</script>\
</head>\
<body>\
<h2>ESP_L Controller</h2>\
<div>\
<div id='led0' class='led-box off'></div>\
<div id='led1' class='led-box off'></div>\
<div id='led2' class='led-box off'></div>\
</div>\
<button onclick='sendCommand(65)'>Stop ESP_L</button>\
<button onclick='sendCommand(66)'>Stop ESP_M</button>\
</body>\
</html>";
server.send(200, "text/html", html);
}

void handleSendCommand() {
if (server.hasArg("code")) {
int code = server.arg("code").toInt();
Serial.println("Received command via web: " + String(code));

if (code == CMD_STOP_L) {
stopRequested = true;
stopTime = millis();
server.send(200, "text/plain", "ESP_L stopped");
} else if (code == CMD_STOP_M) {
Serial.write(CMD_STOP_M);
server.send(200, "text/plain", "Sent stop command to ESP_M");
}
} else {
server.send(400, "text/plain", "Invalid command");
}
}

void checkRX() {
if (Serial.available() > 0) {
int received = Serial.read();
Serial.println("Received via RX: " + String(received));

if (received == CMD_STOP_L || received == CMD_STOP_M) {
stopRequested = true;
stopTime = millis();
}
}
}

void setupWiFi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}

void setupServer() {
server.on("/", handleRoot);
server.on("/send", handleSendCommand);
server.begin();
}

void handleWebRequests() {
server.handleClient();
}
14 changes: 14 additions & 0 deletions mc_labs/mc_lab_02/Staryk_Vitalii_Lab_02/M_ESP/M_button.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
extern const int buttonPin;
extern bool stopRequested;
extern unsigned long stopTime;

void setupButton() {
pinMode(buttonPin, INPUT);
}

void checkButton() {
if (digitalRead(buttonPin) == HIGH) {
stopRequested = true;
stopTime = millis();
}
}
Loading
Loading