Simplify stylesheet and copy to clean Light/Dark layout without emojis
This commit is contained in:
parent
15b97948dd
commit
cd61dc9ac8
14 changed files with 809 additions and 1417 deletions
14
README.md
14
README.md
|
|
@ -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
|
||||
- **Web Server:** Caddy (`/var/www/ertuncozbay.dev`)
|
||||
- **Self-Hosted Git Server:** Forgejo (`https://git.ertuncozbay.dev/ertunc-ozbay`)
|
||||
- **UI Themes:** 3-Mode Studio Theme Switcher (`🎨 Colorful` default, `🌈 Neon`, `📐 Blueprint`)
|
||||
- **Contact:** `ertunc.ozbay@outlook.com`
|
||||
Plain HTML, CSS, and vanilla JavaScript served by Caddy on Debian 12.
|
||||
|
||||
- Website: https://ertuncozbay.dev
|
||||
- Git repositories: https://git.ertuncozbay.dev/ertunc-ozbay
|
||||
- Contact: ertunc.ozbay@outlook.com
|
||||
|
|
|
|||
28
about.html
28
about.html
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<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.">
|
||||
<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>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -50,7 +46,7 @@
|
|||
<main id="main-content">
|
||||
<div class="container">
|
||||
<section class="workshop-hero" aria-labelledby="about-heading">
|
||||
<span class="workshop-eyebrow">⚡ ABOUT // IDENTITY & ENGINEERING APPROACH</span>
|
||||
<span class="workshop-eyebrow"> ABOUT // IDENTITY & ENGINEERING APPROACH</span>
|
||||
<h1 id="about-heading"><span class="gradient-title">About Me & This Engineering Studio</span></h1>
|
||||
<p class="hero-lead">
|
||||
I am an Electrical & 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 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>
|
||||
<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.
|
||||
|
|
@ -79,7 +75,7 @@
|
|||
</figure>
|
||||
|
||||
<section class="section-block reading-width" aria-labelledby="philosophy-heading">
|
||||
<span class="section-label">02 // Hardware, Software & AI Philosophy</span>
|
||||
<span class="section-label">Hardware, Software & AI Philosophy</span>
|
||||
<h2 id="philosophy-heading">Why I Want to Understand Both Sides of a System</h2>
|
||||
<div class="callout-box amber">
|
||||
<span class="callout-title">Core Principle</span>
|
||||
|
|
@ -100,7 +96,7 @@
|
|||
<section class="section-block" aria-labelledby="interests-heading">
|
||||
<div class="section-header">
|
||||
<div>
|
||||
<span class="section-label">03 // Technical Stack</span>
|
||||
<span class="section-label">Technical Stack</span>
|
||||
<h2 id="interests-heading">Areas I Am Building & Exploring</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -153,7 +149,7 @@
|
|||
<footer class="site-footer">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<li><a href="projects/index.html">Projects</a></li>
|
||||
|
|
@ -166,6 +162,6 @@
|
|||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="assets/js/main.js?v=2"></script>
|
||||
<script src="assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
1517
assets/css/style.css
1517
assets/css/style.css
File diff suppressed because it is too large
Load diff
|
|
@ -1,157 +1,80 @@
|
|||
/* ==========================================================================
|
||||
Ertunç Özbay — Workshop & Portfolio Script (Plain JS, No Dependencies)
|
||||
Handles:
|
||||
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
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Ertunç Özbay — Personal Engineering Website
|
||||
* Theme toggle (Light / Dark), copy helpers, and image zoom
|
||||
*/
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
// 1. Multi-Theme Switcher (Colorful Default, Cyber Neon, Blueprint Lab)
|
||||
var rootEl = document.documentElement;
|
||||
var validThemes = ["colorful", "neon", "blueprint"];
|
||||
var savedTheme = "colorful";
|
||||
var STORAGE_KEY = "ertunc_site_theme";
|
||||
var root = document.documentElement;
|
||||
|
||||
function applyTheme(theme) {
|
||||
var mode = theme === "dark" ? "dark" : "light";
|
||||
root.setAttribute("data-theme", mode);
|
||||
try {
|
||||
var stored = localStorage.getItem("eo-studio-theme");
|
||||
if (stored && validThemes.indexOf(stored) !== -1) {
|
||||
savedTheme = stored;
|
||||
}
|
||||
localStorage.setItem(STORAGE_KEY, mode);
|
||||
} catch (e) {}
|
||||
|
||||
function applyTheme(themeName) {
|
||||
if (validThemes.indexOf(themeName) === -1) {
|
||||
themeName = "colorful";
|
||||
document.querySelectorAll(".theme-btn[data-set-theme]").forEach(function (btn) {
|
||||
var isMatch = btn.getAttribute("data-set-theme") === mode;
|
||||
btn.classList.toggle("active", isMatch);
|
||||
btn.setAttribute("aria-pressed", isMatch ? "true" : "false");
|
||||
});
|
||||
}
|
||||
rootEl.setAttribute("data-theme", themeName);
|
||||
|
||||
var saved = null;
|
||||
try {
|
||||
localStorage.setItem("eo-studio-theme", themeName);
|
||||
saved = localStorage.getItem(STORAGE_KEY);
|
||||
} catch (e) {}
|
||||
applyTheme(saved === "dark" ? "dark" : "light");
|
||||
|
||||
var buttons = document.querySelectorAll("[data-set-theme]");
|
||||
buttons.forEach(function (btn) {
|
||||
var isTarget = btn.getAttribute("data-set-theme") === themeName;
|
||||
btn.setAttribute("aria-pressed", isTarget ? "true" : "false");
|
||||
});
|
||||
}
|
||||
|
||||
applyTheme(savedTheme);
|
||||
|
||||
document.addEventListener("click", function (event) {
|
||||
var themeBtn = event.target.closest("[data-set-theme]");
|
||||
if (themeBtn) {
|
||||
applyTheme(themeBtn.getAttribute("data-set-theme"));
|
||||
}
|
||||
});
|
||||
|
||||
// 2. Mobile Navigation Toggle
|
||||
var navToggle = document.querySelector("[data-nav-toggle]");
|
||||
var siteNav = document.querySelector("[data-site-nav]");
|
||||
|
||||
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) {
|
||||
document.querySelectorAll(".theme-btn[data-set-theme]").forEach(function (btn) {
|
||||
btn.addEventListener("click", function () {
|
||||
var email = btn.getAttribute("data-copy-email");
|
||||
if (!email || !navigator.clipboard) return;
|
||||
var originalText = btn.textContent;
|
||||
applyTheme(btn.getAttribute("data-set-theme"));
|
||||
});
|
||||
});
|
||||
|
||||
// Copy Email Button
|
||||
var copyEmailBtns = document.querySelectorAll("[data-copy-email]");
|
||||
copyEmailBtns.forEach(function (btn) {
|
||||
btn.addEventListener("click", function () {
|
||||
var email = btn.getAttribute("data-copy-email") || "ertunc.ozbay@outlook.com";
|
||||
if (!navigator.clipboard) return;
|
||||
navigator.clipboard.writeText(email).then(function () {
|
||||
btn.textContent = "✓ Copied: " + email;
|
||||
var orig = btn.textContent;
|
||||
btn.textContent = "Copied: " + email;
|
||||
setTimeout(function () {
|
||||
btn.textContent = originalText;
|
||||
}, 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;
|
||||
btn.textContent = orig;
|
||||
}, 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");
|
||||
if (zoomImages.length > 0) {
|
||||
var backdrop = document.createElement("div");
|
||||
backdrop.className = "lightbox-backdrop";
|
||||
backdrop.hidden = true;
|
||||
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="">' +
|
||||
'<div class="lightbox-caption"></div>';
|
||||
document.body.appendChild(backdrop);
|
||||
|
|
@ -182,16 +105,4 @@
|
|||
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");
|
||||
});
|
||||
}
|
||||
})();
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Blog & Build Notes — Ertunç Özbay</title>
|
||||
<title>Blog & 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.">
|
||||
<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>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -50,7 +46,7 @@
|
|||
<main id="main-content">
|
||||
<div class="container">
|
||||
<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 & Build Notes</span></h1>
|
||||
<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.
|
||||
|
|
@ -82,7 +78,7 @@
|
|||
<div class="card-meta">
|
||||
<span class="badge badge-draft">Starter Note</span>
|
||||
<time datetime="2026-10-14">October 14, 2026</time>
|
||||
<span>• 3 min read</span>
|
||||
<span>· 3 min read</span>
|
||||
</div>
|
||||
<h3><a href="welcome-to-my-workshop-note.html">Why I Built This Personal Workshop & Learning Notebook</a></h3>
|
||||
<p>
|
||||
|
|
@ -103,9 +99,9 @@
|
|||
<article class="card card-synth" data-blog-category="template,build-logs">
|
||||
<div class="card-top">
|
||||
<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>
|
||||
<span>• 2 min read</span>
|
||||
<span>· 2 min read</span>
|
||||
</div>
|
||||
<h3><a href="post-template.html">[Template] Project Build Log & Technical Note Template</a></h3>
|
||||
<p>
|
||||
|
|
@ -129,7 +125,7 @@
|
|||
<footer class="site-footer">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<li><a href="../projects/index.html">Projects</a></li>
|
||||
|
|
@ -142,6 +138,6 @@
|
|||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="../assets/js/main.js?v=2"></script>
|
||||
<script src="../assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>[Template] Project Build Log & Technical Note — Blog — Ertunç Özbay</title>
|
||||
<title>[Template] Project Build Log & Technical Note - Blog - Ertunç Özbay</title>
|
||||
<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="stylesheet" href="../assets/css/style.css?v=2">
|
||||
<link rel="stylesheet" href="../assets/css/style.css?v=3">
|
||||
</head>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -56,13 +52,12 @@
|
|||
<article class="reading-width">
|
||||
<header class="workshop-hero">
|
||||
<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>
|
||||
<span>• Category: Build Log / Technical Note</span>
|
||||
<span>· Category: Build Log / Technical Note</span>
|
||||
</div>
|
||||
<h1><span class="gradient-title">[Template] Project Build Log & Technical Note Title</span></h1>
|
||||
<p class="hero-lead">
|
||||
Copy this file to create a new static build log entry with hardware notes, copyable code windows, and lessons learned.
|
||||
<p class="hero-lead">Copy this file to create a new static build log entry with hardware notes, copyable code windows, and lessons learned.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
|
|
@ -72,10 +67,10 @@
|
|||
<div class="code-window">
|
||||
<div class="code-window-header">
|
||||
<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>
|
||||
c99 — Example Firmware Snippet
|
||||
<span class="code-dot amber"></span><span class="code-dot green"></span></span>
|
||||
c99 - Example Firmware Snippet
|
||||
</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>
|
||||
<pre><code>// Example code block in post template
|
||||
void app_main(void) {
|
||||
|
|
@ -93,7 +88,7 @@ void app_main(void) {
|
|||
<footer class="site-footer">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<li><a href="../projects/index.html">Projects</a></li>
|
||||
|
|
@ -106,6 +101,6 @@ void app_main(void) {
|
|||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="../assets/js/main.js?v=2"></script>
|
||||
<script src="../assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Why I Built This Personal Workshop & Learning Notebook — Blog — Ertunç Özbay</title>
|
||||
<title>Why I Built This Personal Workshop & 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.">
|
||||
<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>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -58,8 +54,8 @@
|
|||
<div class="card-meta">
|
||||
<span class="badge badge-draft">Starter Note</span>
|
||||
<time datetime="2026-10-14">October 14, 2026</time>
|
||||
<span>• Category: Personal Learning Reflections</span>
|
||||
<span>• Reading time: 3 min read</span>
|
||||
<span>· Category: Personal Learning Reflections</span>
|
||||
<span>· Reading time: 3 min read</span>
|
||||
</div>
|
||||
<h1><span class="gradient-title">Why I Built This Personal Workshop & Learning Notebook</span></h1>
|
||||
<p class="hero-lead">
|
||||
|
|
@ -108,7 +104,7 @@
|
|||
<footer class="site-footer">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<li><a href="../projects/index.html">Projects</a></li>
|
||||
|
|
@ -121,6 +117,6 @@
|
|||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="../assets/js/main.js?v=2"></script>
|
||||
<script src="../assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
48
contact.html
48
contact.html
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Contact & Collaboration — Ertunç Özbay</title>
|
||||
<title>Contact & 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.">
|
||||
<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>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -50,23 +46,23 @@
|
|||
<main id="main-content">
|
||||
<div class="container">
|
||||
<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 & Collaboration</span></h1>
|
||||
<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.
|
||||
</p>
|
||||
<div class="button-row">
|
||||
<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>
|
||||
<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-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>
|
||||
<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>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section-block" aria-labelledby="contact-links-heading">
|
||||
<div class="section-header">
|
||||
<div>
|
||||
<span class="section-label">01 // Direct Channels</span>
|
||||
<span class="section-label">Direct Channels</span>
|
||||
<h2 id="contact-links-heading">Email, LinkedIn & Self-Hosted Git</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -86,7 +82,7 @@
|
|||
</div>
|
||||
<div class="card-actions">
|
||||
<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>
|
||||
|
||||
|
|
@ -117,7 +113,7 @@
|
|||
<section class="section-block" aria-labelledby="repos-heading">
|
||||
<div class="section-header">
|
||||
<div>
|
||||
<span class="section-label">02 // Public Open-Source Repositories & Direct Downloads</span>
|
||||
<span class="section-label">Public Open-Source Repositories & Direct Downloads</span>
|
||||
<h2 id="repos-heading">Active Self-Hosted Git Repositories</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -125,7 +121,7 @@
|
|||
<div class="card-grid-2">
|
||||
<div class="card card-amber">
|
||||
<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>
|
||||
<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.
|
||||
|
|
@ -133,14 +129,14 @@
|
|||
</div>
|
||||
<div class="card-actions">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card card-synth">
|
||||
<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>
|
||||
<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).
|
||||
|
|
@ -148,14 +144,14 @@
|
|||
</div>
|
||||
<div class="card-actions">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card card-emerald">
|
||||
<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>
|
||||
<p>
|
||||
Source repository for this static workshop website and engineering notebook hosted at <code>ertuncozbay.dev</code>.
|
||||
|
|
@ -169,7 +165,7 @@
|
|||
</section>
|
||||
|
||||
<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>
|
||||
<ul>
|
||||
<li><strong>Embedded Systems & 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">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<li><a href="projects/index.html">Projects</a></li>
|
||||
|
|
@ -198,6 +194,6 @@
|
|||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="assets/js/main.js?v=2"></script>
|
||||
<script src="assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
77
index.html
77
index.html
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Ertunç Özbay — Embedded Systems, Hardware Lab & Open-Source Projects</title>
|
||||
<title>Ertunç Özbay - Embedded Systems, Hardware Lab & 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.">
|
||||
<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>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -50,36 +46,36 @@
|
|||
<main id="main-content">
|
||||
<div class="container">
|
||||
<section class="workshop-hero" aria-labelledby="hero-heading">
|
||||
<span class="workshop-eyebrow">⚡ ELECTRICAL & ELECTRONICS ENGINEERING // OPEN WORKBENCH</span>
|
||||
<h1 id="hero-heading"><span class="gradient-title">Hi, I’m Ertunç Özbay.</span></h1>
|
||||
<span class="workshop-eyebrow">Electrical & Electronics Engineering</span>
|
||||
<h1 id="hero-heading">Ertunç Özbay</h1>
|
||||
<p class="hero-lead">
|
||||
I design embedded hardware, write bare-metal C & 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 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>
|
||||
<div class="button-row">
|
||||
<a class="btn btn-primary" href="projects/index.html">🚀 Explore Projects, Code & Downloads</a>
|
||||
<a class="btn btn-cyan" href="https://git.ertuncozbay.dev/ertunc-ozbay" rel="noopener noreferrer">💻 Git Server (@ertunc-ozbay)</a>
|
||||
<a class="btn btn-secondary" href="contact.html">✉️ Contact (ertunc.ozbay@outlook.com)</a>
|
||||
<a class="btn btn-primary" href="projects/index.html">Projects</a>
|
||||
<a class="btn" href="https://git.ertuncozbay.dev/ertunc-ozbay" rel="noopener noreferrer">Git Repositories</a>
|
||||
<a class="btn" href="contact.html">Contact (ertunc.ozbay@outlook.com)</a>
|
||||
</div>
|
||||
|
||||
<div class="stats-strip" aria-label="Workshop highlights">
|
||||
<div class="stats-strip" aria-label="Overview">
|
||||
<div class="stat-pill">
|
||||
<span class="stat-value">4 Active Builds</span>
|
||||
<span class="stat-label">ESP32-S3, ESP32, 4WD RC & Linux/Rust</span>
|
||||
<span class="stat-value">3 Hardware Projects</span>
|
||||
<span class="stat-label">ESP32-S3, ESP32 & 4WD Robotics</span>
|
||||
</div>
|
||||
<div class="stat-pill">
|
||||
<span class="stat-value">ESP-IDF v5.2.2</span>
|
||||
<span class="stat-label">ISO C99, Dual-Core FreeRTOS & KiCad</span>
|
||||
<span class="stat-label">ISO C99, FreeRTOS & KiCad</span>
|
||||
</div>
|
||||
<div class="stat-pill">
|
||||
<span class="stat-value">16-Track Synth</span>
|
||||
<span class="stat-label">Custom Python RLE MIDI-to-C Compiler</span>
|
||||
<span class="stat-value">MIDI Sequencer</span>
|
||||
<span class="stat-label">Python RLE MIDI-to-C Tooling</span>
|
||||
</div>
|
||||
<div class="stat-pill">
|
||||
<span class="stat-value">Direct Downloads</span>
|
||||
<span class="stat-label">Pre-Built Binaries, Firmware & Schematics</span>
|
||||
<span class="stat-value">Source & Schematics</span>
|
||||
<span class="stat-label">Self-Hosted on git.ertuncozbay.dev</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -87,7 +83,7 @@
|
|||
<section class="section-block" aria-labelledby="active-builds-heading">
|
||||
<div class="section-header">
|
||||
<div>
|
||||
<span class="section-label">01 // Featured Hardware, Firmware & Software Builds</span>
|
||||
<span class="section-label">Featured Hardware, Firmware & Software Builds</span>
|
||||
<h2 id="active-builds-heading">Projects, Commands & Downloads</h2>
|
||||
</div>
|
||||
<a href="projects/index.html">View all project code, commands & PoC videos →</a>
|
||||
|
|
@ -99,7 +95,7 @@
|
|||
<div class="card-top">
|
||||
<div class="card-meta">
|
||||
<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>
|
||||
<h3><a href="projects/multi-functional-controller.html">Multi-Functional RC Controller (MFC)</a></h3>
|
||||
<p>
|
||||
|
|
@ -114,7 +110,7 @@
|
|||
</div>
|
||||
<div class="card-actions">
|
||||
<a class="btn btn-primary" href="projects/multi-functional-controller.html">Code, Commands & 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>
|
||||
</div>
|
||||
</article>
|
||||
|
|
@ -124,9 +120,9 @@
|
|||
<div class="card-top">
|
||||
<div class="card-meta">
|
||||
<span class="badge badge-experimental">Active Prototype</span>
|
||||
<span>Dual-Core ESP32 • Audio & UI</span>
|
||||
<span>Dual-Core ESP32 · Audio & UI</span>
|
||||
</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>
|
||||
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>
|
||||
|
|
@ -139,7 +135,7 @@
|
|||
</div>
|
||||
<div class="card-actions">
|
||||
<a class="btn btn-primary" href="projects/midi-breadboard-instrument.html">Code, Commands & 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>
|
||||
</div>
|
||||
</article>
|
||||
|
|
@ -149,7 +145,7 @@
|
|||
<div class="card-top">
|
||||
<div class="card-meta">
|
||||
<span class="badge badge-active">In Development</span>
|
||||
<span>Robotics • Control Logic</span>
|
||||
<span>Robotics · Control Logic</span>
|
||||
</div>
|
||||
<h3><a href="projects/rc-autonomous-vehicle.html">RC and Autonomous 4WD Vehicle</a></h3>
|
||||
<p>
|
||||
|
|
@ -172,7 +168,7 @@
|
|||
<section class="section-block" aria-labelledby="quick-cli-heading">
|
||||
<div class="section-header">
|
||||
<div>
|
||||
<span class="section-label">02 // Quick Terminal Access</span>
|
||||
<span class="section-label">Quick Terminal Access</span>
|
||||
<h2 id="quick-cli-heading">Clone & Build My Embedded Hardware Projects</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -180,10 +176,10 @@
|
|||
<div class="code-window">
|
||||
<div class="code-window-header">
|
||||
<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>
|
||||
bash — Clone & Build ESP-IDF Firmware (Arch Linux / ESP-IDF v5.2.2)
|
||||
<span class="code-dot amber"></span><span class="code-dot green"></span></span>
|
||||
bash - Clone & Build ESP-IDF Firmware (Arch Linux / ESP-IDF v5.2.2)
|
||||
</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>
|
||||
<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
|
||||
|
|
@ -198,7 +194,7 @@ cd midi-breadboard-instrument && python3 scripts/midi_to_c.py scripts/mi
|
|||
<section class="section-block" aria-labelledby="workshop-areas-heading">
|
||||
<div class="section-header">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -219,8 +215,7 @@ cd midi-breadboard-instrument && python3 scripts/midi_to_c.py scripts/mi
|
|||
<div class="card-top">
|
||||
<span class="section-label">Lab & Bench Notes</span>
|
||||
<h3>The Open Workbench</h3>
|
||||
<p>
|
||||
Explore my active breadboard tests, RLE MIDI-to-C compression algorithms, hardware protection fixes, and reverse-engineering study notes.
|
||||
<p>Explore my active breadboard tests, RLE MIDI-to-C compression algorithms, hardware protection fixes, and reverse-engineering study notes.
|
||||
</p>
|
||||
</div>
|
||||
<a href="lab.html">Open the Lab Notebook →</a>
|
||||
|
|
@ -245,7 +240,7 @@ cd midi-breadboard-instrument && python3 scripts/midi_to_c.py scripts/mi
|
|||
<footer class="site-footer">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<li><a href="projects/index.html">Projects</a></li>
|
||||
|
|
@ -258,6 +253,6 @@ cd midi-breadboard-instrument && python3 scripts/midi_to_c.py scripts/mi
|
|||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="assets/js/main.js?v=2"></script>
|
||||
<script src="assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
46
lab.html
46
lab.html
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Lab & Experiment Notebook — Ertunç Özbay</title>
|
||||
<title>Lab & 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.">
|
||||
<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>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -50,7 +46,7 @@
|
|||
<main id="main-content">
|
||||
<div class="container">
|
||||
<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 & Experiment Notebook</span></h1>
|
||||
<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.
|
||||
|
|
@ -61,7 +57,7 @@
|
|||
<section class="section-block" aria-labelledby="lab-current">
|
||||
<div class="section-header">
|
||||
<div>
|
||||
<span class="section-label">01 // Active Bench Breakthroughs</span>
|
||||
<span class="section-label">Active Bench Breakthroughs</span>
|
||||
<h2 id="lab-current">Recent Hardware & Firmware Experiments</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -70,7 +66,7 @@
|
|||
<div class="card-top">
|
||||
<div class="card-meta">
|
||||
<span class="badge badge-experimental">Solved on Breadboard</span>
|
||||
<span>ESP32 Dual-Core • Python RLE</span>
|
||||
<span>ESP32 Dual-Core · Python RLE</span>
|
||||
</div>
|
||||
<h3>Defeating the 30 Hz MIDI "Strobe-Light" Bug & Piezo Bass Roll-Off</h3>
|
||||
<p>
|
||||
|
|
@ -78,8 +74,8 @@
|
|||
</p>
|
||||
</div>
|
||||
<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-emerald" href="assets/downloads/desk_rave_16track_esp32.c" download="mmcontroller.c">⬇ Download 16-Track C Code</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-secondary" href="projects/midi-breadboard-instrument.html">Full MIDI Project →</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -88,7 +84,7 @@
|
|||
<div class="card-top">
|
||||
<div class="card-meta">
|
||||
<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>
|
||||
<h3>ESP32-S3 Octal PSRAM Pin Collisions & Shared SPI2 Arbitration</h3>
|
||||
<p>
|
||||
|
|
@ -96,8 +92,8 @@
|
|||
</p>
|
||||
</div>
|
||||
<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-emerald" href="assets/downloads/mfc_esp32s3_firmware.c" download="mmcontroller.c">⬇ Download S3 Firmware</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-secondary" href="projects/multi-functional-controller.html">Full Controller Page →</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -108,7 +104,7 @@
|
|||
<section class="section-block" aria-labelledby="lab-software">
|
||||
<div class="section-header">
|
||||
<div>
|
||||
<span class="section-label">02 // Code & Systems Tooling</span>
|
||||
<span class="section-label">Code & Systems Tooling</span>
|
||||
<h2 id="lab-software">Custom Compilers & Linux Runtime Tools</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -116,7 +112,7 @@
|
|||
<div class="card card-coral">
|
||||
<div class="card-top">
|
||||
<div class="card-meta">
|
||||
<span class="badge badge-coral">KiCad • Hardware Design</span>
|
||||
<span class="badge badge-coral">KiCad · Hardware Design</span>
|
||||
<span>Schematic & PCB Capture</span>
|
||||
</div>
|
||||
<h3>KiCad Schematic Capture for ESP32-S3 Hardware (<code>mfc-1.kicad_sch</code>)</h3>
|
||||
|
|
@ -125,7 +121,7 @@
|
|||
</p>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -133,7 +129,7 @@
|
|||
<div class="card card-emerald">
|
||||
<div class="card-top">
|
||||
<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>
|
||||
</div>
|
||||
<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">
|
||||
<div class="section-header">
|
||||
<div>
|
||||
<span class="section-label">03 // System Internals</span>
|
||||
<span class="section-label">System Internals</span>
|
||||
<h2 id="lab-re">Reverse-Engineering & Low-Level Study Log</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -173,7 +169,7 @@
|
|||
<footer class="site-footer">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<li><a href="projects/index.html">Projects</a></li>
|
||||
|
|
@ -186,6 +182,6 @@
|
|||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="assets/js/main.js?v=2"></script>
|
||||
<script src="assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Projects, Code & Downloads — Ertunç Özbay</title>
|
||||
<title>Projects, Code & 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.">
|
||||
<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>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -50,7 +46,7 @@
|
|||
<main id="main-content">
|
||||
<div class="container">
|
||||
<section class="workshop-hero" aria-labelledby="projects-heading">
|
||||
<span class="workshop-eyebrow">⚡ PROJECT SHOWCASE // CODE, COMMANDS, DOWNLOADS & POC VIDEOS</span>
|
||||
<span class="workshop-eyebrow"> PROJECT SHOWCASE // CODE, COMMANDS, DOWNLOADS & POC VIDEOS</span>
|
||||
<h1 id="projects-heading"><span class="gradient-title">Engineering Projects & Open-Source Builds</span></h1>
|
||||
<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>.
|
||||
|
|
@ -71,7 +67,7 @@
|
|||
<div class="card-top">
|
||||
<div class="card-meta">
|
||||
<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>
|
||||
<h3><a href="multi-functional-controller.html">Multi-Functional RC Controller (MFC)</a></h3>
|
||||
<p>
|
||||
|
|
@ -88,13 +84,13 @@
|
|||
</ul>
|
||||
|
||||
<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 & `.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 & `.zip` archive, 3 prototype photos, and <strong> YouTube PoC Video slot</strong>.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-actions">
|
||||
<a class="btn btn-primary" href="multi-functional-controller.html">Open Page, Code & 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>
|
||||
</div>
|
||||
</article>
|
||||
|
|
@ -104,9 +100,9 @@
|
|||
<div class="card-top">
|
||||
<div class="card-meta">
|
||||
<span class="badge badge-experimental">Active Breadboard Synth</span>
|
||||
<span>Project 02 • Audio & Dual-Core RTOS</span>
|
||||
<span>Project 02 · Audio & Dual-Core RTOS</span>
|
||||
</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>
|
||||
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>
|
||||
|
|
@ -121,13 +117,13 @@
|
|||
</ul>
|
||||
|
||||
<div class="project-notes">
|
||||
<p><strong>Included on page:</strong> Full `midi_to_c.py` Python script & C99 Dual-Core FreeRTOS audio engine code, copyable CLI commands, downloadable `.py` & `.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 & C99 Dual-Core FreeRTOS audio engine code, copyable CLI commands, downloadable `.py` & `.zip` links, 3 breadboard photos, and <strong> YouTube PoC Video slot</strong>.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-actions">
|
||||
<a class="btn btn-primary" href="midi-breadboard-instrument.html">Open Page, Code & 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>
|
||||
</div>
|
||||
</article>
|
||||
|
|
@ -137,7 +133,7 @@
|
|||
<div class="card-top">
|
||||
<div class="card-meta">
|
||||
<span class="badge badge-active">In Progress</span>
|
||||
<span>Project 03 • Robotics & Control</span>
|
||||
<span>Project 03 · Robotics & Control</span>
|
||||
</div>
|
||||
<h3><a href="rc-autonomous-vehicle.html">RC and Autonomous 4WD Vehicle</a></h3>
|
||||
<p>
|
||||
|
|
@ -152,7 +148,7 @@
|
|||
</ul>
|
||||
|
||||
<div class="project-notes">
|
||||
<p><strong>Included on page:</strong> C99 2.4 GHz telemetry receiver packet & 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 & differential motor drive code structure, companion controller link, and <strong> YouTube PoC Video slot</strong>.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -169,7 +165,7 @@
|
|||
<footer class="site-footer">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<li><a href="../projects/index.html">Projects</a></li>
|
||||
|
|
@ -182,6 +178,6 @@
|
|||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="../assets/js/main.js?v=2"></script>
|
||||
<script src="../assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>MIDI Breadboard Instrument (Desk Rave & 16-Track Symphony) — Projects — Ertunç Özbay</title>
|
||||
<title>MIDI Breadboard Instrument (MIDI Sequencer & 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.">
|
||||
<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>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -57,9 +53,9 @@
|
|||
<header class="workshop-hero">
|
||||
<div class="card-meta">
|
||||
<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>
|
||||
<h1><span class="gradient-title">MIDI Breadboard Instrument — Desk Rave & 16-Track Symphony</span></h1>
|
||||
<h1><span class="gradient-title">MIDI Breadboard Instrument - MIDI Sequencer & 16-Track Symphony</span></h1>
|
||||
<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.
|
||||
</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.
|
||||
</p>
|
||||
<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-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-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-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-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-youtube" href="#poc-video"> Watch PoC Video Slot</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- YouTube Proof-of-Concept Video Placeholder -->
|
||||
<section id="poc-video" class="poc-video-section" aria-labelledby="midi-video-heading">
|
||||
<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>
|
||||
<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-triangle"></div>
|
||||
</div>
|
||||
<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 & 30 FPS OLED Demo</div>
|
||||
<span class="poc-status-pill"> YouTube PoC Video - Recording / Coming Soon</span>
|
||||
<div class="poc-video-title">MIDI Sequencer 16-Track ESP32 MIDI Synthesizer - Live Audio & 30 FPS OLED Demo</div>
|
||||
<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.
|
||||
</p>
|
||||
|
|
@ -101,7 +97,7 @@
|
|||
</figure>
|
||||
|
||||
<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>
|
||||
<div class="card-grid">
|
||||
<figure class="card card-synth" style="margin:0;">
|
||||
|
|
@ -127,7 +123,7 @@
|
|||
|
||||
<!-- Terminal Commands & Source Code Section -->
|
||||
<section class="section-block" aria-labelledby="p3-code">
|
||||
<span class="section-label">02 // Terminal Commands, Python RLE Compiler & C99 Firmware</span>
|
||||
<span class="section-label">Terminal Commands, Python RLE Compiler & C99 Firmware</span>
|
||||
<h2 id="p3-code">Build, Flash & MIDI Conversion Commands</h2>
|
||||
<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:
|
||||
|
|
@ -136,10 +132,10 @@
|
|||
<div class="code-window">
|
||||
<div class="code-window-header">
|
||||
<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>
|
||||
bash — Convert MIDI to C & Flash ESP32 Firmware (ESP-IDF v5.2.2)
|
||||
<span class="code-dot amber"></span><span class="code-dot green"></span></span>
|
||||
bash - Convert MIDI to C & Flash ESP32 Firmware (ESP-IDF v5.2.2)
|
||||
</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>
|
||||
<pre><code># 1. Clone the repository
|
||||
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-header">
|
||||
<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>
|
||||
python3 — scripts/midi_to_c.py (RLE Compression & Drum Routing Engine)
|
||||
<span class="code-dot amber"></span><span class="code-dot green"></span></span>
|
||||
python3 - scripts/midi_to_c.py (RLE Compression & Drum Routing Engine)
|
||||
</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>
|
||||
<pre><code>#!/usr/bin/env python3
|
||||
import sys, mido
|
||||
|
|
@ -202,10 +198,10 @@ def convert_midi_to_c(midi_filename):
|
|||
<div class="code-window">
|
||||
<div class="code-window-header">
|
||||
<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>
|
||||
c99 — main/mmcontroller.c (SequenceStep Struct & Dual-Core Task Pinning)
|
||||
<span class="code-dot amber"></span><span class="code-dot green"></span></span>
|
||||
c99 - main/mmcontroller.c (SequenceStep Struct & Dual-Core Task Pinning)
|
||||
</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>
|
||||
<pre><code>typedef struct {
|
||||
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;
|
||||
|
||||
void app_main(void) {
|
||||
printf("Desk Rave: 16-Track Symphony Edition Initializing...\n");
|
||||
printf("MIDI Sequencer: 16-Track Symphony Edition Initializing...\n");
|
||||
init_hardware();
|
||||
|
||||
// Core 0: 30 FPS SPI OLED Framebuffer Visualizer & 50ms Button Polling
|
||||
|
|
@ -229,7 +225,7 @@ void app_main(void) {
|
|||
</section>
|
||||
|
||||
<section class="section-block reading-width" aria-labelledby="p3-components">
|
||||
<span class="section-label">03 // Confirmed Hardware & Pinout</span>
|
||||
<span class="section-label">Confirmed Hardware & Pinout</span>
|
||||
<h2 id="p3-components">ESP32 Pinout & Architecture Specifications</h2>
|
||||
<table class="spec-table">
|
||||
<thead>
|
||||
|
|
@ -285,7 +281,7 @@ void app_main(void) {
|
|||
</section>
|
||||
|
||||
<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>
|
||||
<ol>
|
||||
<li><strong>Careless Whisper</strong> (Extended Club Edit)</li>
|
||||
|
|
@ -314,7 +310,7 @@ void app_main(void) {
|
|||
<footer class="site-footer">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<li><a href="../projects/index.html">Projects</a></li>
|
||||
|
|
@ -327,6 +323,6 @@ void app_main(void) {
|
|||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="../assets/js/main.js?v=2"></script>
|
||||
<script src="../assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<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.">
|
||||
<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>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -57,7 +53,7 @@
|
|||
<header class="workshop-hero">
|
||||
<div class="card-meta">
|
||||
<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>
|
||||
<h1><span class="gradient-title">Multi-Functional RC Controller (MFC)</span></h1>
|
||||
<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 & 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>
|
||||
<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-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-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-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-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-youtube" href="#poc-video"> Watch PoC Video Slot</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- YouTube Proof-of-Concept Video Placeholder -->
|
||||
<section id="poc-video" class="poc-video-section" aria-labelledby="mfc-video-heading">
|
||||
<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>
|
||||
<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-triangle"></div>
|
||||
</div>
|
||||
<span class="poc-status-pill">🎥 YouTube PoC Video — Recording / Coming Soon</span>
|
||||
<div class="poc-video-title">ESP32-S3 Multi-Functional Controller — Hardware & 2.4 GHz RF Telemetry Demo</div>
|
||||
<span class="poc-status-pill"> YouTube PoC Video - Recording / Coming Soon</span>
|
||||
<div class="poc-video-title">ESP32-S3 Multi-Functional Controller - Hardware & 2.4 GHz RF Telemetry Demo</div>
|
||||
<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.
|
||||
</p>
|
||||
|
|
@ -95,7 +91,7 @@
|
|||
|
||||
<!-- Early Prototype Hardware 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>
|
||||
<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.
|
||||
|
|
@ -124,7 +120,7 @@
|
|||
|
||||
<!-- Build, Flash & Clone Commands + C99 Firmware Code -->
|
||||
<section class="section-block" aria-labelledby="p1-code">
|
||||
<span class="section-label">02 // Terminal Commands & ESP-IDF C99 Firmware</span>
|
||||
<span class="section-label">Terminal Commands & ESP-IDF C99 Firmware</span>
|
||||
<h2 id="p1-code">Clone, Build & Flash Commands (ESP-IDF v5.2.2)</h2>
|
||||
<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:
|
||||
|
|
@ -133,10 +129,10 @@
|
|||
<div class="code-window">
|
||||
<div class="code-window-header">
|
||||
<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>
|
||||
bash — Clone, Configure Target (esp32s3), Build & Flash
|
||||
<span class="code-dot amber"></span><span class="code-dot green"></span></span>
|
||||
bash - Clone, Configure Target (esp32s3), Build & Flash
|
||||
</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>
|
||||
<pre><code># 1. Clone the Multi-Functional Controller repository
|
||||
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-header">
|
||||
<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>
|
||||
c99 — firmware/main/mmcontroller.c (ESP32-S3-N16R8 Hardware Definitions)
|
||||
<span class="code-dot amber"></span><span class="code-dot green"></span></span>
|
||||
c99 - firmware/main/mmcontroller.c (ESP32-S3-N16R8 Hardware Definitions)
|
||||
</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>
|
||||
<pre><code>// --- 1. ADC1 ANALOG INPUTS (K-Silver Hall-Effect Joysticks & MAX4466 Mic) ---
|
||||
#define PIN_JOY_LX GPIO_NUM_4 // ADC1_CH3
|
||||
|
|
@ -195,19 +191,19 @@ idf.py -p /dev/ttyACM0 flash monitor</code></pre>
|
|||
|
||||
<!-- KiCad 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>
|
||||
<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;">
|
||||
<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>
|
||||
</figure>
|
||||
</section>
|
||||
|
||||
<!-- Confirmed ESP32-S3 Pinout -->
|
||||
<section class="section-block reading-width" aria-labelledby="p1-pinout">
|
||||
<span class="section-label">04 // Verified ESP32-S3-N16R8 Pinout & Bus Architecture</span>
|
||||
<span class="section-label">Verified ESP32-S3-N16R8 Pinout & Bus Architecture</span>
|
||||
<h2 id="p1-pinout">Master Node GPIO Allocation</h2>
|
||||
<table class="spec-table">
|
||||
<thead>
|
||||
|
|
@ -221,7 +217,7 @@ idf.py -p /dev/ttyACM0 flash monitor</code></pre>
|
|||
<tr>
|
||||
<td><strong>Dual Hall-Effect Joysticks (4 Axes)</strong></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>
|
||||
<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 -->
|
||||
<section class="section-block reading-width" aria-labelledby="p1-bom">
|
||||
<span class="section-label">05 // Build Roadmap & Phase 2 Console BOM</span>
|
||||
<span class="section-label">Build Roadmap & Phase 2 Console BOM</span>
|
||||
<h2 id="p1-bom">From Rev 0.1 Carrier to the DT-100 Desktop Console</h2>
|
||||
<div class="callout-box amber">
|
||||
<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">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<li><a href="../projects/index.html">Projects</a></li>
|
||||
|
|
@ -302,6 +298,6 @@ idf.py -p /dev/ttyACM0 flash monitor</code></pre>
|
|||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="../assets/js/main.js?v=2"></script>
|
||||
<script src="../assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="colorful">
|
||||
<html lang="en" data-theme="light">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<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.">
|
||||
<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>
|
||||
<body>
|
||||
<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>
|
||||
Ertunç Özbay
|
||||
<span class="brand-subtitle">embedded // hardware // open-source</span>
|
||||
<span class="brand-subtitle">Electrical & Electronics Engineering</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<div class="header-controls">
|
||||
<div class="theme-switcher" role="group" aria-label="Select UI Theme">
|
||||
<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>
|
||||
<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 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>
|
||||
</button>
|
||||
|
||||
|
|
@ -57,15 +53,15 @@
|
|||
<header class="workshop-hero">
|
||||
<div class="card-meta">
|
||||
<span class="badge badge-active">Status: In Progress</span>
|
||||
<span>Project 04 // 4WD Robotics, Control Logic & 2.4 GHz Telemetry</span>
|
||||
<span>Project 4WD Robotics, Control Logic & 2.4 GHz Telemetry</span>
|
||||
</div>
|
||||
<h1><span class="gradient-title">RC and Autonomous 4WD Vehicle</span></h1>
|
||||
<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.
|
||||
</p>
|
||||
<div class="button-row">
|
||||
<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-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-secondary" href="index.html">All Projects</a>
|
||||
</div>
|
||||
</header>
|
||||
|
|
@ -73,14 +69,14 @@
|
|||
<!-- YouTube Proof-of-Concept Video Placeholder -->
|
||||
<section id="poc-video" class="poc-video-section" aria-labelledby="rc-video-heading">
|
||||
<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>
|
||||
<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-triangle"></div>
|
||||
</div>
|
||||
<span class="poc-status-pill">🎥 YouTube PoC Video — Recording / Coming Soon</span>
|
||||
<div class="poc-video-title">4WD RC & Autonomous Vehicle — Wireless Drive & Control Loop Test</div>
|
||||
<span class="poc-status-pill"> YouTube PoC Video - Recording / Coming Soon</span>
|
||||
<div class="poc-video-title">4WD RC & Autonomous Vehicle - Wireless Drive & Control Loop Test</div>
|
||||
<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.
|
||||
</p>
|
||||
|
|
@ -89,7 +85,7 @@
|
|||
</section>
|
||||
|
||||
<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>
|
||||
<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.
|
||||
|
|
@ -101,7 +97,7 @@
|
|||
|
||||
<!-- 2.4 GHz Control Packet Code Snippet -->
|
||||
<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 & Drive Structs</h2>
|
||||
<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:
|
||||
|
|
@ -110,10 +106,10 @@
|
|||
<div class="code-window">
|
||||
<div class="code-window-header">
|
||||
<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>
|
||||
c99 — Packed 2.4 GHz Control & Telemetry Packet Definition
|
||||
<span class="code-dot amber"></span><span class="code-dot green"></span></span>
|
||||
c99 - Packed 2.4 GHz Control & Telemetry Packet Definition
|
||||
</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>
|
||||
<pre><code>#include <stdint.h>
|
||||
#include <assert.h>
|
||||
|
|
@ -132,7 +128,7 @@ _Static_assert(sizeof(RcControlPacket_t) == 8, "RcControlPacket_t must be 8 byte
|
|||
</section>
|
||||
|
||||
<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>
|
||||
<table class="spec-table">
|
||||
<thead>
|
||||
|
|
@ -169,7 +165,7 @@ _Static_assert(sizeof(RcControlPacket_t) == 8, "RcControlPacket_t must be 8 byte
|
|||
<footer class="site-footer">
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<strong>Ertunç Özbay</strong> — Electrical & Electronics Engineering Student • <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
<strong>Ertunç Özbay</strong> - Electrical & Electronics Engineering Student · <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
|
||||
</div>
|
||||
<ul class="footer-links" aria-label="Footer links">
|
||||
<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>
|
||||
</footer>
|
||||
|
||||
<script src="../assets/js/main.js?v=2"></script>
|
||||
<script src="../assets/js/main.js?v=3"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
Loading…
Reference in a new issue