Simplify stylesheet and copy to clean Light/Dark layout without emojis

This commit is contained in:
ertunc-ozbay 2026-10-21 20:19:11 +03:00
parent 15b97948dd
commit cd61dc9ac8
14 changed files with 809 additions and 1417 deletions

View file

@ -1,9 +1,9 @@
# Ertunç Özbay — Embedded Systems & Hardware Engineering Studio (`ertuncozbay.dev`) # ertuncozbay.dev
This repository contains the static HTML5, CSS3, and vanilla JavaScript source code for **[https://ertuncozbay.dev](https://ertuncozbay.dev)**, self-hosted on a Debian 12 Google Cloud VM with **Caddy** (automatic Let's Encrypt TLS/HTTP3) and **Forgejo** (**[https://git.ertuncozbay.dev](https://git.ertuncozbay.dev)**). Personal website and project notes for Ertunç Özbay (Electrical and Electronics Engineering student at Bülent Ecevit University).
## Architecture Plain HTML, CSS, and vanilla JavaScript served by Caddy on Debian 12.
- **Web Server:** Caddy (`/var/www/ertuncozbay.dev`)
- **Self-Hosted Git Server:** Forgejo (`https://git.ertuncozbay.dev/ertunc-ozbay`) - Website: https://ertuncozbay.dev
- **UI Themes:** 3-Mode Studio Theme Switcher (`🎨 Colorful` default, `🌈 Neon`, `📐 Blueprint`) - Git repositories: https://git.ertuncozbay.dev/ertunc-ozbay
- **Contact:** `ertunc.ozbay@outlook.com` - Contact: ertunc.ozbay@outlook.com

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>About — Ertunç Özbay</title> <title>About - Ertunç Özbay</title>
<meta name="description" content="About Ertunç Özbay: Electrical and Electronics Engineering student at Bülent Ecevit University, exploring hardware, software, embedded systems, C, Rust, and reverse engineering."> <meta name="description" content="About Ertunç Özbay: Electrical and Electronics Engineering student at Bülent Ecevit University, exploring hardware, software, embedded systems, C, Rust, and reverse engineering.">
<link rel="icon" type="image/svg+xml" href="assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="assets/images/favicon.svg">
<link rel="stylesheet" href="assets/css/style.css?v=2"> <link rel="stylesheet" href="assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="#main-content">Skip to main content</a> <a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -50,7 +46,7 @@
<main id="main-content"> <main id="main-content">
<div class="container"> <div class="container">
<section class="workshop-hero" aria-labelledby="about-heading"> <section class="workshop-hero" aria-labelledby="about-heading">
<span class="workshop-eyebrow">⚡ ABOUT // IDENTITY &amp; ENGINEERING APPROACH</span> <span class="workshop-eyebrow"> ABOUT // IDENTITY &amp; ENGINEERING APPROACH</span>
<h1 id="about-heading"><span class="gradient-title">About Me &amp; This Engineering Studio</span></h1> <h1 id="about-heading"><span class="gradient-title">About Me &amp; This Engineering Studio</span></h1>
<p class="hero-lead"> <p class="hero-lead">
I am an Electrical &amp; Electronics Engineering student at Bülent Ecevit University who builds hardware, writes low-level C and Rust software, and learns by going deeper than the first explanation. I am an Electrical &amp; Electronics Engineering student at Bülent Ecevit University who builds hardware, writes low-level C and Rust software, and learns by going deeper than the first explanation.
@ -58,7 +54,7 @@
</section> </section>
<section class="section-block reading-width" aria-labelledby="story-heading"> <section class="section-block reading-width" aria-labelledby="story-heading">
<span class="section-label">01 // Who I Am</span> <span class="section-label">Who I Am</span>
<h2 id="story-heading">Learning by Building and Investigating</h2> <h2 id="story-heading">Learning by Building and Investigating</h2>
<p> <p>
My interests span both hardware and software. I do not want to limit myself to only one layer of a system—I want to understand how physical components, electronics, firmware, and higher-level software work together. My interests span both hardware and software. I do not want to limit myself to only one layer of a system—I want to understand how physical components, electronics, firmware, and higher-level software work together.
@ -79,7 +75,7 @@
</figure> </figure>
<section class="section-block reading-width" aria-labelledby="philosophy-heading"> <section class="section-block reading-width" aria-labelledby="philosophy-heading">
<span class="section-label">02 // Hardware, Software &amp; AI Philosophy</span> <span class="section-label">Hardware, Software &amp; AI Philosophy</span>
<h2 id="philosophy-heading">Why I Want to Understand Both Sides of a System</h2> <h2 id="philosophy-heading">Why I Want to Understand Both Sides of a System</h2>
<div class="callout-box amber"> <div class="callout-box amber">
<span class="callout-title">Core Principle</span> <span class="callout-title">Core Principle</span>
@ -100,7 +96,7 @@
<section class="section-block" aria-labelledby="interests-heading"> <section class="section-block" aria-labelledby="interests-heading">
<div class="section-header"> <div class="section-header">
<div> <div>
<span class="section-label">03 // Technical Stack</span> <span class="section-label">Technical Stack</span>
<h2 id="interests-heading">Areas I Am Building &amp; Exploring</h2> <h2 id="interests-heading">Areas I Am Building &amp; Exploring</h2>
</div> </div>
</div> </div>
@ -153,7 +149,7 @@
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="projects/index.html">Projects</a></li> <li><a href="projects/index.html">Projects</a></li>
@ -166,6 +162,6 @@
</div> </div>
</footer> </footer>
<script src="assets/js/main.js?v=2"></script> <script src="assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load diff

View file

@ -1,157 +1,80 @@
/* ========================================================================== /**
Ertunç Özbay — Workshop & Portfolio Script (Plain JS, No Dependencies) * Ertunç Özbay — Personal Engineering Website
Handles: * Theme toggle (Light / Dark), copy helpers, and image zoom
1. Prominent Multi-Theme Switcher (🎨 Colorful Studio [Default] | 🌈 Neon | 📐 Blueprint) */
2. Accessible mobile navigation menu toggle (with Escape key support)
3. Static blog category filtering on the Blog page
4. One-click copy buttons for Email addresses and Code/Command blocks
5. Image lightbox for hardware prototype photos and schematics
========================================================================== */
(function () { (function () {
"use strict"; "use strict";
// 1. Multi-Theme Switcher (Colorful Default, Cyber Neon, Blueprint Lab) var STORAGE_KEY = "ertunc_site_theme";
var rootEl = document.documentElement; var root = document.documentElement;
var validThemes = ["colorful", "neon", "blueprint"];
var savedTheme = "colorful";
try { function applyTheme(theme) {
var stored = localStorage.getItem("eo-studio-theme"); var mode = theme === "dark" ? "dark" : "light";
if (stored && validThemes.indexOf(stored) !== -1) { root.setAttribute("data-theme", mode);
savedTheme = stored;
}
} catch (e) {}
function applyTheme(themeName) {
if (validThemes.indexOf(themeName) === -1) {
themeName = "colorful";
}
rootEl.setAttribute("data-theme", themeName);
try { try {
localStorage.setItem("eo-studio-theme", themeName); localStorage.setItem(STORAGE_KEY, mode);
} catch (e) {} } catch (e) {}
var buttons = document.querySelectorAll("[data-set-theme]"); document.querySelectorAll(".theme-btn[data-set-theme]").forEach(function (btn) {
buttons.forEach(function (btn) { var isMatch = btn.getAttribute("data-set-theme") === mode;
var isTarget = btn.getAttribute("data-set-theme") === themeName; btn.classList.toggle("active", isMatch);
btn.setAttribute("aria-pressed", isTarget ? "true" : "false"); btn.setAttribute("aria-pressed", isMatch ? "true" : "false");
}); });
} }
applyTheme(savedTheme); var saved = null;
try {
saved = localStorage.getItem(STORAGE_KEY);
} catch (e) {}
applyTheme(saved === "dark" ? "dark" : "light");
document.addEventListener("click", function (event) { document.querySelectorAll(".theme-btn[data-set-theme]").forEach(function (btn) {
var themeBtn = event.target.closest("[data-set-theme]"); btn.addEventListener("click", function () {
if (themeBtn) { applyTheme(btn.getAttribute("data-set-theme"));
applyTheme(themeBtn.getAttribute("data-set-theme")); });
}
}); });
// 2. Mobile Navigation Toggle // Copy Email Button
var navToggle = document.querySelector("[data-nav-toggle]"); var copyEmailBtns = document.querySelectorAll("[data-copy-email]");
var siteNav = document.querySelector("[data-site-nav]"); copyEmailBtns.forEach(function (btn) {
if (navToggle && siteNav) {
navToggle.addEventListener("click", function () {
var isExpanded = navToggle.getAttribute("aria-expanded") === "true";
var nextState = !isExpanded;
navToggle.setAttribute("aria-expanded", String(nextState));
siteNav.classList.toggle("is-open", nextState);
var labelSpan = navToggle.querySelector("[data-nav-label]");
if (labelSpan) {
labelSpan.textContent = nextState ? "Close" : "Menu";
}
});
document.addEventListener("keydown", function (event) {
if (event.key === "Escape" && siteNav.classList.contains("is-open")) {
navToggle.setAttribute("aria-expanded", "false");
siteNav.classList.remove("is-open");
var labelSpan = navToggle.querySelector("[data-nav-label]");
if (labelSpan) {
labelSpan.textContent = "Menu";
}
navToggle.focus();
}
});
}
// 3. Blog Category Filter
var filterButtons = document.querySelectorAll("[data-blog-filter]");
var blogCards = document.querySelectorAll("[data-blog-category]");
var filterStatus = document.getElementById("blog-filter-status");
if (filterButtons.length > 0 && blogCards.length > 0) {
filterButtons.forEach(function (button) {
button.addEventListener("click", function () {
var selectedCategory = button.getAttribute("data-blog-filter");
filterButtons.forEach(function (btn) {
btn.setAttribute("aria-pressed", btn === button ? "true" : "false");
});
var visibleCount = 0;
blogCards.forEach(function (card) {
var categories = (card.getAttribute("data-blog-category") || "").split(",");
var match = selectedCategory === "all" || categories.indexOf(selectedCategory) !== -1;
card.hidden = !match;
if (match) {
visibleCount += 1;
}
});
if (filterStatus) {
filterStatus.textContent =
"Showing " + visibleCount + (visibleCount === 1 ? " entry" : " entries") +
(selectedCategory === "all" ? "." : " in selected category.");
}
});
});
}
// 4. Copy Email to Clipboard Buttons
var copyEmailButtons = document.querySelectorAll("[data-copy-email]");
copyEmailButtons.forEach(function (btn) {
btn.addEventListener("click", function () { btn.addEventListener("click", function () {
var email = btn.getAttribute("data-copy-email"); var email = btn.getAttribute("data-copy-email") || "ertunc.ozbay@outlook.com";
if (!email || !navigator.clipboard) return; if (!navigator.clipboard) return;
var originalText = btn.textContent;
navigator.clipboard.writeText(email).then(function () { navigator.clipboard.writeText(email).then(function () {
btn.textContent = "✓ Copied: " + email; var orig = btn.textContent;
btn.textContent = "Copied: " + email;
setTimeout(function () { setTimeout(function () {
btn.textContent = originalText; btn.textContent = orig;
}, 2200);
});
});
});
// 5. Copy Code / Terminal Commands Buttons
var copyCodeButtons = document.querySelectorAll("[data-copy-code]");
copyCodeButtons.forEach(function (btn) {
btn.addEventListener("click", function () {
var windowEl = btn.closest(".code-window");
if (!windowEl || !navigator.clipboard) return;
var preEl = windowEl.querySelector("pre");
if (!preEl) return;
var originalText = btn.textContent;
navigator.clipboard.writeText(preEl.innerText).then(function () {
btn.textContent = "✓ Copied!";
setTimeout(function () {
btn.textContent = originalText;
}, 2000); }, 2000);
}); });
}); });
}); });
// 6. Image Lightbox for Hardware Photos & Schematics // Copy Code Block Button
document.querySelectorAll("[data-copy-code]").forEach(function (btn) {
btn.addEventListener("click", function () {
var wrapper = btn.closest(".code-window");
if (!wrapper) return;
var codeEl = wrapper.querySelector("pre code");
if (!codeEl || !navigator.clipboard) return;
navigator.clipboard.writeText(codeEl.textContent).then(function () {
var orig = btn.textContent;
btn.textContent = "Copied";
setTimeout(function () {
btn.textContent = orig;
}, 1800);
});
});
});
// Image Lightbox
var zoomImages = document.querySelectorAll(".zoomable-img"); var zoomImages = document.querySelectorAll(".zoomable-img");
if (zoomImages.length > 0) { if (zoomImages.length > 0) {
var backdrop = document.createElement("div"); var backdrop = document.createElement("div");
backdrop.className = "lightbox-backdrop"; backdrop.className = "lightbox-backdrop";
backdrop.hidden = true; backdrop.hidden = true;
backdrop.innerHTML = backdrop.innerHTML =
'<button type="button" class="lightbox-close" aria-label="Close image preview">✕ Close (Esc)</button>' + '<button type="button" class="lightbox-close" aria-label="Close image preview">Close (Esc)</button>' +
'<img class="lightbox-Backdrop-img" src="" alt="">' + '<img class="lightbox-Backdrop-img" src="" alt="">' +
'<div class="lightbox-caption"></div>'; '<div class="lightbox-caption"></div>';
document.body.appendChild(backdrop); document.body.appendChild(backdrop);
@ -182,16 +105,4 @@
if (e.key === "Escape" && !backdrop.hidden) closeLightbox(); if (e.key === "Escape" && !backdrop.hidden) closeLightbox();
}); });
} }
// 7. Upgrade self-hosted Git links when accessed via ertuncozbay.dev domain
if (window.location.hostname.indexOf("ertuncozbay.dev") !== -1) {
document.querySelectorAll('a[href*="34.57.151.250:3000"]').forEach(function (a) {
a.href = a.href.replace("http://34.57.151.250:3000", "https://git.ertuncozbay.dev");
});
document.querySelectorAll(".code-window pre code").forEach(function (codeEl) {
codeEl.textContent = codeEl.textContent
.replace(/http:\/\/34\.57\.151\.250:3000/g, "https://git.ertuncozbay.dev")
.replace(/http:\/\/34\.57\.151\.250/g, "https://ertuncozbay.dev");
});
}
})(); })();

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Blog &amp; Build Notes — Ertunç Özbay</title> <title>Blog &amp; Build Notes - Ertunç Özbay</title>
<meta name="description" content="Static technical blog and learning notebook by Ertunç Özbay covering project build logs, embedded systems, circuit experiments, and C/Rust programming."> <meta name="description" content="Static technical blog and learning notebook by Ertunç Özbay covering project build logs, embedded systems, circuit experiments, and C/Rust programming.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css?v=2"> <link rel="stylesheet" href="../assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="#main-content">Skip to main content</a> <a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -50,7 +46,7 @@
<main id="main-content"> <main id="main-content">
<div class="container"> <div class="container">
<section class="workshop-hero" aria-labelledby="blog-heading"> <section class="workshop-hero" aria-labelledby="blog-heading">
<span class="workshop-eyebrow">📓 TECHNICAL NOTEBOOK // STATIC BLOG</span> <span class="workshop-eyebrow"> TECHNICAL NOTEBOOK // STATIC BLOG</span>
<h1 id="blog-heading"><span class="gradient-title">Blog &amp; Build Notes</span></h1> <h1 id="blog-heading"><span class="gradient-title">Blog &amp; Build Notes</span></h1>
<p class="hero-lead"> <p class="hero-lead">
Where I document hardware build logs, ESP-IDF firmware architecture, circuit debugging stories, and honest reflections on what worked and what failed. Where I document hardware build logs, ESP-IDF firmware architecture, circuit debugging stories, and honest reflections on what worked and what failed.
@ -82,7 +78,7 @@
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-draft">Starter Note</span> <span class="badge badge-draft">Starter Note</span>
<time datetime="2026-10-14">October 14, 2026</time> <time datetime="2026-10-14">October 14, 2026</time>
<span>• 3 min read</span> <span>· 3 min read</span>
</div> </div>
<h3><a href="welcome-to-my-workshop-note.html">Why I Built This Personal Workshop &amp; Learning Notebook</a></h3> <h3><a href="welcome-to-my-workshop-note.html">Why I Built This Personal Workshop &amp; Learning Notebook</a></h3>
<p> <p>
@ -103,9 +99,9 @@
<article class="card card-synth" data-blog-category="template,build-logs"> <article class="card card-synth" data-blog-category="template,build-logs">
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-experimental">Template • Draft</span> <span class="badge badge-experimental">Template · Draft</span>
<time datetime="2026-10-14">Template File</time> <time datetime="2026-10-14">Template File</time>
<span>• 2 min read</span> <span>· 2 min read</span>
</div> </div>
<h3><a href="post-template.html">[Template] Project Build Log &amp; Technical Note Template</a></h3> <h3><a href="post-template.html">[Template] Project Build Log &amp; Technical Note Template</a></h3>
<p> <p>
@ -129,7 +125,7 @@
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="../projects/index.html">Projects</a></li> <li><a href="../projects/index.html">Projects</a></li>
@ -142,6 +138,6 @@
</div> </div>
</footer> </footer>
<script src="../assets/js/main.js?v=2"></script> <script src="../assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>[Template] Project Build Log &amp; Technical Note — Blog — Ertunç Özbay</title> <title>[Template] Project Build Log &amp; Technical Note - Blog - Ertunç Özbay</title>
<meta name="description" content="Reusable static HTML article template for Ertunç Özbay's engineering blog and build logs."> <meta name="description" content="Reusable static HTML article template for Ertunç Özbay's engineering blog and build logs.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css?v=2"> <link rel="stylesheet" href="../assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="#main-content">Skip to main content</a> <a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -56,13 +52,12 @@
<article class="reading-width"> <article class="reading-width">
<header class="workshop-hero"> <header class="workshop-hero">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-experimental">Template • Draft</span> <span class="badge badge-experimental">Template · Draft</span>
<time datetime="2026-10-14">YYYY-MM-DD</time> <time datetime="2026-10-14">YYYY-MM-DD</time>
<span>• Category: Build Log / Technical Note</span> <span>· Category: Build Log / Technical Note</span>
</div> </div>
<h1><span class="gradient-title">[Template] Project Build Log &amp; Technical Note Title</span></h1> <h1><span class="gradient-title">[Template] Project Build Log &amp; Technical Note Title</span></h1>
<p class="hero-lead"> <p class="hero-lead">Copy this file to create a new static build log entry with hardware notes, copyable code windows, and lessons learned.
Copy this file to create a new static build log entry with hardware notes, copyable code windows, and lessons learned.
</p> </p>
</header> </header>
@ -72,10 +67,10 @@
<div class="code-window"> <div class="code-window">
<div class="code-window-header"> <div class="code-window-header">
<span class="code-window-title"> <span class="code-window-title">
<span class="code-dots"><span class="code-dot red"></span><span class="code-dot amber"></span><span class="code-dot green"></span></span> <span class="code-dot amber"></span><span class="code-dot green"></span></span>
c99 — Example Firmware Snippet c99 - Example Firmware Snippet
</span> </span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Code</button> <button type="button" class="copy-code-btn" data-copy-code>Copy Code</button>
</div> </div>
<pre><code>// Example code block in post template <pre><code>// Example code block in post template
void app_main(void) { void app_main(void) {
@ -93,7 +88,7 @@ void app_main(void) {
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="../projects/index.html">Projects</a></li> <li><a href="../projects/index.html">Projects</a></li>
@ -106,6 +101,6 @@ void app_main(void) {
</div> </div>
</footer> </footer>
<script src="../assets/js/main.js?v=2"></script> <script src="../assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Why I Built This Personal Workshop &amp; Learning Notebook — Blog — Ertunç Özbay</title> <title>Why I Built This Personal Workshop &amp; Learning Notebook - Blog - Ertunç Özbay</title>
<meta name="description" content="Starter note explaining why Ertunç Özbay built a static workshop notebook for hardware, software, and open-source learning."> <meta name="description" content="Starter note explaining why Ertunç Özbay built a static workshop notebook for hardware, software, and open-source learning.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css?v=2"> <link rel="stylesheet" href="../assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="#main-content">Skip to main content</a> <a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -58,8 +54,8 @@
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-draft">Starter Note</span> <span class="badge badge-draft">Starter Note</span>
<time datetime="2026-10-14">October 14, 2026</time> <time datetime="2026-10-14">October 14, 2026</time>
<span>• Category: Personal Learning Reflections</span> <span>· Category: Personal Learning Reflections</span>
<span>• Reading time: 3 min read</span> <span>· Reading time: 3 min read</span>
</div> </div>
<h1><span class="gradient-title">Why I Built This Personal Workshop &amp; Learning Notebook</span></h1> <h1><span class="gradient-title">Why I Built This Personal Workshop &amp; Learning Notebook</span></h1>
<p class="hero-lead"> <p class="hero-lead">
@ -108,7 +104,7 @@
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="../projects/index.html">Projects</a></li> <li><a href="../projects/index.html">Projects</a></li>
@ -121,6 +117,6 @@
</div> </div>
</footer> </footer>
<script src="../assets/js/main.js?v=2"></script> <script src="../assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Contact &amp; Collaboration — Ertunç Özbay</title> <title>Contact &amp; Collaboration - Ertunç Özbay</title>
<meta name="description" content="Contact Ertunç Özbay via email (ertunc.ozbay@outlook.com), LinkedIn, or my self-hosted Git server to discuss embedded systems, hardware prototyping, C/Rust programming, and open-source projects."> <meta name="description" content="Contact Ertunç Özbay via email (ertunc.ozbay@outlook.com), LinkedIn, or my self-hosted Git server to discuss embedded systems, hardware prototyping, C/Rust programming, and open-source projects.">
<link rel="icon" type="image/svg+xml" href="assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="assets/images/favicon.svg">
<link rel="stylesheet" href="assets/css/style.css?v=2"> <link rel="stylesheet" href="assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="#main-content">Skip to main content</a> <a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -50,23 +46,23 @@
<main id="main-content"> <main id="main-content">
<div class="container"> <div class="container">
<section class="workshop-hero" aria-labelledby="contact-heading"> <section class="workshop-hero" aria-labelledby="contact-heading">
<span class="workshop-eyebrow">✉️ DIRECT CONTACT // OPEN COLLABORATION</span> <span class="workshop-eyebrow"> DIRECT CONTACT // OPEN COLLABORATION</span>
<h1 id="contact-heading"><span class="gradient-title">Contact &amp; Collaboration</span></h1> <h1 id="contact-heading"><span class="gradient-title">Contact &amp; Collaboration</span></h1>
<p class="hero-lead"> <p class="hero-lead">
Whether you want to talk about ESP32 embedded firmware, circuit design, Linux systems programming, or open-source hardware collaboration, feel free to reach out directly via email, LinkedIn, or my self-hosted Git server. Whether you want to talk about ESP32 embedded firmware, circuit design, Linux systems programming, or open-source hardware collaboration, feel free to reach out directly via email, LinkedIn, or my self-hosted Git server.
</p> </p>
<div class="button-row"> <div class="button-row">
<a class="btn btn-primary" href="mailto:ertunc.ozbay@outlook.com">📧 Email Me (ertunc.ozbay@outlook.com)</a> <a class="btn btn-primary" href="mailto:ertunc.ozbay@outlook.com"> Email Me (ertunc.ozbay@outlook.com)</a>
<button type="button" class="btn btn-secondary" data-copy-email="ertunc.ozbay@outlook.com">📋 Copy Email Address</button> <button type="button" class="btn btn-secondary" data-copy-email="ertunc.ozbay@outlook.com">Copy Email Address</button>
<a class="btn btn-cyan" href="https://www.linkedin.com/in/ertunc-ozbay" rel="noopener noreferrer">🔗 Connect on LinkedIn</a> <a class="btn btn-cyan" href="https://www.linkedin.com/in/ertunc-ozbay" rel="noopener noreferrer"> Connect on LinkedIn</a>
<a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay" rel="noopener noreferrer">💻 Git Server (@ertunc-ozbay)</a> <a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay" rel="noopener noreferrer"> Git Server (@ertunc-ozbay)</a>
</div> </div>
</section> </section>
<section class="section-block" aria-labelledby="contact-links-heading"> <section class="section-block" aria-labelledby="contact-links-heading">
<div class="section-header"> <div class="section-header">
<div> <div>
<span class="section-label">01 // Direct Channels</span> <span class="section-label">Direct Channels</span>
<h2 id="contact-links-heading">Email, LinkedIn &amp; Self-Hosted Git</h2> <h2 id="contact-links-heading">Email, LinkedIn &amp; Self-Hosted Git</h2>
</div> </div>
</div> </div>
@ -86,7 +82,7 @@
</div> </div>
<div class="card-actions"> <div class="card-actions">
<a class="btn btn-primary" href="mailto:ertunc.ozbay@outlook.com">Send Email</a> <a class="btn btn-primary" href="mailto:ertunc.ozbay@outlook.com">Send Email</a>
<button type="button" class="btn btn-secondary" data-copy-email="ertunc.ozbay@outlook.com">📋 Copy ertunc.ozbay@outlook.com</button> <button type="button" class="btn btn-secondary" data-copy-email="ertunc.ozbay@outlook.com">Copy ertunc.ozbay@outlook.com</button>
</div> </div>
</div> </div>
@ -117,7 +113,7 @@
<section class="section-block" aria-labelledby="repos-heading"> <section class="section-block" aria-labelledby="repos-heading">
<div class="section-header"> <div class="section-header">
<div> <div>
<span class="section-label">02 // Public Open-Source Repositories &amp; Direct Downloads</span> <span class="section-label">Public Open-Source Repositories &amp; Direct Downloads</span>
<h2 id="repos-heading">Active Self-Hosted Git Repositories</h2> <h2 id="repos-heading">Active Self-Hosted Git Repositories</h2>
</div> </div>
</div> </div>
@ -125,7 +121,7 @@
<div class="card-grid-2"> <div class="card-grid-2">
<div class="card card-amber"> <div class="card card-amber">
<div class="card-top"> <div class="card-top">
<span class="section-label">Embedded C99 • ESP32-S3 • KiCad</span> <span class="section-label">Embedded C99 · ESP32-S3 · KiCad</span>
<h3><a href="https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">ertunc-ozbay/multi-functional-controller</a></h3> <h3><a href="https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">ertunc-ozbay/multi-functional-controller</a></h3>
<p> <p>
ESP32-S3-N16R8 Multi-Functional Controller (MFC) featuring 2.4 GHz nRF24L01+ RF telemetry, K-Silver Hall-effect gimbals, hardware PCNT rotary decoder, and shared SPI2 display UI. ESP32-S3-N16R8 Multi-Functional Controller (MFC) featuring 2.4 GHz nRF24L01+ RF telemetry, K-Silver Hall-effect gimbals, hardware PCNT rotary decoder, and shared SPI2 display UI.
@ -133,14 +129,14 @@
</div> </div>
<div class="card-actions"> <div class="card-actions">
<a class="btn btn-primary" href="projects/multi-functional-controller.html">Project Page</a> <a class="btn btn-primary" href="projects/multi-functional-controller.html">Project Page</a>
<a class="btn btn-emerald" href="/assets/downloads/multi-functional-controller.zip">⬇ Download ZIP</a> <a class="btn btn-emerald" href="/assets/downloads/multi-functional-controller.zip">Download ZIP</a>
<a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">Git Repo →</a> <a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">Git Repo →</a>
</div> </div>
</div> </div>
<div class="card card-synth"> <div class="card card-synth">
<div class="card-top"> <div class="card-top">
<span class="section-label">Embedded C99 • Dual-Core ESP32 • Python RLE</span> <span class="section-label">Embedded C99 · Dual-Core ESP32 · Python RLE</span>
<h3><a href="https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">ertunc-ozbay/midi-breadboard-instrument</a></h3> <h3><a href="https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">ertunc-ozbay/midi-breadboard-instrument</a></h3>
<p> <p>
Dual-core ESP32 16-track MIDI breadboard synthesizer, drum sequencer, 30 FPS SPI OLED visualizer, and Python RLE MIDI-to-C compiler (ESP-IDF v5.2.2). Dual-core ESP32 16-track MIDI breadboard synthesizer, drum sequencer, 30 FPS SPI OLED visualizer, and Python RLE MIDI-to-C compiler (ESP-IDF v5.2.2).
@ -148,14 +144,14 @@
</div> </div>
<div class="card-actions"> <div class="card-actions">
<a class="btn btn-primary" href="projects/midi-breadboard-instrument.html">Project Page</a> <a class="btn btn-primary" href="projects/midi-breadboard-instrument.html">Project Page</a>
<a class="btn btn-emerald" href="/assets/downloads/midi-breadboard-instrument.zip">⬇ Download ZIP</a> <a class="btn btn-emerald" href="/assets/downloads/midi-breadboard-instrument.zip">Download ZIP</a>
<a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">Git Repo →</a> <a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">Git Repo →</a>
</div> </div>
</div> </div>
<div class="card card-emerald"> <div class="card card-emerald">
<div class="card-top"> <div class="card-top">
<span class="section-label">HTML5 • CSS3 • Vanilla JS</span> <span class="section-label">HTML5 · CSS3 · Vanilla JS</span>
<h3><a href="https://git.ertuncozbay.dev/ertunc-ozbay/ertuncozbay.dev" rel="noopener noreferrer">ertunc-ozbay/ertuncozbay.dev</a></h3> <h3><a href="https://git.ertuncozbay.dev/ertunc-ozbay/ertuncozbay.dev" rel="noopener noreferrer">ertunc-ozbay/ertuncozbay.dev</a></h3>
<p> <p>
Source repository for this static workshop website and engineering notebook hosted at <code>ertuncozbay.dev</code>. Source repository for this static workshop website and engineering notebook hosted at <code>ertuncozbay.dev</code>.
@ -169,7 +165,7 @@
</section> </section>
<section class="section-block reading-width" aria-labelledby="topics-heading"> <section class="section-block reading-width" aria-labelledby="topics-heading">
<span class="section-label">03 // Let’s Talk About</span> <span class="section-label">Let’s Talk About</span>
<h2 id="topics-heading">Topics I Always Enjoy Discussing</h2> <h2 id="topics-heading">Topics I Always Enjoy Discussing</h2>
<ul> <ul>
<li><strong>Embedded Systems &amp; Electronics:</strong> ESP32 / ESP32-S3, ESP-IDF, FreeRTOS, SPI/I2C/PWM/PCNT peripherals, schematic capture, and breadboard-to-perfboard builds.</li> <li><strong>Embedded Systems &amp; Electronics:</strong> ESP32 / ESP32-S3, ESP-IDF, FreeRTOS, SPI/I2C/PWM/PCNT peripherals, schematic capture, and breadboard-to-perfboard builds.</li>
@ -185,7 +181,7 @@
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="projects/index.html">Projects</a></li> <li><a href="projects/index.html">Projects</a></li>
@ -198,6 +194,6 @@
</div> </div>
</footer> </footer>
<script src="assets/js/main.js?v=2"></script> <script src="assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ertunç Özbay — Embedded Systems, Hardware Lab &amp; Open-Source Projects</title> <title>Ertunç Özbay - Embedded Systems, Hardware Lab &amp; Open-Source Projects</title>
<meta name="description" content="Personal engineering studio and workshop of Ertunç Özbay: ESP32/ESP-IDF embedded systems, hardware prototyping, C/Rust/Python tooling, and open-source builds."> <meta name="description" content="Personal engineering studio and workshop of Ertunç Özbay: ESP32/ESP-IDF embedded systems, hardware prototyping, C/Rust/Python tooling, and open-source builds.">
<link rel="icon" type="image/svg+xml" href="assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="assets/images/favicon.svg">
<link rel="stylesheet" href="assets/css/style.css?v=2"> <link rel="stylesheet" href="assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="#main-content">Skip to main content</a> <a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -50,36 +46,36 @@
<main id="main-content"> <main id="main-content">
<div class="container"> <div class="container">
<section class="workshop-hero" aria-labelledby="hero-heading"> <section class="workshop-hero" aria-labelledby="hero-heading">
<span class="workshop-eyebrow">⚡ ELECTRICAL &amp; ELECTRONICS ENGINEERING // OPEN WORKBENCH</span> <span class="workshop-eyebrow">Electrical &amp; Electronics Engineering</span>
<h1 id="hero-heading"><span class="gradient-title">Hi, I’m Ertunç Özbay.</span></h1> <h1 id="hero-heading">Ertunç Özbay</h1>
<p class="hero-lead"> <p class="hero-lead">
I design embedded hardware, write bare-metal C &amp; FreeRTOS firmware, and build open-source systems from the transistor level up to Linux desktop tooling. Electrical and Electronics Engineering student at Bülent Ecevit University working on ESP32 embedded firmware, circuit design, and hardware prototypes.
</p> </p>
<p class="reading-width"> <p class="reading-width">
Welcome to my engineering studio and notebook. Here you can inspect my real hardware prototypes, copy build/flash commands, browse source code, and download releases—from my <strong>ESP32-S3 2.4 GHz Multi-Functional RC Console</strong> and <strong>Dual-Core ESP32 16-Track MIDI Synthesizer</strong> to my <strong>4WD Autonomous Vehicle</strong> and <strong>Standalone Linux Game Launcher written in Rust</strong>. This site documents my hardware builds, schematics, and C/Python source code, including my <strong>ESP32-S3 2.4 GHz Multi-Functional RC Controller</strong>, <strong>ESP32 16-Track MIDI Breadboard Instrument</strong>, and <strong>4WD RC / Autonomous Vehicle</strong>.
</p> </p>
<div class="button-row"> <div class="button-row">
<a class="btn btn-primary" href="projects/index.html">🚀 Explore Projects, Code &amp; Downloads</a> <a class="btn btn-primary" href="projects/index.html">Projects</a>
<a class="btn btn-cyan" href="https://git.ertuncozbay.dev/ertunc-ozbay" rel="noopener noreferrer">💻 Git Server (@ertunc-ozbay)</a> <a class="btn" href="https://git.ertuncozbay.dev/ertunc-ozbay" rel="noopener noreferrer">Git Repositories</a>
<a class="btn btn-secondary" href="contact.html">✉️ Contact (ertunc.ozbay@outlook.com)</a> <a class="btn" href="contact.html">Contact (ertunc.ozbay@outlook.com)</a>
</div> </div>
<div class="stats-strip" aria-label="Workshop highlights"> <div class="stats-strip" aria-label="Overview">
<div class="stat-pill"> <div class="stat-pill">
<span class="stat-value">4 Active Builds</span> <span class="stat-value">3 Hardware Projects</span>
<span class="stat-label">ESP32-S3, ESP32, 4WD RC &amp; Linux/Rust</span> <span class="stat-label">ESP32-S3, ESP32 &amp; 4WD Robotics</span>
</div> </div>
<div class="stat-pill"> <div class="stat-pill">
<span class="stat-value">ESP-IDF v5.2.2</span> <span class="stat-value">ESP-IDF v5.2.2</span>
<span class="stat-label">ISO C99, Dual-Core FreeRTOS &amp; KiCad</span> <span class="stat-label">ISO C99, FreeRTOS &amp; KiCad</span>
</div> </div>
<div class="stat-pill"> <div class="stat-pill">
<span class="stat-value">16-Track Synth</span> <span class="stat-value">MIDI Sequencer</span>
<span class="stat-label">Custom Python RLE MIDI-to-C Compiler</span> <span class="stat-label">Python RLE MIDI-to-C Tooling</span>
</div> </div>
<div class="stat-pill"> <div class="stat-pill">
<span class="stat-value">Direct Downloads</span> <span class="stat-value">Source &amp; Schematics</span>
<span class="stat-label">Pre-Built Binaries, Firmware &amp; Schematics</span> <span class="stat-label">Self-Hosted on git.ertuncozbay.dev</span>
</div> </div>
</div> </div>
</section> </section>
@ -87,7 +83,7 @@
<section class="section-block" aria-labelledby="active-builds-heading"> <section class="section-block" aria-labelledby="active-builds-heading">
<div class="section-header"> <div class="section-header">
<div> <div>
<span class="section-label">01 // Featured Hardware, Firmware &amp; Software Builds</span> <span class="section-label">Featured Hardware, Firmware &amp; Software Builds</span>
<h2 id="active-builds-heading">Projects, Commands &amp; Downloads</h2> <h2 id="active-builds-heading">Projects, Commands &amp; Downloads</h2>
</div> </div>
<a href="projects/index.html">View all project code, commands &amp; PoC videos →</a> <a href="projects/index.html">View all project code, commands &amp; PoC videos →</a>
@ -99,7 +95,7 @@
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-progress">Hardware Rev 0.1 → Phase 2 Console</span> <span class="badge badge-progress">Hardware Rev 0.1 → Phase 2 Console</span>
<span>ESP32-S3 • 2.4 GHz RF</span> <span>ESP32-S3 · 2.4 GHz RF</span>
</div> </div>
<h3><a href="projects/multi-functional-controller.html">Multi-Functional RC Controller (MFC)</a></h3> <h3><a href="projects/multi-functional-controller.html">Multi-Functional RC Controller (MFC)</a></h3>
<p> <p>
@ -114,7 +110,7 @@
</div> </div>
<div class="card-actions"> <div class="card-actions">
<a class="btn btn-primary" href="projects/multi-functional-controller.html">Code, Commands &amp; PoC Video</a> <a class="btn btn-primary" href="projects/multi-functional-controller.html">Code, Commands &amp; PoC Video</a>
<a class="btn btn-emerald" href="/assets/downloads/multi-functional-controller.zip">⬇ Download ZIP</a> <a class="btn btn-emerald" href="/assets/downloads/multi-functional-controller.zip">Download ZIP</a>
<a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">Git Server</a> <a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">Git Server</a>
</div> </div>
</article> </article>
@ -124,9 +120,9 @@
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-experimental">Active Prototype</span> <span class="badge badge-experimental">Active Prototype</span>
<span>Dual-Core ESP32 • Audio &amp; UI</span> <span>Dual-Core ESP32 · Audio &amp; UI</span>
</div> </div>
<h3><a href="projects/midi-breadboard-instrument.html">MIDI Breadboard Instrument (Desk Rave 16-Track Symphony)</a></h3> <h3><a href="projects/midi-breadboard-instrument.html">MIDI Breadboard Instrument (MIDI Sequencer 16-Track Symphony)</a></h3>
<p> <p>
A standalone dual-core <strong>ESP32 MIDI synthesizer, drum sequencer, and 30 FPS SPI OLED visualizer</strong> with a custom <strong>Python RLE MIDI-to-C compiler</strong> (<code>midi_to_c.py</code>), hardware PCNT rotary encoder, passive melody piezo, and dual active drum buzzers. A standalone dual-core <strong>ESP32 MIDI synthesizer, drum sequencer, and 30 FPS SPI OLED visualizer</strong> with a custom <strong>Python RLE MIDI-to-C compiler</strong> (<code>midi_to_c.py</code>), hardware PCNT rotary encoder, passive melody piezo, and dual active drum buzzers.
</p> </p>
@ -139,7 +135,7 @@
</div> </div>
<div class="card-actions"> <div class="card-actions">
<a class="btn btn-primary" href="projects/midi-breadboard-instrument.html">Code, Commands &amp; PoC Video</a> <a class="btn btn-primary" href="projects/midi-breadboard-instrument.html">Code, Commands &amp; PoC Video</a>
<a class="btn btn-emerald" href="/assets/downloads/midi-breadboard-instrument.zip">⬇ Download ZIP</a> <a class="btn btn-emerald" href="/assets/downloads/midi-breadboard-instrument.zip">Download ZIP</a>
<a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">Git Server</a> <a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">Git Server</a>
</div> </div>
</article> </article>
@ -149,7 +145,7 @@
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-active">In Development</span> <span class="badge badge-active">In Development</span>
<span>Robotics • Control Logic</span> <span>Robotics · Control Logic</span>
</div> </div>
<h3><a href="projects/rc-autonomous-vehicle.html">RC and Autonomous 4WD Vehicle</a></h3> <h3><a href="projects/rc-autonomous-vehicle.html">RC and Autonomous 4WD Vehicle</a></h3>
<p> <p>
@ -172,7 +168,7 @@
<section class="section-block" aria-labelledby="quick-cli-heading"> <section class="section-block" aria-labelledby="quick-cli-heading">
<div class="section-header"> <div class="section-header">
<div> <div>
<span class="section-label">02 // Quick Terminal Access</span> <span class="section-label">Quick Terminal Access</span>
<h2 id="quick-cli-heading">Clone &amp; Build My Embedded Hardware Projects</h2> <h2 id="quick-cli-heading">Clone &amp; Build My Embedded Hardware Projects</h2>
</div> </div>
</div> </div>
@ -180,10 +176,10 @@
<div class="code-window"> <div class="code-window">
<div class="code-window-header"> <div class="code-window-header">
<span class="code-window-title"> <span class="code-window-title">
<span class="code-dots"><span class="code-dot red"></span><span class="code-dot amber"></span><span class="code-dot green"></span></span> <span class="code-dot amber"></span><span class="code-dot green"></span></span>
bash — Clone &amp; Build ESP-IDF Firmware (Arch Linux / ESP-IDF v5.2.2) bash - Clone &amp; Build ESP-IDF Firmware (Arch Linux / ESP-IDF v5.2.2)
</span> </span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Commands</button> <button type="button" class="copy-code-btn" data-copy-code>Copy Commands</button>
</div> </div>
<pre><code># 1. ESP32-S3 Multi-Functional Controller (ESP-IDF v5.2.2 + KiCad Schematic) <pre><code># 1. ESP32-S3 Multi-Functional Controller (ESP-IDF v5.2.2 + KiCad Schematic)
git clone https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller.git git clone https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller.git
@ -198,7 +194,7 @@ cd midi-breadboard-instrument &amp;&amp; python3 scripts/midi_to_c.py scripts/mi
<section class="section-block" aria-labelledby="workshop-areas-heading"> <section class="section-block" aria-labelledby="workshop-areas-heading">
<div class="section-header"> <div class="section-header">
<div> <div>
<span class="section-label">03 // Inside This Studio</span> <span class="section-label">Areas of Work</span>
<h2 id="workshop-areas-heading">How I Approach Engineering</h2> <h2 id="workshop-areas-heading">How I Approach Engineering</h2>
</div> </div>
</div> </div>
@ -219,8 +215,7 @@ cd midi-breadboard-instrument &amp;&amp; python3 scripts/midi_to_c.py scripts/mi
<div class="card-top"> <div class="card-top">
<span class="section-label">Lab &amp; Bench Notes</span> <span class="section-label">Lab &amp; Bench Notes</span>
<h3>The Open Workbench</h3> <h3>The Open Workbench</h3>
<p> <p>Explore my active breadboard tests, RLE MIDI-to-C compression algorithms, hardware protection fixes, and reverse-engineering study notes.
Explore my active breadboard tests, RLE MIDI-to-C compression algorithms, hardware protection fixes, and reverse-engineering study notes.
</p> </p>
</div> </div>
<a href="lab.html">Open the Lab Notebook →</a> <a href="lab.html">Open the Lab Notebook →</a>
@ -245,7 +240,7 @@ cd midi-breadboard-instrument &amp;&amp; python3 scripts/midi_to_c.py scripts/mi
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="projects/index.html">Projects</a></li> <li><a href="projects/index.html">Projects</a></li>
@ -258,6 +253,6 @@ cd midi-breadboard-instrument &amp;&amp; python3 scripts/midi_to_c.py scripts/mi
</div> </div>
</footer> </footer>
<script src="assets/js/main.js?v=2"></script> <script src="assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lab &amp; Experiment Notebook — Ertunç Özbay</title> <title>Lab &amp; Experiment Notebook - Ertunç Özbay</title>
<meta name="description" content="Workshop lab notebook of Ertunç Özbay: ESP32-S3 hardware protection notes, RLE MIDI-to-C compression tools, Linux Wine/DX11 experiments, and reverse-engineering study logs."> <meta name="description" content="Workshop lab notebook of Ertunç Özbay: ESP32-S3 hardware protection notes, RLE MIDI-to-C compression tools, Linux Wine/DX11 experiments, and reverse-engineering study logs.">
<link rel="icon" type="image/svg+xml" href="assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="assets/images/favicon.svg">
<link rel="stylesheet" href="assets/css/style.css?v=2"> <link rel="stylesheet" href="assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="index.html#main-content">Skip to main content</a> <a class="skip-link" href="index.html#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -50,7 +46,7 @@
<main id="main-content"> <main id="main-content">
<div class="container"> <div class="container">
<section class="workshop-hero" aria-labelledby="lab-heading"> <section class="workshop-hero" aria-labelledby="lab-heading">
<span class="workshop-eyebrow">🔬 WORKSHOP BENCH // LAB NOTEBOOK</span> <span class="workshop-eyebrow"> WORKSHOP BENCH // LAB NOTEBOOK</span>
<h1 id="lab-heading"><span class="gradient-title">Lab &amp; Experiment Notebook</span></h1> <h1 id="lab-heading"><span class="gradient-title">Lab &amp; Experiment Notebook</span></h1>
<p class="hero-lead"> <p class="hero-lead">
Welcome to my open workbench. This page tracks my real engineering experiments, hardware debugging breakthroughs, Python/Rust tooling scripts, and reverse-engineering study notes. Welcome to my open workbench. This page tracks my real engineering experiments, hardware debugging breakthroughs, Python/Rust tooling scripts, and reverse-engineering study notes.
@ -61,7 +57,7 @@
<section class="section-block" aria-labelledby="lab-current"> <section class="section-block" aria-labelledby="lab-current">
<div class="section-header"> <div class="section-header">
<div> <div>
<span class="section-label">01 // Active Bench Breakthroughs</span> <span class="section-label">Active Bench Breakthroughs</span>
<h2 id="lab-current">Recent Hardware &amp; Firmware Experiments</h2> <h2 id="lab-current">Recent Hardware &amp; Firmware Experiments</h2>
</div> </div>
</div> </div>
@ -70,7 +66,7 @@
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-experimental">Solved on Breadboard</span> <span class="badge badge-experimental">Solved on Breadboard</span>
<span>ESP32 Dual-Core • Python RLE</span> <span>ESP32 Dual-Core · Python RLE</span>
</div> </div>
<h3>Defeating the 30 Hz MIDI "Strobe-Light" Bug &amp; Piezo Bass Roll-Off</h3> <h3>Defeating the 30 Hz MIDI "Strobe-Light" Bug &amp; Piezo Bass Roll-Off</h3>
<p> <p>
@ -78,8 +74,8 @@
</p> </p>
</div> </div>
<div class="card-actions"> <div class="card-actions">
<a class="btn btn-cyan" href="assets/downloads/midi_to_c.py" download="midi_to_c.py">🐍 Download midi_to_c.py</a> <a class="btn btn-cyan" href="assets/downloads/midi_to_c.py" download="midi_to_c.py">Download midi_to_c.py</a>
<a class="btn btn-emerald" href="assets/downloads/desk_rave_16track_esp32.c" download="mmcontroller.c">⬇ Download 16-Track C Code</a> <a class="btn btn-emerald" href="assets/downloads/desk_rave_16track_esp32.c" download="mmcontroller.c">Download 16-Track C Code</a>
<a class="btn btn-secondary" href="projects/midi-breadboard-instrument.html">Full MIDI Project →</a> <a class="btn btn-secondary" href="projects/midi-breadboard-instrument.html">Full MIDI Project →</a>
</div> </div>
</div> </div>
@ -88,7 +84,7 @@
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-progress">Hardware Rev 0.1 → Phase 2</span> <span class="badge badge-progress">Hardware Rev 0.1 → Phase 2</span>
<span>ESP32-S3-N16R8 • SPI2 Bus</span> <span>ESP32-S3-N16R8 · SPI2 Bus</span>
</div> </div>
<h3>ESP32-S3 Octal PSRAM Pin Collisions &amp; Shared SPI2 Arbitration</h3> <h3>ESP32-S3 Octal PSRAM Pin Collisions &amp; Shared SPI2 Arbitration</h3>
<p> <p>
@ -96,8 +92,8 @@
</p> </p>
</div> </div>
<div class="card-actions"> <div class="card-actions">
<a class="btn btn-cyan" href="assets/downloads/mfc-1.kicad_sch" download="mfc-1.kicad_sch">📐 Download KiCad Schematic</a> <a class="btn btn-cyan" href="assets/downloads/mfc-1.kicad_sch" download="mfc-1.kicad_sch">Download KiCad Schematic</a>
<a class="btn btn-emerald" href="assets/downloads/mfc_esp32s3_firmware.c" download="mmcontroller.c">⬇ Download S3 Firmware</a> <a class="btn btn-emerald" href="assets/downloads/mfc_esp32s3_firmware.c" download="mmcontroller.c">Download S3 Firmware</a>
<a class="btn btn-secondary" href="projects/multi-functional-controller.html">Full Controller Page →</a> <a class="btn btn-secondary" href="projects/multi-functional-controller.html">Full Controller Page →</a>
</div> </div>
</div> </div>
@ -108,7 +104,7 @@
<section class="section-block" aria-labelledby="lab-software"> <section class="section-block" aria-labelledby="lab-software">
<div class="section-header"> <div class="section-header">
<div> <div>
<span class="section-label">02 // Code &amp; Systems Tooling</span> <span class="section-label">Code &amp; Systems Tooling</span>
<h2 id="lab-software">Custom Compilers &amp; Linux Runtime Tools</h2> <h2 id="lab-software">Custom Compilers &amp; Linux Runtime Tools</h2>
</div> </div>
</div> </div>
@ -116,7 +112,7 @@
<div class="card card-coral"> <div class="card card-coral">
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-coral">KiCad • Hardware Design</span> <span class="badge badge-coral">KiCad · Hardware Design</span>
<span>Schematic &amp; PCB Capture</span> <span>Schematic &amp; PCB Capture</span>
</div> </div>
<h3>KiCad Schematic Capture for ESP32-S3 Hardware (<code>mfc-1.kicad_sch</code>)</h3> <h3>KiCad Schematic Capture for ESP32-S3 Hardware (<code>mfc-1.kicad_sch</code>)</h3>
@ -125,7 +121,7 @@
</p> </p>
</div> </div>
<div class="card-actions"> <div class="card-actions">
<a class="btn btn-emerald" href="/assets/downloads/mfc-1.kicad_sch" download="mfc-1.kicad_sch">⬇ Download KiCad Schematic</a> <a class="btn btn-emerald" href="/assets/downloads/mfc-1.kicad_sch" download="mfc-1.kicad_sch">Download KiCad Schematic</a>
<a class="btn btn-secondary" href="projects/multi-functional-controller.html">View Hardware Page →</a> <a class="btn btn-secondary" href="projects/multi-functional-controller.html">View Hardware Page →</a>
</div> </div>
</div> </div>
@ -133,7 +129,7 @@
<div class="card card-emerald"> <div class="card card-emerald">
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-active">Python 3 • mido</span> <span class="badge badge-active">Python 3 · mido</span>
<span>Embedded Audio Tooling</span> <span>Embedded Audio Tooling</span>
</div> </div>
<h3>RLE MIDI-to-C Struct Compiler (<code>midi_to_c.py</code>)</h3> <h3>RLE MIDI-to-C Struct Compiler (<code>midi_to_c.py</code>)</h3>
@ -152,7 +148,7 @@
<section class="section-block" aria-labelledby="lab-re"> <section class="section-block" aria-labelledby="lab-re">
<div class="section-header"> <div class="section-header">
<div> <div>
<span class="section-label">03 // System Internals</span> <span class="section-label">System Internals</span>
<h2 id="lab-re">Reverse-Engineering &amp; Low-Level Study Log</h2> <h2 id="lab-re">Reverse-Engineering &amp; Low-Level Study Log</h2>
</div> </div>
</div> </div>
@ -173,7 +169,7 @@
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="projects/index.html">Projects</a></li> <li><a href="projects/index.html">Projects</a></li>
@ -186,6 +182,6 @@
</div> </div>
</footer> </footer>
<script src="assets/js/main.js?v=2"></script> <script src="assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Projects, Code &amp; Downloads — Ertunç Özbay</title> <title>Projects, Code &amp; Downloads - Ertunç Özbay</title>
<meta name="description" content="Hardware and software engineering projects by Ertunç Özbay: ESP32-S3 Multi-Functional RC Controller, ESP32 16-Track MIDI Breadboard Instrument, Point Blank Linux Launcher in Rust, and 4WD Autonomous Vehicle."> <meta name="description" content="Hardware and software engineering projects by Ertunç Özbay: ESP32-S3 Multi-Functional RC Controller, ESP32 16-Track MIDI Breadboard Instrument, Point Blank Linux Launcher in Rust, and 4WD Autonomous Vehicle.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css?v=2"> <link rel="stylesheet" href="../assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="#main-content">Skip to main content</a> <a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -50,7 +46,7 @@
<main id="main-content"> <main id="main-content">
<div class="container"> <div class="container">
<section class="workshop-hero" aria-labelledby="projects-heading"> <section class="workshop-hero" aria-labelledby="projects-heading">
<span class="workshop-eyebrow">⚡ PROJECT SHOWCASE // CODE, COMMANDS, DOWNLOADS &amp; POC VIDEOS</span> <span class="workshop-eyebrow"> PROJECT SHOWCASE // CODE, COMMANDS, DOWNLOADS &amp; POC VIDEOS</span>
<h1 id="projects-heading"><span class="gradient-title">Engineering Projects &amp; Open-Source Builds</span></h1> <h1 id="projects-heading"><span class="gradient-title">Engineering Projects &amp; Open-Source Builds</span></h1>
<p class="hero-lead"> <p class="hero-lead">
Every project documented here includes verified hardware pinouts, build photos, copyable terminal commands, source code snippets, direct download links, and a dedicated <strong>YouTube Proof-of-Concept (PoC) video showcase</strong>. Every project documented here includes verified hardware pinouts, build photos, copyable terminal commands, source code snippets, direct download links, and a dedicated <strong>YouTube Proof-of-Concept (PoC) video showcase</strong>.
@ -71,7 +67,7 @@
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-progress">Rev 0.1 Built → Phase 2 Console</span> <span class="badge badge-progress">Rev 0.1 Built → Phase 2 Console</span>
<span>Project 01 • Embedded Hardware</span> <span>Project 01 · Embedded Hardware</span>
</div> </div>
<h3><a href="multi-functional-controller.html">Multi-Functional RC Controller (MFC)</a></h3> <h3><a href="multi-functional-controller.html">Multi-Functional RC Controller (MFC)</a></h3>
<p> <p>
@ -88,13 +84,13 @@
</ul> </ul>
<div class="project-notes"> <div class="project-notes">
<p><strong>Included on page:</strong> Copyable `idf.py` build/flash commands, C99 firmware source code, downloadable KiCad `.kicad_sch` schematic &amp; `.zip` archive, 3 prototype photos, and <strong>🎬 YouTube PoC Video slot</strong>.</p> <p><strong>Included on page:</strong>Copyable `idf.py` build/flash commands, C99 firmware source code, downloadable KiCad `.kicad_sch` schematic &amp; `.zip` archive, 3 prototype photos, and <strong> YouTube PoC Video slot</strong>.</p>
</div> </div>
</div> </div>
<div class="card-actions"> <div class="card-actions">
<a class="btn btn-primary" href="multi-functional-controller.html">Open Page, Code &amp; PoC</a> <a class="btn btn-primary" href="multi-functional-controller.html">Open Page, Code &amp; PoC</a>
<a class="btn btn-emerald" href="/assets/downloads/multi-functional-controller.zip">⬇ Download ZIP</a> <a class="btn btn-emerald" href="/assets/downloads/multi-functional-controller.zip">Download ZIP</a>
<a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">Git Server</a> <a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">Git Server</a>
</div> </div>
</article> </article>
@ -104,9 +100,9 @@
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-experimental">Active Breadboard Synth</span> <span class="badge badge-experimental">Active Breadboard Synth</span>
<span>Project 02 • Audio &amp; Dual-Core RTOS</span> <span>Project 02 · Audio &amp; Dual-Core RTOS</span>
</div> </div>
<h3><a href="midi-breadboard-instrument.html">MIDI Breadboard Instrument — Desk Rave 16-Track Symphony</a></h3> <h3><a href="midi-breadboard-instrument.html">MIDI Breadboard Instrument - MIDI Sequencer 16-Track Symphony</a></h3>
<p> <p>
A standalone dual-core <strong>ESP32 MIDI synthesizer, drum sequencer, and 30 FPS SPI OLED visualizer</strong> programmed in ESP-IDF v5.2.2, paired with a custom <strong>Python Run-Length Encoding (RLE) MIDI-to-C compiler</strong> (<code>midi_to_c.py</code>) driving a passive melody buzzer, two active drum buzzers, LEDs, and a hardware PCNT rotary encoder. A standalone dual-core <strong>ESP32 MIDI synthesizer, drum sequencer, and 30 FPS SPI OLED visualizer</strong> programmed in ESP-IDF v5.2.2, paired with a custom <strong>Python Run-Length Encoding (RLE) MIDI-to-C compiler</strong> (<code>midi_to_c.py</code>) driving a passive melody buzzer, two active drum buzzers, LEDs, and a hardware PCNT rotary encoder.
</p> </p>
@ -121,13 +117,13 @@
</ul> </ul>
<div class="project-notes"> <div class="project-notes">
<p><strong>Included on page:</strong> Full `midi_to_c.py` Python script &amp; C99 Dual-Core FreeRTOS audio engine code, copyable CLI commands, downloadable `.py` &amp; `.zip` links, 3 breadboard photos, and <strong>🎬 YouTube PoC Video slot</strong>.</p> <p><strong>Included on page:</strong> Full `midi_to_c.py` Python script &amp; C99 Dual-Core FreeRTOS audio engine code, copyable CLI commands, downloadable `.py` &amp; `.zip` links, 3 breadboard photos, and <strong> YouTube PoC Video slot</strong>.</p>
</div> </div>
</div> </div>
<div class="card-actions"> <div class="card-actions">
<a class="btn btn-primary" href="midi-breadboard-instrument.html">Open Page, Code &amp; PoC</a> <a class="btn btn-primary" href="midi-breadboard-instrument.html">Open Page, Code &amp; PoC</a>
<a class="btn btn-emerald" href="/assets/downloads/midi-breadboard-instrument.zip">⬇ Download ZIP</a> <a class="btn btn-emerald" href="/assets/downloads/midi-breadboard-instrument.zip">Download ZIP</a>
<a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">Git Server</a> <a class="btn btn-secondary" href="https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">Git Server</a>
</div> </div>
</article> </article>
@ -137,7 +133,7 @@
<div class="card-top"> <div class="card-top">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-active">In Progress</span> <span class="badge badge-active">In Progress</span>
<span>Project 03 • Robotics &amp; Control</span> <span>Project 03 · Robotics &amp; Control</span>
</div> </div>
<h3><a href="rc-autonomous-vehicle.html">RC and Autonomous 4WD Vehicle</a></h3> <h3><a href="rc-autonomous-vehicle.html">RC and Autonomous 4WD Vehicle</a></h3>
<p> <p>
@ -152,7 +148,7 @@
</ul> </ul>
<div class="project-notes"> <div class="project-notes">
<p><strong>Included on page:</strong> C99 2.4 GHz telemetry receiver packet &amp; differential motor drive code structure, companion controller link, and <strong>🎬 YouTube PoC Video slot</strong>.</p> <p><strong>Included on page:</strong> C99 2.4 GHz telemetry receiver packet &amp; differential motor drive code structure, companion controller link, and <strong> YouTube PoC Video slot</strong>.</p>
</div> </div>
</div> </div>
@ -169,7 +165,7 @@
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="../projects/index.html">Projects</a></li> <li><a href="../projects/index.html">Projects</a></li>
@ -182,6 +178,6 @@
</div> </div>
</footer> </footer>
<script src="../assets/js/main.js?v=2"></script> <script src="../assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MIDI Breadboard Instrument (Desk Rave &amp; 16-Track Symphony) — Projects — Ertunç Özbay</title> <title>MIDI Breadboard Instrument (MIDI Sequencer &amp; 16-Track Symphony) - Projects - Ertunç Özbay</title>
<meta name="description" content="Project documentation, Python RLE MIDI-to-C compiler code, ESP-IDF C99 firmware, and downloads for the 16-Track MIDI Breadboard Instrument by Ertunç Özbay."> <meta name="description" content="Project documentation, Python RLE MIDI-to-C compiler code, ESP-IDF C99 firmware, and downloads for the 16-Track MIDI Breadboard Instrument by Ertunç Özbay.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css?v=2"> <link rel="stylesheet" href="../assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="#main-content">Skip to main content</a> <a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -57,9 +53,9 @@
<header class="workshop-hero"> <header class="workshop-hero">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-experimental">Status: Active Breadboard Prototype</span> <span class="badge badge-experimental">Status: Active Breadboard Prototype</span>
<span>Project 02 // ESP32 Dual-Core • ESP-IDF C99 • FreeRTOS • Python RLE</span> <span>Project ESP32 Dual-Core · ESP-IDF C99 · FreeRTOS · Python RLE</span>
</div> </div>
<h1><span class="gradient-title">MIDI Breadboard Instrument — Desk Rave &amp; 16-Track Symphony</span></h1> <h1><span class="gradient-title">MIDI Breadboard Instrument - MIDI Sequencer &amp; 16-Track Symphony</span></h1>
<p class="hero-lead"> <p class="hero-lead">
A standalone, dual-core ESP32 MIDI synthesizer, drum sequencer, and 30 FPS SPI OLED visualizer written in ESP-IDF v5.2.2 (C99 / FreeRTOS), powered by a custom Run-Length Encoding (RLE) Python MIDI-to-C compiler. A standalone, dual-core ESP32 MIDI synthesizer, drum sequencer, and 30 FPS SPI OLED visualizer written in ESP-IDF v5.2.2 (C99 / FreeRTOS), powered by a custom Run-Length Encoding (RLE) Python MIDI-to-C compiler.
</p> </p>
@ -67,25 +63,25 @@
What started as making a passive piezo buzzer squeak evolved into a full 16-track embedded music box with live kick/hi-hat drum transients, hardware PCNT quadrature rotary controls for real-time tempo and volume scaling, and dual-core FreeRTOS task isolation. What started as making a passive piezo buzzer squeak evolved into a full 16-track embedded music box with live kick/hi-hat drum transients, hardware PCNT quadrature rotary controls for real-time tempo and volume scaling, and dual-core FreeRTOS task isolation.
</p> </p>
<div class="button-row"> <div class="button-row">
<a class="btn btn-primary" href="https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">💻 View Git Repository</a> <a class="btn btn-primary" href="https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">View Git Repository</a>
<a class="btn btn-emerald" href="../assets/downloads/desk_rave_16track_esp32.c" download="mmcontroller.c">⬇ Download 16-Track C Firmware (.c)</a> <a class="btn btn-emerald" href="../assets/downloads/desk_rave_16track_esp32.c" download="mmcontroller.c">Download 16-Track C Firmware (.c)</a>
<a class="btn btn-cyan" href="../assets/downloads/midi_to_c.py" download="midi_to_c.py">🐍 Download midi_to_c.py</a> <a class="btn btn-cyan" href="../assets/downloads/midi_to_c.py" download="midi_to_c.py">Download midi_to_c.py</a>
<a class="btn btn-secondary" href="/assets/downloads/midi-breadboard-instrument.zip">📦 Repo (.zip)</a> <a class="btn btn-secondary" href="/assets/downloads/midi-breadboard-instrument.zip"> Repo (.zip)</a>
<a class="btn btn-youtube" href="#poc-video">🎬 Watch PoC Video Slot</a> <a class="btn btn-youtube" href="#poc-video"> Watch PoC Video Slot</a>
</div> </div>
</header> </header>
<!-- YouTube Proof-of-Concept Video Placeholder --> <!-- YouTube Proof-of-Concept Video Placeholder -->
<section id="poc-video" class="poc-video-section" aria-labelledby="midi-video-heading"> <section id="poc-video" class="poc-video-section" aria-labelledby="midi-video-heading">
<div class="poc-video-card"> <div class="poc-video-card">
<span class="section-label">🎬 Proof of Concept // YouTube Video Showcase</span> <span class="section-label"> Proof of Concept // YouTube Video Showcase</span>
<h2 id="midi-video-heading">YouTube Proof-of-Concept Demonstration</h2> <h2 id="midi-video-heading">YouTube Proof-of-Concept Demonstration</h2>
<div class="poc-video-screen" role="region" aria-label="YouTube Proof of Concept Video Placeholder"> <div class="poc-video-screen" role="region" aria-label="YouTube Proof of Concept Video Placeholder">
<div class="poc-play-badge" aria-hidden="true"> <div class="poc-play-badge" aria-hidden="true">
<div class="poc-play-triangle"></div> <div class="poc-play-triangle"></div>
</div> </div>
<span class="poc-status-pill">🎥 YouTube PoC Video — Recording / Coming Soon</span> <span class="poc-status-pill"> YouTube PoC Video - Recording / Coming Soon</span>
<div class="poc-video-title">Desk Rave 16-Track ESP32 MIDI Synthesizer — Live Audio &amp; 30 FPS OLED Demo</div> <div class="poc-video-title">MIDI Sequencer 16-Track ESP32 MIDI Synthesizer - Live Audio &amp; 30 FPS OLED Demo</div>
<p class="poc-video-desc"> <p class="poc-video-desc">
Upcoming YouTube video showcasing live playback across the 16-track flash playlist (Careless Whisper, Rondo Alla Turca, Seven Nation Army +2 octave transpose), real-time rotary speed/volume tweaking, and synchronized kick/hi-hat buzzers + LEDs. Upcoming YouTube video showcasing live playback across the 16-track flash playlist (Careless Whisper, Rondo Alla Turca, Seven Nation Army +2 octave transpose), real-time rotary speed/volume tweaking, and synchronized kick/hi-hat buzzers + LEDs.
</p> </p>
@ -101,7 +97,7 @@
</figure> </figure>
<section class="section-block" aria-labelledby="p3-gallery"> <section class="section-block" aria-labelledby="p3-gallery">
<span class="section-label">01 // Hardware Build Gallery</span> <span class="section-label">Hardware Build Gallery</span>
<h2 id="p3-gallery">Breadboard Prototype Photos (Click to Zoom)</h2> <h2 id="p3-gallery">Breadboard Prototype Photos (Click to Zoom)</h2>
<div class="card-grid"> <div class="card-grid">
<figure class="card card-synth" style="margin:0;"> <figure class="card card-synth" style="margin:0;">
@ -127,7 +123,7 @@
<!-- Terminal Commands & Source Code Section --> <!-- Terminal Commands & Source Code Section -->
<section class="section-block" aria-labelledby="p3-code"> <section class="section-block" aria-labelledby="p3-code">
<span class="section-label">02 // Terminal Commands, Python RLE Compiler &amp; C99 Firmware</span> <span class="section-label">Terminal Commands, Python RLE Compiler &amp; C99 Firmware</span>
<h2 id="p3-code">Build, Flash &amp; MIDI Conversion Commands</h2> <h2 id="p3-code">Build, Flash &amp; MIDI Conversion Commands</h2>
<p class="reading-width"> <p class="reading-width">
Clone the repository, convert any `.mid` file into an RLE-compressed C struct array using `scripts/midi_to_c.py`, and flash the 16-track firmware to an ESP32: Clone the repository, convert any `.mid` file into an RLE-compressed C struct array using `scripts/midi_to_c.py`, and flash the 16-track firmware to an ESP32:
@ -136,10 +132,10 @@
<div class="code-window"> <div class="code-window">
<div class="code-window-header"> <div class="code-window-header">
<span class="code-window-title"> <span class="code-window-title">
<span class="code-dots"><span class="code-dot red"></span><span class="code-dot amber"></span><span class="code-dot green"></span></span> <span class="code-dot amber"></span><span class="code-dot green"></span></span>
bash — Convert MIDI to C &amp; Flash ESP32 Firmware (ESP-IDF v5.2.2) bash - Convert MIDI to C &amp; Flash ESP32 Firmware (ESP-IDF v5.2.2)
</span> </span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Commands</button> <button type="button" class="copy-code-btn" data-copy-code>Copy Commands</button>
</div> </div>
<pre><code># 1. Clone the repository <pre><code># 1. Clone the repository
git clone https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument.git git clone https://git.ertuncozbay.dev/ertunc-ozbay/midi-breadboard-instrument.git
@ -163,10 +159,10 @@ idf.py -p /dev/ttyUSB0 flash monitor</code></pre>
<div class="code-window"> <div class="code-window">
<div class="code-window-header"> <div class="code-window-header">
<span class="code-window-title"> <span class="code-window-title">
<span class="code-dots"><span class="code-dot red"></span><span class="code-dot amber"></span><span class="code-dot green"></span></span> <span class="code-dot amber"></span><span class="code-dot green"></span></span>
python3 — scripts/midi_to_c.py (RLE Compression &amp; Drum Routing Engine) python3 - scripts/midi_to_c.py (RLE Compression &amp; Drum Routing Engine)
</span> </span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Code</button> <button type="button" class="copy-code-btn" data-copy-code>Copy Code</button>
</div> </div>
<pre><code>#!/usr/bin/env python3 <pre><code>#!/usr/bin/env python3
import sys, mido import sys, mido
@ -202,10 +198,10 @@ def convert_midi_to_c(midi_filename):
<div class="code-window"> <div class="code-window">
<div class="code-window-header"> <div class="code-window-header">
<span class="code-window-title"> <span class="code-window-title">
<span class="code-dots"><span class="code-dot red"></span><span class="code-dot amber"></span><span class="code-dot green"></span></span> <span class="code-dot amber"></span><span class="code-dot green"></span></span>
c99 — main/mmcontroller.c (SequenceStep Struct &amp; Dual-Core Task Pinning) c99 - main/mmcontroller.c (SequenceStep Struct &amp; Dual-Core Task Pinning)
</span> </span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Code</button> <button type="button" class="copy-code-btn" data-copy-code>Copy Code</button>
</div> </div>
<pre><code>typedef struct { <pre><code>typedef struct {
uint16_t frequency; // Melody pitch in Hz (driven by 13-bit LEDC PWM on GPIO 25) uint16_t frequency; // Melody pitch in Hz (driven by 13-bit LEDC PWM on GPIO 25)
@ -215,7 +211,7 @@ def convert_midi_to_c(midi_filename):
} SequenceStep; } SequenceStep;
void app_main(void) { void app_main(void) {
printf("Desk Rave: 16-Track Symphony Edition Initializing...\n"); printf("MIDI Sequencer: 16-Track Symphony Edition Initializing...\n");
init_hardware(); init_hardware();
// Core 0: 30 FPS SPI OLED Framebuffer Visualizer &amp; 50ms Button Polling // Core 0: 30 FPS SPI OLED Framebuffer Visualizer &amp; 50ms Button Polling
@ -229,7 +225,7 @@ void app_main(void) {
</section> </section>
<section class="section-block reading-width" aria-labelledby="p3-components"> <section class="section-block reading-width" aria-labelledby="p3-components">
<span class="section-label">03 // Confirmed Hardware &amp; Pinout</span> <span class="section-label">Confirmed Hardware &amp; Pinout</span>
<h2 id="p3-components">ESP32 Pinout &amp; Architecture Specifications</h2> <h2 id="p3-components">ESP32 Pinout &amp; Architecture Specifications</h2>
<table class="spec-table"> <table class="spec-table">
<thead> <thead>
@ -285,7 +281,7 @@ void app_main(void) {
</section> </section>
<section class="section-block reading-width" aria-labelledby="p3-playlist"> <section class="section-block reading-width" aria-labelledby="p3-playlist">
<span class="section-label">04 // Flash Memory Playlist</span> <span class="section-label">Flash Memory Playlist</span>
<h2 id="p3-playlist">The 16-Track Symphony</h2> <h2 id="p3-playlist">The 16-Track Symphony</h2>
<ol> <ol>
<li><strong>Careless Whisper</strong> (Extended Club Edit)</li> <li><strong>Careless Whisper</strong> (Extended Club Edit)</li>
@ -314,7 +310,7 @@ void app_main(void) {
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="../projects/index.html">Projects</a></li> <li><a href="../projects/index.html">Projects</a></li>
@ -327,6 +323,6 @@ void app_main(void) {
</div> </div>
</footer> </footer>
<script src="../assets/js/main.js?v=2"></script> <script src="../assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Multi-Functional RC Controller (MFC) — Projects — Ertunç Özbay</title> <title>Multi-Functional RC Controller (MFC) - Projects - Ertunç Özbay</title>
<meta name="description" content="Engineering documentation, C99 ESP-IDF firmware, KiCad schematic downloads, and build commands for the ESP32-S3-N16R8 Multi-Functional RC Controller (MFC) by Ertunç Özbay."> <meta name="description" content="Engineering documentation, C99 ESP-IDF firmware, KiCad schematic downloads, and build commands for the ESP32-S3-N16R8 Multi-Functional RC Controller (MFC) by Ertunç Özbay.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css?v=2"> <link rel="stylesheet" href="../assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="#main-content">Skip to main content</a> <a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -57,7 +53,7 @@
<header class="workshop-hero"> <header class="workshop-hero">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-progress">Status: Rev 0.1 Carrier Built → Phase 2 Console Expansion</span> <span class="badge badge-progress">Status: Rev 0.1 Carrier Built → Phase 2 Console Expansion</span>
<span>Project 01 // ESP32-S3-N16R8 • 2.4 GHz RF • ESP-IDF C99</span> <span>Project ESP32-S3-N16R8 · 2.4 GHz RF · ESP-IDF C99</span>
</div> </div>
<h1><span class="gradient-title">Multi-Functional RC Controller (MFC)</span></h1> <h1><span class="gradient-title">Multi-Functional RC Controller (MFC)</span></h1>
<p class="hero-lead"> <p class="hero-lead">
@ -67,25 +63,25 @@
Designed to serve as a universal handheld and desktop transmitter for external robotic platforms (such as my <a href="rc-autonomous-vehicle.html">4WD RC &amp; Autonomous Vehicle</a>) while integrating dual K-Silver Hall-effect joysticks, a 1.3" ST7789 IPS TFT display, MicroSD storage, and MAX4466 audio capture. Designed to serve as a universal handheld and desktop transmitter for external robotic platforms (such as my <a href="rc-autonomous-vehicle.html">4WD RC &amp; Autonomous Vehicle</a>) while integrating dual K-Silver Hall-effect joysticks, a 1.3" ST7789 IPS TFT display, MicroSD storage, and MAX4466 audio capture.
</p> </p>
<div class="button-row"> <div class="button-row">
<a class="btn btn-primary" href="https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">💻 View Git Repository</a> <a class="btn btn-primary" href="https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">View Git Repository</a>
<a class="btn btn-emerald" href="../assets/downloads/mfc_esp32s3_firmware.c" download="mmcontroller.c">⬇ Download Firmware (mmcontroller.c)</a> <a class="btn btn-emerald" href="../assets/downloads/mfc_esp32s3_firmware.c" download="mmcontroller.c">Download Firmware (mmcontroller.c)</a>
<a class="btn btn-cyan" href="../assets/downloads/mfc-1.kicad_sch" download="mfc-1.kicad_sch">📐 Download KiCad Schematic (.kicad_sch)</a> <a class="btn btn-cyan" href="../assets/downloads/mfc-1.kicad_sch" download="mfc-1.kicad_sch">Download KiCad Schematic (.kicad_sch)</a>
<a class="btn btn-secondary" href="/assets/downloads/multi-functional-controller.zip">📦 Repo (.zip)</a> <a class="btn btn-secondary" href="/assets/downloads/multi-functional-controller.zip"> Repo (.zip)</a>
<a class="btn btn-youtube" href="#poc-video">🎬 Watch PoC Video Slot</a> <a class="btn btn-youtube" href="#poc-video"> Watch PoC Video Slot</a>
</div> </div>
</header> </header>
<!-- YouTube Proof-of-Concept Video Placeholder --> <!-- YouTube Proof-of-Concept Video Placeholder -->
<section id="poc-video" class="poc-video-section" aria-labelledby="mfc-video-heading"> <section id="poc-video" class="poc-video-section" aria-labelledby="mfc-video-heading">
<div class="poc-video-card"> <div class="poc-video-card">
<span class="section-label">🎬 Proof of Concept // YouTube Video Showcase</span> <span class="section-label"> Proof of Concept // YouTube Video Showcase</span>
<h2 id="mfc-video-heading">YouTube Proof-of-Concept Demonstration</h2> <h2 id="mfc-video-heading">YouTube Proof-of-Concept Demonstration</h2>
<div class="poc-video-screen" role="region" aria-label="YouTube Proof of Concept Video Placeholder"> <div class="poc-video-screen" role="region" aria-label="YouTube Proof of Concept Video Placeholder">
<div class="poc-play-badge" aria-hidden="true"> <div class="poc-play-badge" aria-hidden="true">
<div class="poc-play-triangle"></div> <div class="poc-play-triangle"></div>
</div> </div>
<span class="poc-status-pill">🎥 YouTube PoC Video — Recording / Coming Soon</span> <span class="poc-status-pill"> YouTube PoC Video - Recording / Coming Soon</span>
<div class="poc-video-title">ESP32-S3 Multi-Functional Controller — Hardware &amp; 2.4 GHz RF Telemetry Demo</div> <div class="poc-video-title">ESP32-S3 Multi-Functional Controller - Hardware &amp; 2.4 GHz RF Telemetry Demo</div>
<p class="poc-video-desc"> <p class="poc-video-desc">
Upcoming YouTube demonstration covering the Rev 0.1 perfboard carrier power-on test, 2.4 GHz nRF24L01+ packet transmission, Hall-effect gimbal ADC sampling, and ST7789 IPS TFT UI rendering. Upcoming YouTube demonstration covering the Rev 0.1 perfboard carrier power-on test, 2.4 GHz nRF24L01+ packet transmission, Hall-effect gimbal ADC sampling, and ST7789 IPS TFT UI rendering.
</p> </p>
@ -95,7 +91,7 @@
<!-- Early Prototype Hardware Gallery --> <!-- Early Prototype Hardware Gallery -->
<section class="section-block" aria-labelledby="p1-gallery"> <section class="section-block" aria-labelledby="p1-gallery">
<span class="section-label">01 // Early Prototype Build (Rev 0.1 Perfboard Carrier)</span> <span class="section-label">Early Prototype Build (Rev 0.1 Perfboard Carrier)</span>
<h2 id="p1-gallery">Very Early Prototype Hardware Gallery (Click to Zoom)</h2> <h2 id="p1-gallery">Very Early Prototype Hardware Gallery (Click to Zoom)</h2>
<p class="reading-width"> <p class="reading-width">
<em>Note:</em> The photos below show the <strong>very early Phase 1 (Rev 0.1) perfboard carrier build</strong>. Currently populated: female/male pin header sockets, 100 µF electrolytic bulk decoupling capacitor, ESP32-S3-N16R8 module, nRF24L01+ 2.4 GHz radio header, and 3.3V/5V/GND power distribution rails. These photos will be updated as the Phase 2 DT-100 desktop console modules are installed. <em>Note:</em> The photos below show the <strong>very early Phase 1 (Rev 0.1) perfboard carrier build</strong>. Currently populated: female/male pin header sockets, 100 µF electrolytic bulk decoupling capacitor, ESP32-S3-N16R8 module, nRF24L01+ 2.4 GHz radio header, and 3.3V/5V/GND power distribution rails. These photos will be updated as the Phase 2 DT-100 desktop console modules are installed.
@ -124,7 +120,7 @@
<!-- Build, Flash & Clone Commands + C99 Firmware Code --> <!-- Build, Flash & Clone Commands + C99 Firmware Code -->
<section class="section-block" aria-labelledby="p1-code"> <section class="section-block" aria-labelledby="p1-code">
<span class="section-label">02 // Terminal Commands &amp; ESP-IDF C99 Firmware</span> <span class="section-label">Terminal Commands &amp; ESP-IDF C99 Firmware</span>
<h2 id="p1-code">Clone, Build &amp; Flash Commands (ESP-IDF v5.2.2)</h2> <h2 id="p1-code">Clone, Build &amp; Flash Commands (ESP-IDF v5.2.2)</h2>
<p class="reading-width"> <p class="reading-width">
To build and flash the ESP32-S3 master firmware on Arch Linux (or any Linux system with ESP-IDF v5.2.2 installed), run the following commands: To build and flash the ESP32-S3 master firmware on Arch Linux (or any Linux system with ESP-IDF v5.2.2 installed), run the following commands:
@ -133,10 +129,10 @@
<div class="code-window"> <div class="code-window">
<div class="code-window-header"> <div class="code-window-header">
<span class="code-window-title"> <span class="code-window-title">
<span class="code-dots"><span class="code-dot red"></span><span class="code-dot amber"></span><span class="code-dot green"></span></span> <span class="code-dot amber"></span><span class="code-dot green"></span></span>
bash — Clone, Configure Target (esp32s3), Build &amp; Flash bash - Clone, Configure Target (esp32s3), Build &amp; Flash
</span> </span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Commands</button> <button type="button" class="copy-code-btn" data-copy-code>Copy Commands</button>
</div> </div>
<pre><code># 1. Clone the Multi-Functional Controller repository <pre><code># 1. Clone the Multi-Functional Controller repository
git clone https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller.git git clone https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller.git
@ -161,10 +157,10 @@ idf.py -p /dev/ttyACM0 flash monitor</code></pre>
<div class="code-window"> <div class="code-window">
<div class="code-window-header"> <div class="code-window-header">
<span class="code-window-title"> <span class="code-window-title">
<span class="code-dots"><span class="code-dot red"></span><span class="code-dot amber"></span><span class="code-dot green"></span></span> <span class="code-dot amber"></span><span class="code-dot green"></span></span>
c99 — firmware/main/mmcontroller.c (ESP32-S3-N16R8 Hardware Definitions) c99 - firmware/main/mmcontroller.c (ESP32-S3-N16R8 Hardware Definitions)
</span> </span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Code</button> <button type="button" class="copy-code-btn" data-copy-code>Copy Code</button>
</div> </div>
<pre><code>// --- 1. ADC1 ANALOG INPUTS (K-Silver Hall-Effect Joysticks &amp; MAX4466 Mic) --- <pre><code>// --- 1. ADC1 ANALOG INPUTS (K-Silver Hall-Effect Joysticks &amp; MAX4466 Mic) ---
#define PIN_JOY_LX GPIO_NUM_4 // ADC1_CH3 #define PIN_JOY_LX GPIO_NUM_4 // ADC1_CH3
@ -195,19 +191,19 @@ idf.py -p /dev/ttyACM0 flash monitor</code></pre>
<!-- KiCad Schematic --> <!-- KiCad Schematic -->
<section class="section-block" aria-labelledby="p1-schematic"> <section class="section-block" aria-labelledby="p1-schematic">
<span class="section-label">03 // Hardware Schematic Capture</span> <span class="section-label">Hardware Schematic Capture</span>
<h2 id="p1-schematic">Early KiCad 9.0 Schematic (<code>mfc-1.svg</code>)</h2> <h2 id="p1-schematic">Early KiCad 9.0 Schematic (<code>mfc-1.svg</code>)</h2>
<figure class="schematic-frame"> <figure class="schematic-frame">
<img class="zoomable-img" src="../assets/images/mfc-1.svg" alt="KiCad schematic diagram of the ESP32-S3 Multi-Functional Controller" style="background:#ffffff; border-radius:8px; padding:0.5rem;"> <img class="zoomable-img" src="../assets/images/mfc-1.svg" alt="KiCad schematic diagram of the ESP32-S3 Multi-Functional Controller" style="background:#ffffff; border-radius:8px; padding:0.5rem;">
<figcaption class="schematic-caption"> <figcaption class="schematic-caption">
Early prototype KiCad schematic (<code>mfc-1.kicad_sch</code>) — click to zoom full-screen or <a href="../assets/downloads/mfc-1.kicad_sch" download="mfc-1.kicad_sch">download the raw KiCad 9.0 file</a>. Early prototype KiCad schematic (<code>mfc-1.kicad_sch</code>) - click to zoom full-screen or <a href="../assets/downloads/mfc-1.kicad_sch" download="mfc-1.kicad_sch">download the raw KiCad 9.0 file</a>.
</figcaption> </figcaption>
</figure> </figure>
</section> </section>
<!-- Confirmed ESP32-S3 Pinout --> <!-- Confirmed ESP32-S3 Pinout -->
<section class="section-block reading-width" aria-labelledby="p1-pinout"> <section class="section-block reading-width" aria-labelledby="p1-pinout">
<span class="section-label">04 // Verified ESP32-S3-N16R8 Pinout &amp; Bus Architecture</span> <span class="section-label">Verified ESP32-S3-N16R8 Pinout &amp; Bus Architecture</span>
<h2 id="p1-pinout">Master Node GPIO Allocation</h2> <h2 id="p1-pinout">Master Node GPIO Allocation</h2>
<table class="spec-table"> <table class="spec-table">
<thead> <thead>
@ -221,7 +217,7 @@ idf.py -p /dev/ttyACM0 flash monitor</code></pre>
<tr> <tr>
<td><strong>Dual Hall-Effect Joysticks (4 Axes)</strong></td> <td><strong>Dual Hall-Effect Joysticks (4 Axes)</strong></td>
<td><code>GPIO 4, 5, 6, 7</code></td> <td><code>GPIO 4, 5, 6, 7</code></td>
<td>12-bit SAR <code>ADC1</code> (<code>LX, LY, RX, RY</code>) — avoids ADC2 Wi-Fi/RF conflicts</td> <td>12-bit SAR <code>ADC1</code> (<code>LX, LY, RX, RY</code>) - avoids ADC2 Wi-Fi/RF conflicts</td>
</tr> </tr>
<tr> <tr>
<td><strong>MAX4466 Electret Mic Preamp</strong></td> <td><strong>MAX4466 Electret Mic Preamp</strong></td>
@ -264,7 +260,7 @@ idf.py -p /dev/ttyACM0 flash monitor</code></pre>
<!-- Phase 1 vs Phase 2 BOM --> <!-- Phase 1 vs Phase 2 BOM -->
<section class="section-block reading-width" aria-labelledby="p1-bom"> <section class="section-block reading-width" aria-labelledby="p1-bom">
<span class="section-label">05 // Build Roadmap &amp; Phase 2 Console BOM</span> <span class="section-label">Build Roadmap &amp; Phase 2 Console BOM</span>
<h2 id="p1-bom">From Rev 0.1 Carrier to the DT-100 Desktop Console</h2> <h2 id="p1-bom">From Rev 0.1 Carrier to the DT-100 Desktop Console</h2>
<div class="callout-box amber"> <div class="callout-box amber">
<span class="callout-title">Phase 2 Hardware Upgrade (Direnc.net Procurement List)</span> <span class="callout-title">Phase 2 Hardware Upgrade (Direnc.net Procurement List)</span>
@ -289,7 +285,7 @@ idf.py -p /dev/ttyACM0 flash monitor</code></pre>
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="../projects/index.html">Projects</a></li> <li><a href="../projects/index.html">Projects</a></li>
@ -302,6 +298,6 @@ idf.py -p /dev/ttyACM0 flash monitor</code></pre>
</div> </div>
</footer> </footer>
<script src="../assets/js/main.js?v=2"></script> <script src="../assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="colorful"> <html lang="en" data-theme="light">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RC and Autonomous 4WD Vehicle — Projects — Ertunç Özbay</title> <title>RC and Autonomous 4WD Vehicle - Projects - Ertunç Özbay</title>
<meta name="description" content="Project notes and 2.4 GHz telemetry protocol structures for the RC and Autonomous 4WD Vehicle by Ertunç Özbay."> <meta name="description" content="Project notes and 2.4 GHz telemetry protocol structures for the RC and Autonomous 4WD Vehicle by Ertunç Özbay.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg"> <link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css?v=2"> <link rel="stylesheet" href="../assets/css/style.css?v=3">
</head> </head>
<body> <body>
<a class="skip-link" href="#main-content">Skip to main content</a> <a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,19 +17,15 @@
<span class="brand-mark" aria-hidden="true">EÖ</span> <span class="brand-mark" aria-hidden="true">EÖ</span>
<span> <span>
Ertunç Özbay Ertunç Özbay
<span class="brand-subtitle">embedded // hardware // open-source</span> <span class="brand-subtitle">Electrical &amp; Electronics Engineering</span>
</span> </span>
</a> </a>
<div class="header-controls"> <div class="header-controls">
<div class="theme-switcher" role="group" aria-label="Select UI Theme"> <div class="theme-switcher" role="group" aria-label="Theme"><button type="button" class="theme-btn active" data-set-theme="light">Light</button><button type="button" class="theme-btn" data-set-theme="dark">Dark</button></div>
<button type="button" class="theme-btn" data-set-theme="colorful" aria-pressed="true">🎨 Colorful</button>
<button type="button" class="theme-btn" data-set-theme="neon" aria-pressed="false">🌈 Neon</button>
<button type="button" class="theme-btn" data-set-theme="blueprint" aria-pressed="false">📐 Blueprint</button>
</div>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation"> <button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span> <span aria-hidden="true"></span>
<span data-nav-label>Menu</span> <span data-nav-label>Menu</span>
</button> </button>
@ -57,15 +53,15 @@
<header class="workshop-hero"> <header class="workshop-hero">
<div class="card-meta"> <div class="card-meta">
<span class="badge badge-active">Status: In Progress</span> <span class="badge badge-active">Status: In Progress</span>
<span>Project 04 // 4WD Robotics, Control Logic &amp; 2.4 GHz Telemetry</span> <span>Project 4WD Robotics, Control Logic &amp; 2.4 GHz Telemetry</span>
</div> </div>
<h1><span class="gradient-title">RC and Autonomous 4WD Vehicle</span></h1> <h1><span class="gradient-title">RC and Autonomous 4WD Vehicle</span></h1>
<p class="hero-lead"> <p class="hero-lead">
A standalone 4WD robotic vehicle project exploring manual 2.4 GHz wireless control (paired with my <a href="multi-functional-controller.html">Multi-Functional RC Controller</a>) and autonomous obstacle-avoidance behavior. A standalone 4WD robotic vehicle project exploring manual 2.4 GHz wireless control (paired with my <a href="multi-functional-controller.html">Multi-Functional RC Controller</a>) and autonomous obstacle-avoidance behavior.
</p> </p>
<div class="button-row"> <div class="button-row">
<a class="btn btn-youtube" href="#poc-video">🎬 Watch PoC Video Slot</a> <a class="btn btn-youtube" href="#poc-video"> Watch PoC Video Slot</a>
<a class="btn btn-primary" href="multi-functional-controller.html">🎛️ Companion RC Controller</a> <a class="btn btn-primary" href="multi-functional-controller.html"> Companion RC Controller</a>
<a class="btn btn-secondary" href="index.html">All Projects</a> <a class="btn btn-secondary" href="index.html">All Projects</a>
</div> </div>
</header> </header>
@ -73,14 +69,14 @@
<!-- YouTube Proof-of-Concept Video Placeholder --> <!-- YouTube Proof-of-Concept Video Placeholder -->
<section id="poc-video" class="poc-video-section" aria-labelledby="rc-video-heading"> <section id="poc-video" class="poc-video-section" aria-labelledby="rc-video-heading">
<div class="poc-video-card"> <div class="poc-video-card">
<span class="section-label">🎬 Proof of Concept // YouTube Video Showcase</span> <span class="section-label"> Proof of Concept // YouTube Video Showcase</span>
<h2 id="rc-video-heading">YouTube Proof-of-Concept Demonstration</h2> <h2 id="rc-video-heading">YouTube Proof-of-Concept Demonstration</h2>
<div class="poc-video-screen" role="region" aria-label="YouTube Proof of Concept Video Placeholder"> <div class="poc-video-screen" role="region" aria-label="YouTube Proof of Concept Video Placeholder">
<div class="poc-play-badge" aria-hidden="true"> <div class="poc-play-badge" aria-hidden="true">
<div class="poc-play-triangle"></div> <div class="poc-play-triangle"></div>
</div> </div>
<span class="poc-status-pill">🎥 YouTube PoC Video — Recording / Coming Soon</span> <span class="poc-status-pill"> YouTube PoC Video - Recording / Coming Soon</span>
<div class="poc-video-title">4WD RC &amp; Autonomous Vehicle — Wireless Drive &amp; Control Loop Test</div> <div class="poc-video-title">4WD RC &amp; Autonomous Vehicle - Wireless Drive &amp; Control Loop Test</div>
<p class="poc-video-desc"> <p class="poc-video-desc">
Upcoming YouTube demonstration covering 2.4 GHz remote drive response from the Multi-Functional Controller, motor driver PWM tuning, and autonomous mode switching. Upcoming YouTube demonstration covering 2.4 GHz remote drive response from the Multi-Functional Controller, motor driver PWM tuning, and autonomous mode switching.
</p> </p>
@ -89,7 +85,7 @@
</section> </section>
<section class="section-block reading-width" aria-labelledby="p2-overview"> <section class="section-block reading-width" aria-labelledby="p2-overview">
<span class="section-label">01 // Overview</span> <span class="section-label">Overview</span>
<h2 id="p2-overview">Why I Am Building This</h2> <h2 id="p2-overview">Why I Am Building This</h2>
<p> <p>
A physical vehicle sits right at the intersection of the subjects I care about most: power electronics, closed-loop control logic, and real-time embedded decision-making. If a firmware routine makes a bad timing assumption or power transients aren't filtered properly, you see it immediately in how the vehicle behaves on the floor. A physical vehicle sits right at the intersection of the subjects I care about most: power electronics, closed-loop control logic, and real-time embedded decision-making. If a firmware routine makes a bad timing assumption or power transients aren't filtered properly, you see it immediately in how the vehicle behaves on the floor.
@ -101,7 +97,7 @@
<!-- 2.4 GHz Control Packet Code Snippet --> <!-- 2.4 GHz Control Packet Code Snippet -->
<section class="section-block" aria-labelledby="p2-protocol"> <section class="section-block" aria-labelledby="p2-protocol">
<span class="section-label">02 // 2.4 GHz Wireless Protocol Structure</span> <span class="section-label">2.4 GHz Wireless Protocol Structure</span>
<h2 id="p2-protocol">Packed C99 Telemetry &amp; Drive Structs</h2> <h2 id="p2-protocol">Packed C99 Telemetry &amp; Drive Structs</h2>
<p class="reading-width"> <p class="reading-width">
To guarantee deterministic serialization over the 32-byte nRF24L01+ payload buffer between the controller and the vehicle, the link layer uses packed fixed-width C99 structs: To guarantee deterministic serialization over the 32-byte nRF24L01+ payload buffer between the controller and the vehicle, the link layer uses packed fixed-width C99 structs:
@ -110,10 +106,10 @@
<div class="code-window"> <div class="code-window">
<div class="code-window-header"> <div class="code-window-header">
<span class="code-window-title"> <span class="code-window-title">
<span class="code-dots"><span class="code-dot red"></span><span class="code-dot amber"></span><span class="code-dot green"></span></span> <span class="code-dot amber"></span><span class="code-dot green"></span></span>
c99 — Packed 2.4 GHz Control &amp; Telemetry Packet Definition c99 - Packed 2.4 GHz Control &amp; Telemetry Packet Definition
</span> </span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Code</button> <button type="button" class="copy-code-btn" data-copy-code>Copy Code</button>
</div> </div>
<pre><code>#include &lt;stdint.h&gt; <pre><code>#include &lt;stdint.h&gt;
#include &lt;assert.h&gt; #include &lt;assert.h&gt;
@ -132,7 +128,7 @@ _Static_assert(sizeof(RcControlPacket_t) == 8, "RcControlPacket_t must be 8 byte
</section> </section>
<section class="section-block reading-width" aria-labelledby="p2-confirmed"> <section class="section-block reading-width" aria-labelledby="p2-confirmed">
<span class="section-label">03 // Confirmed Information</span> <span class="section-label">Confirmed Information</span>
<h2 id="p2-confirmed">Current Documentation Status</h2> <h2 id="p2-confirmed">Current Documentation Status</h2>
<table class="spec-table"> <table class="spec-table">
<thead> <thead>
@ -169,7 +165,7 @@ _Static_assert(sizeof(RcControlPacket_t) == 8, "RcControlPacket_t must be 8 byte
<footer class="site-footer"> <footer class="site-footer">
<div class="container footer-inner"> <div class="container footer-inner">
<div> <div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a> <strong>Ertunç Özbay</strong> - Electrical &amp; Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
</div> </div>
<ul class="footer-links" aria-label="Footer links"> <ul class="footer-links" aria-label="Footer links">
<li><a href="../projects/index.html">Projects</a></li> <li><a href="../projects/index.html">Projects</a></li>
@ -182,6 +178,6 @@ _Static_assert(sizeof(RcControlPacket_t) == 8, "RcControlPacket_t must be 8 byte
</div> </div>
</footer> </footer>
<script src="../assets/js/main.js?v=2"></script> <script src="../assets/js/main.js?v=3"></script>
</body> </body>
</html> </html>