feat: make Colorful Studio default UI, add visible 3-mode theme switcher bar, use ertunc.ozbay@outlook.com, and add CLI commands, code blocks & direct downloads

This commit is contained in:
ertunc-ozbay 2026-10-18 03:38:48 +03:00
parent 7e3356c383
commit ac7a3a6e66
14 changed files with 1279 additions and 787 deletions

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<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">
<link rel="stylesheet" href="assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -21,6 +21,13 @@
</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -145,7 +153,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -158,6 +166,6 @@
</div>
</footer>
<script src="assets/js/main.js"></script>
<script src="assets/js/main.js?v=2"></script>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -1,56 +1,53 @@
/* ==========================================================================
Ertunç Özbay — Workshop & Portfolio Script (Plain JS, No Dependencies)
Handles:
1. Accessible mobile navigation menu toggle (with Escape key support)
2. Luminous Aurora / Daylight Studio theme switcher (persisted in localStorage)
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 email button on Contact page
4. One-click copy buttons for Email addresses and Code/Command blocks
5. Image lightbox for hardware prototype photos and schematics
========================================================================== */
(function () {
"use strict";
// 1. Theme Switcher (Vibrant Aurora Default + Daylight Studio Mode)
// 1. Multi-Theme Switcher (Colorful Default, Cyber Neon, Blueprint Lab)
var rootEl = document.documentElement;
var savedTheme = null;
var validThemes = ["colorful", "neon", "blueprint"];
var savedTheme = "colorful";
try {
savedTheme = localStorage.getItem("eo-theme");
var stored = localStorage.getItem("eo-studio-theme");
if (stored && validThemes.indexOf(stored) !== -1) {
savedTheme = stored;
}
} catch (e) {}
if (savedTheme === "light" || savedTheme === "dark") {
rootEl.setAttribute("data-theme", savedTheme);
function applyTheme(themeName) {
if (validThemes.indexOf(themeName) === -1) {
themeName = "colorful";
}
var navList = document.querySelector(".nav-list");
if (navList && !document.querySelector("[data-theme-toggle]")) {
var li = document.createElement("li");
var btn = document.createElement("button");
btn.type = "button";
btn.className = "theme-toggle";
btn.setAttribute("data-theme-toggle", "");
btn.setAttribute("aria-label", "Toggle color theme");
function updateThemeBtnLabel() {
var isLight = rootEl.getAttribute("data-theme") === "light";
btn.textContent = isLight ? "🌙 Aurora" : "☀️ Daylight";
}
updateThemeBtnLabel();
btn.addEventListener("click", function () {
var isLight = rootEl.getAttribute("data-theme") === "light";
var nextTheme = isLight ? "dark" : "light";
rootEl.setAttribute("data-theme", nextTheme);
rootEl.setAttribute("data-theme", themeName);
try {
localStorage.setItem("eo-theme", nextTheme);
localStorage.setItem("eo-studio-theme", themeName);
} catch (e) {}
updateThemeBtnLabel();
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");
});
li.appendChild(btn);
navList.appendChild(li);
}
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]");
@ -114,8 +111,8 @@
}
// 4. Copy Email to Clipboard Buttons
var copyButtons = document.querySelectorAll("[data-copy-email]");
copyButtons.forEach(function (btn) {
var copyEmailButtons = document.querySelectorAll("[data-copy-email]");
copyEmailButtons.forEach(function (btn) {
btn.addEventListener("click", function () {
var email = btn.getAttribute("data-copy-email");
if (!email || !navigator.clipboard) return;
@ -129,7 +126,25 @@
});
});
// 5. Image Lightbox for Hardware Photos & Schematics
// 5. Copy Code / Terminal Commands Buttons
var copyCodeButtons = document.querySelectorAll("[data-copy-code]");
copyCodeButtons.forEach(function (btn) {
btn.addEventListener("click", function () {
var windowEl = btn.closest(".code-window");
if (!windowEl || !navigator.clipboard) return;
var preEl = windowEl.querySelector("pre");
if (!preEl) return;
var originalText = btn.textContent;
navigator.clipboard.writeText(preEl.innerText).then(function () {
btn.textContent = "✓ Copied!";
setTimeout(function () {
btn.textContent = originalText;
}, 2000);
});
});
});
// 6. Image Lightbox for Hardware Photos & Schematics
var zoomImages = document.querySelectorAll(".zoomable-img");
if (zoomImages.length > 0) {
var backdrop = document.createElement("div");

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Blog &amp; Build Notes — Ertunç Özbay</title>
<meta name="description" content="Static technical blog and learning notebook by Ertunç Özbay covering project build logs, embedded systems, circuit experiments, and C/Rust programming.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css">
<link rel="stylesheet" href="../assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -21,6 +21,13 @@
</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -121,7 +129,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -134,6 +142,6 @@
</div>
</footer>
<script src="../assets/js/main.js"></script>
<script src="../assets/js/main.js?v=2"></script>
</body>
</html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>[Template] Project Build Log & Technical Note Template — Blog — Ertunç Özbay</title>
<meta name="description" content="Reusable static HTML blog post template for Ertunç Özbay's workshop website.">
<title>[Template] Project Build Log &amp; Technical Note — Blog — Ertunç Özbay</title>
<meta name="description" content="Reusable static HTML article template for Ertunç Özbay's engineering blog and build logs.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css">
<link rel="stylesheet" href="../assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,10 +17,17 @@
<span class="brand-mark" aria-hidden="true">EÖ</span>
<span>
Ertunç Özbay
<span class="brand-subtitle">workshop // notebook // lab</span>
<span class="brand-subtitle">embedded // hardware // open-source</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -45,91 +53,47 @@
<a href="index.html">← Back to Blog</a>
</nav>
<!--
=====================================================================
BEGINNER HOW-TO: HOW TO CREATE A NEW BLOG POST FROM THIS TEMPLATE
1. Duplicate this file (blog/post-template.html) inside the blog/ folder.
2. Rename the new copy, for example: blog/midi-c-conversion-notes.html
3. Edit the <title>, Date, Category, Reading time, Heading (<h1>),
Summary, Tags, and Article sections below.
4. Open blog/index.html and copy one <article class="card"> block to
link to your new filename.
=====================================================================
-->
<article class="reading-width">
<header class="workshop-hero">
<div class="card-meta">
<span class="badge badge-experimental">Template • Draft Example</span>
<time datetime="2026-10-14">YYYY-MM-DD (Template)</time>
<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>• Reading time: X min read</span>
</div>
<h1>[Template] Article Title: What I Tested and Learned on the Bench</h1>
<h1><span class="gradient-title">[Template] Project Build Log &amp; Technical Note Title</span></h1>
<p class="hero-lead">
<strong>Summary:</strong> This page is a clearly labeled static HTML template for future blog posts. Copy this file whenever you want to publish a new build log, C programming note, or circuit experiment.
Copy this file to create a new static build log entry with hardware notes, copyable code windows, and lessons learned.
</p>
<ul class="tag-list" aria-label="Article tags">
<li><span class="tag">template</span></li>
<li><span class="tag">draft</span></li>
<li><span class="tag">embedded-learning</span></li>
<li><span class="tag">c-programming</span></li>
</ul>
</header>
<div class="callout-box amber">
<span class="callout-title">Template Notice</span>
<p style="margin-bottom:0;">
This entry is a reusable <strong>Template / Draft</strong> kept in the repository so creating new posts requires only copying a single HTML file—no CMS, database, or build script needed.
</p>
<section class="section-block">
<h2>1. Goal &amp; Hardware Setup</h2>
<p>Describe the circuit, microcontroller, or software module under test.</p>
<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>
<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) {
printf("Hello from ESP-IDF!\n");
}</code></pre>
</div>
<section class="section-block" aria-labelledby="tpl-sec-1">
<h2 id="tpl-sec-1">1. Goal of the Experiment or Build Step</h2>
<p>
Write a short paragraph explaining what you set out to build, test, or investigate. Keep it personal and honest—just like explaining the setup to a friend or engineering teammate.
</p>
</section>
<section class="section-block" aria-labelledby="tpl-sec-2">
<h2 id="tpl-sec-2">2. Hardware &amp; Software Setup</h2>
<p>
List only the confirmed hardware components, tools, or code files you actually used during this session.
</p>
<pre><code>/* Example C code snippet or terminal note */
// Document register settings, MIDI array structures, or test logic here.</code></pre>
</section>
<section class="section-block" aria-labelledby="tpl-sec-3">
<h2 id="tpl-sec-3">3. What Worked and What Failed</h2>
<p>
Documenting what failed is just as valuable as documenting what worked. Note any wiring mistakes, timing bugs, or AI-generated code assumptions that needed manual debugging.
</p>
</section>
<section class="section-block" aria-labelledby="tpl-sec-4">
<h2 id="tpl-sec-4">4. Next Step &amp; Related Projects</h2>
<p>
Link this post back to the relevant project detail page so visitors can follow the full story:
</p>
<ul>
<li><a href="../projects/midi-breadboard-instrument.html">Related Project: MIDI Breadboard Instrument</a></li>
<li><a href="../projects/multi-functional-controller.html">Related Project: Multi-Functional RC Controller</a></li>
<li><a href="../projects/rc-autonomous-vehicle.html">Related Project: RC and Autonomous Vehicle</a></li>
</ul>
<div class="button-row">
<a class="btn btn-secondary" href="index.html">← Back to Blog Index</a>
</div>
</section>
</article>
</div>
</main>
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Personal workshop, project lab, and learning notebook.
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -137,10 +101,11 @@
<li><a href="../lab.html">Lab</a></li>
<li><a href="../contact.html">Contact</a></li>
<li><a href="https://github.com/ertunc-ozbay" rel="noopener noreferrer">GitHub</a></li>
<li><a href="https://www.linkedin.com/in/ertunc-ozbay" rel="noopener noreferrer">LinkedIn</a></li>
</ul>
</div>
</footer>
<script src="../assets/js/main.js"></script>
<script src="../assets/js/main.js?v=2"></script>
</body>
</html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<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 &amp; Learning Notebook — Blog — Ertunç Özbay</title>
<meta name="description" content="Starter note explaining why Ertunç Özbay built a static workshop notebook for hardware, software, and open-source learning.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css">
<link rel="stylesheet" href="../assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -17,10 +17,17 @@
<span class="brand-mark" aria-hidden="true">EÖ</span>
<span>
Ertunç Özbay
<span class="brand-subtitle">workshop // notebook // lab</span>
<span class="brand-subtitle">embedded // hardware // open-source</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -48,20 +56,19 @@
<article class="reading-width">
<header class="workshop-hero">
<div class="card-meta">
<span class="badge badge-draft">Example • Starter Note</span>
<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>
</div>
<h1>Why I Built This Personal Workshop &amp; Learning Notebook</h1>
<h1><span class="gradient-title">Why I Built This Personal Workshop &amp; Learning Notebook</span></h1>
<p class="hero-lead">
A short starter note on why I want my website to feel like an open engineering workbench rather than a polished corporate résumé.
</p>
<ul class="tag-list" aria-label="Article tags">
<li><span class="tag">workshop</span></li>
<li><span class="tag">hardware-software</span></li>
<li><span class="tag">open-source</span></li>
<li><span class="tag">learning-in-public</span></li>
<li><span class="tag tag-esp">workshop</span></li>
<li><span class="tag tag-c">hardware-software</span></li>
<li><span class="tag tag-hw">open-source</span></li>
</ul>
</header>
@ -78,19 +85,17 @@
<section class="section-block" aria-labelledby="note-sec-2">
<h2 id="note-sec-2">Hardware, Software, and Responsibility</h2>
<p>
Whether I am working on my <a href="../projects/midi-breadboard-instrument.html">MIDI Breadboard Instrument</a>, my <a href="../projects/multi-functional-controller.html">Multi-Functional RC Controller</a>, or my <a href="../projects/rc-autonomous-vehicle.html">RC and Autonomous Vehicle</a> project, my goal is to understand how the physical circuit and the code interact.
</p>
<p>
Just like understanding a car’s steering, brakes, and dynamics makes you a more responsible driver, understanding both hardware and software helps me ask better questions, evaluate AI output critically, spot mistakes, and take responsibility for what I build.
Whether I am working on my <a href="../projects/midi-breadboard-instrument.html">MIDI Breadboard Instrument</a>, my <a href="../projects/multi-functional-controller.html">Multi-Functional RC Controller</a>, my <a href="../projects/pointblank-linux.html">Point Blank Linux Launcher</a>, or my <a href="../projects/rc-autonomous-vehicle.html">RC and Autonomous Vehicle</a> project, my goal is to understand how the physical circuit and the code interact.
</p>
</section>
<section class="section-block" aria-labelledby="note-sec-3">
<h2 id="note-sec-3">Related Projects</h2>
<ul>
<li><a href="../projects/multi-functional-controller.html">Multi-Functional RC Controller</a> (In progress)</li>
<li><a href="../projects/rc-autonomous-vehicle.html">RC and Autonomous Vehicle</a> (In progress)</li>
<li><a href="../projects/midi-breadboard-instrument.html">MIDI Breadboard Instrument</a> (In progress / Experimental)</li>
<li><a href="../projects/multi-functional-controller.html">Multi-Functional RC Controller (ESP32-S3)</a></li>
<li><a href="../projects/midi-breadboard-instrument.html">MIDI Breadboard Instrument (ESP32 Dual-Core)</a></li>
<li><a href="../projects/pointblank-linux.html">Point Blank on Linux (Standalone Rust Launcher)</a></li>
<li><a href="../projects/rc-autonomous-vehicle.html">RC and Autonomous 4WD Vehicle</a></li>
</ul>
<div class="button-row">
<a class="btn btn-secondary" href="index.html">← Back to Blog Index</a>
@ -104,7 +109,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Personal workshop, project lab, and learning notebook.
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -112,10 +117,11 @@
<li><a href="../lab.html">Lab</a></li>
<li><a href="../contact.html">Contact</a></li>
<li><a href="https://github.com/ertunc-ozbay" rel="noopener noreferrer">GitHub</a></li>
<li><a href="https://www.linkedin.com/in/ertunc-ozbay" rel="noopener noreferrer">LinkedIn</a></li>
</ul>
</div>
</footer>
<script src="../assets/js/main.js"></script>
<script src="../assets/js/main.js?v=2"></script>
</body>
</html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Contact &amp; Collaboration — Ertunç Özbay</title>
<meta name="description" content="Contact Ertunç Özbay via Gmail (ertuncozbayh@gmail.com), Outlook, LinkedIn, or GitHub to discuss embedded systems, hardware prototyping, C/Rust programming, and open-source projects.">
<meta name="description" content="Contact Ertunç Özbay via email (ertunc.ozbay@outlook.com), LinkedIn, or GitHub 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">
<link rel="stylesheet" href="assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -21,6 +21,13 @@
</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -45,12 +53,13 @@
<span class="workshop-eyebrow">✉️ DIRECT CONTACT // OPEN COLLABORATION</span>
<h1 id="contact-heading"><span class="gradient-title">Contact &amp; 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 Gmail, LinkedIn, or GitHub.
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 GitHub.
</p>
<div class="button-row">
<a class="btn btn-primary" href="mailto:ertuncozbayh@gmail.com">📧 Email Me on Gmail (ertuncozbayh@gmail.com)</a>
<button type="button" class="btn btn-secondary" data-copy-email="ertuncozbayh@gmail.com">📋 Copy Gmail Address</button>
<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://github.com/ertunc-ozbay" rel="noopener noreferrer">💻 GitHub (@ertunc-ozbay)</a>
</div>
</section>
@ -58,29 +67,26 @@
<div class="section-header">
<div>
<span class="section-label">01 // Direct Channels</span>
<h2 id="contact-links-heading">Email, Socials &amp; GitHub</h2>
<h2 id="contact-links-heading">Email, LinkedIn &amp; GitHub</h2>
</div>
</div>
<div class="card-grid-2">
<!-- Gmail Card -->
<!-- Primary Email Card -->
<div class="card card-coral">
<div class="card-top">
<div class="card-meta">
<span class="badge badge-coral">Primary Inbox • Gmail</span>
<span>Fastest Response</span>
<span class="badge badge-coral">Primary Email</span>
<span>Direct Inbox</span>
</div>
<h3><a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a></h3>
<h3><a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a></h3>
<p>
My primary personal and engineering Gmail inbox. Ideal for project discussions, schematic/code questions, internship or collaboration inquiries, and fellow student builders.
</p>
<p style="margin-bottom:0;">
<strong>Secondary / Git Email (Outlook):</strong> <a href="mailto:ertunc.ozbay@outlook.com">ertunc.ozbay@outlook.com</a>
My official engineering and open-source email inbox. Ideal for project discussions, schematic/firmware questions, internship or collaboration inquiries, and fellow student builders.
</p>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="mailto:ertuncozbayh@gmail.com">Send Email (Gmail)</a>
<button type="button" class="btn btn-secondary" data-copy-email="ertuncozbayh@gmail.com">📋 Copy Gmail</button>
<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>
</div>
</div>
@ -111,7 +117,7 @@
<section class="section-block" aria-labelledby="repos-heading">
<div class="section-header">
<div>
<span class="section-label">02 // Public Open-Source Repositories</span>
<span class="section-label">02 // Public Open-Source Repositories &amp; Direct Downloads</span>
<h2 id="repos-heading">Active Repositories on GitHub</h2>
</div>
</div>
@ -126,7 +132,9 @@
</p>
</div>
<div class="card-actions">
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">Open Repository →</a>
<a class="btn btn-primary" href="projects/multi-functional-controller.html">Project Page</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/multi-functional-controller/archive/refs/heads/master.zip">⬇ Download ZIP</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">GitHub →</a>
</div>
</div>
@ -139,7 +147,9 @@
</p>
</div>
<div class="card-actions">
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">Open Repository →</a>
<a class="btn btn-primary" href="projects/midi-breadboard-instrument.html">Project Page</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument/archive/refs/heads/main.zip">⬇ Download ZIP</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">GitHub →</a>
</div>
</div>
@ -152,7 +162,9 @@
</p>
</div>
<div class="card-actions">
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/pointblank-linux" rel="noopener noreferrer">Open Repository →</a>
<a class="btn btn-primary" href="projects/pointblank-linux.html">Project Page</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/pointblank-linux/releases/latest/download/pointblank-linux-v1.0.0-linux-x86_64.tar.gz">⬇ Download v1.0.0 Binary</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/pointblank-linux" rel="noopener noreferrer">GitHub →</a>
</div>
</div>
@ -188,7 +200,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -201,6 +213,6 @@
</div>
</footer>
<script src="assets/js/main.js"></script>
<script src="assets/js/main.js?v=2"></script>
</body>
</html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ertunç Özbay — Embedded Systems, Hardware Lab &amp; Open-Source Projects</title>
<meta name="description" content="Personal engineering studio and workshop of Ertunç Özbay: ESP32/ESP-IDF embedded systems, hardware prototyping, C/Rust/Python tooling, and open-source builds.">
<link rel="icon" type="image/svg+xml" href="assets/images/favicon.svg">
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -21,6 +21,13 @@
</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -48,12 +56,12 @@
I design embedded hardware, write bare-metal C &amp; FreeRTOS firmware, and build open-source systems from the transistor level up to Linux desktop tooling.
</p>
<p class="reading-width">
Welcome to my engineering studio and notebook. Here I document my real hardware prototypes—from an <strong>ESP32-S3 2.4 GHz Multi-Functional RC Console</strong> and a <strong>Dual-Core ESP32 16-Track MIDI Synthesizer</strong> to a <strong>4WD Autonomous Vehicle</strong> and a <strong>Standalone Linux Game Launcher written in Rust</strong>.
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>.
</p>
<div class="button-row">
<a class="btn btn-primary" href="projects/index.html">🚀 Explore All 4 Projects</a>
<a class="btn btn-primary" href="projects/index.html">🚀 Explore Projects, Code &amp; Downloads</a>
<a class="btn btn-cyan" href="https://github.com/ertunc-ozbay" rel="noopener noreferrer">💻 GitHub (@ertunc-ozbay)</a>
<a class="btn btn-secondary" href="contact.html">✉️ Contact &amp; Gmail</a>
<a class="btn btn-secondary" href="contact.html">✉️ Contact (ertunc.ozbay@outlook.com)</a>
</div>
<div class="stats-strip" aria-label="Workshop highlights">
@ -70,8 +78,8 @@
<span class="stat-label">Custom Python RLE MIDI-to-C Compiler</span>
</div>
<div class="stat-pill">
<span class="stat-value">Open Source</span>
<span class="stat-label">Schematics, Firmware &amp; Build Logs</span>
<span class="stat-value">Direct Downloads</span>
<span class="stat-label">Pre-Built Binaries, Firmware &amp; Schematics</span>
</div>
</div>
</section>
@ -79,10 +87,10 @@
<section class="section-block" aria-labelledby="active-builds-heading">
<div class="section-header">
<div>
<span class="section-label">01 // Featured Hardware &amp; Software Builds</span>
<h2 id="active-builds-heading">Projects on My Bench</h2>
<span class="section-label">01 // Featured Hardware, Firmware &amp; Software Builds</span>
<h2 id="active-builds-heading">Projects, Commands &amp; Downloads</h2>
</div>
<a href="projects/index.html">View full specifications &amp; PoC video slots →</a>
<a href="projects/index.html">View all project code, commands &amp; PoC videos →</a>
</div>
<div class="card-grid-2">
@ -101,12 +109,13 @@
<li><span class="tag tag-esp">ESP32-S3-N16R8</span></li>
<li><span class="tag tag-c">ESP-IDF C99</span></li>
<li><span class="tag tag-hw">nRF24L01+ 2.4GHz</span></li>
<li><span class="tag tag-hw">KiCad Schematic</span></li>
<li><span class="tag tag-python">KiCad Schematic</span></li>
</ul>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="projects/multi-functional-controller.html">Project Page &amp; PoC Video</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">GitHub Repo</a>
<a class="btn btn-primary" href="projects/multi-functional-controller.html">Code, Commands &amp; PoC Video</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/multi-functional-controller/archive/refs/heads/master.zip">⬇ Download ZIP</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">GitHub</a>
</div>
</article>
@ -129,12 +138,37 @@
</ul>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="projects/midi-breadboard-instrument.html">Project Page &amp; PoC Video</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">GitHub Repo</a>
<a class="btn btn-primary" href="projects/midi-breadboard-instrument.html">Code, Commands &amp; PoC Video</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument/archive/refs/heads/main.zip">⬇ Download ZIP</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">GitHub</a>
</div>
</article>
<!-- Project 3 -->
<article class="card card-coral">
<div class="card-top">
<div class="card-meta">
<span class="badge badge-coral">v1.0.0 Binary Released</span>
<span>Rust • Linux Systems &amp; Wine</span>
</div>
<h3><a href="projects/pointblank-linux.html">Point Blank on Linux — Standalone Community Launcher</a></h3>
<p>
An all-in-one standalone Linux desktop launcher written in <strong>Rust</strong> that runs Point Blank (Zepetto / TAM) on Linux with 100% unmodified official CheatBlocker anti-cheat, automated Wine prefix provisioning, and DirectX 9 / DirectX 11 support.
</p>
<ul class="tag-list" aria-label="Technologies">
<li><span class="tag tag-rust">Rust</span></li>
<li><span class="tag tag-c">Wine / DirectX 11</span></li>
<li><span class="tag tag-python">Linux x86_64 Binary</span></li>
</ul>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="projects/pointblank-linux.html">Setup Commands &amp; PoC Video</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/pointblank-linux/releases/latest/download/pointblank-linux-v1.0.0-linux-x86_64.tar.gz">⬇ Download v1.0.0 (.tar.gz)</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/pointblank-linux" rel="noopener noreferrer">GitHub</a>
</div>
</article>
<!-- Project 4 -->
<article class="card card-emerald">
<div class="card-top">
<div class="card-meta">
@ -152,39 +186,47 @@
</ul>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="projects/rc-autonomous-vehicle.html">Project Page &amp; PoC Video</a>
<a class="btn btn-primary" href="projects/rc-autonomous-vehicle.html">Telemetry Structs &amp; PoC Video</a>
</div>
</article>
</div>
</section>
<!-- Project 4 -->
<article class="card card-coral">
<div class="card-top">
<div class="card-meta">
<span class="badge badge-coral">v1.0.0 Released</span>
<span>Rust • Linux Systems &amp; Wine</span>
<!-- Quick Clone & Build Terminal Showcase -->
<section class="section-block" aria-labelledby="quick-cli-heading">
<div class="section-header">
<div>
<span class="section-label">02 // Quick Terminal Access</span>
<h2 id="quick-cli-heading">Clone &amp; Run My Open-Source Projects</h2>
</div>
<h3><a href="projects/pointblank-linux.html">Point Blank on Linux — Standalone Community Launcher</a></h3>
<p>
An all-in-one standalone Linux desktop launcher written in <strong>Rust</strong> that runs Point Blank (Zepetto / TAM) on Linux with 100% unmodified official CheatBlocker anti-cheat, automated Wine prefix provisioning, and DirectX 9 / DirectX 11 support.
</p>
<ul class="tag-list" aria-label="Technologies">
<li><span class="tag tag-rust">Rust</span></li>
<li><span class="tag tag-c">Wine / DirectX 11</span></li>
<li><span class="tag tag-python">Linux Desktop</span></li>
</ul>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="projects/pointblank-linux.html">Project Page &amp; PoC Video</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/pointblank-linux" rel="noopener noreferrer">GitHub Repo</a>
<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 &amp; Launch Repositories (Arch Linux / ESP-IDF v5.2.2)
</span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Commands</button>
</div>
</article>
<pre><code># 1. ESP32-S3 Multi-Functional Controller (ESP-IDF v5.2.2)
git clone https://github.com/ertunc-ozbay/multi-functional-controller.git
cd multi-functional-controller/firmware &amp;&amp; source ~/esp/esp-idf/export.sh &amp;&amp; idf.py build
# 2. ESP32 16-Track MIDI Breadboard Synthesizer &amp; Python RLE Compiler
git clone https://github.com/ertunc-ozbay/midi-breadboard-instrument.git
cd midi-breadboard-instrument &amp;&amp; python3 scripts/midi_to_c.py scripts/midillis/Alla_Turca/Alla_Turca.mid
# 3. Point Blank Linux Standalone Launcher (Download Pre-Compiled x86_64 Release)
curl -L -O https://github.com/ertunc-ozbay/pointblank-linux/releases/latest/download/pointblank-linux-v1.0.0-linux-x86_64.tar.gz
tar -xzf pointblank-linux-v1.0.0-linux-x86_64.tar.gz &amp;&amp; cd pointblank-linux-v1.0.0-linux-x86_64 &amp;&amp; ./pointblank-linux</code></pre>
</div>
</section>
<section class="section-block" aria-labelledby="workshop-areas-heading">
<div class="section-header">
<div>
<span class="section-label">02 // Inside This Studio</span>
<span class="section-label">03 // Inside This Studio</span>
<h2 id="workshop-areas-heading">How I Approach Engineering</h2>
</div>
</div>
@ -217,7 +259,7 @@
<span class="section-label">Direct Contact</span>
<h3>Collaborate &amp; Connect</h3>
<p>
Reach out directly via Gmail (<code>ertuncozbayh@gmail.com</code>), Outlook, LinkedIn, or GitHub to discuss embedded systems, electronics, or open-source builds.
Reach out directly via email at <code>ertunc.ozbay@outlook.com</code>, LinkedIn, or GitHub to discuss embedded systems, electronics, or open-source builds.
</p>
</div>
<a href="contact.html">View Contact &amp; Email Details →</a>
@ -231,7 +273,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -244,6 +286,6 @@
</div>
</footer>
<script src="assets/js/main.js"></script>
<script src="assets/js/main.js?v=2"></script>
</body>
</html>

View file

@ -1,15 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lab &amp; Experiment Notebook — Ertunç Özbay</title>
<meta name="description" content="Workshop lab notebook of Ertunç Özbay: ESP32-S3 hardware protection notes, RLE MIDI-to-C compression tools, Linux Wine/DX11 experiments, and reverse-engineering study logs.">
<link rel="icon" type="image/svg+xml" href="assets/images/favicon.svg">
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
<a class="skip-link" href="index.html#main-content">Skip to main content</a>
<header class="site-header">
<div class="container header-inner">
@ -21,6 +21,13 @@
</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -69,6 +77,10 @@
While building the <a href="projects/midi-breadboard-instrument.html">16-Track MIDI Breadboard Instrument</a>, raw MIDI delta-slices caused the LEDs and 1.3" SPI OLED to strobe violently. Writing a custom Run-Length Encoding (RLE) compressor in Python (<code>midi_to_c.py</code>) and transposing bass-heavy tracks like <em>Seven Nation Army</em> +2 octaves solved both flash exhaustion and piezo acoustic roll-off.
</p>
</div>
<div class="card-actions">
<a class="btn btn-cyan" href="https://raw.githubusercontent.com/ertunc-ozbay/midi-breadboard-instrument/main/scripts/midi_to_c.py" download="midi_to_c.py">🐍 Download midi_to_c.py</a>
<a class="btn btn-secondary" href="projects/midi-breadboard-instrument.html">Full MIDI Project →</a>
</div>
</div>
<div class="card card-amber">
@ -82,6 +94,10 @@
On the <a href="projects/multi-functional-controller.html">Multi-Functional RC Controller</a>, the ESP32-S3-N16R8 reserves <code>GPIO 35–37</code> for internal Octal PSRAM/Flash. We remapped the shared SPI2 bus (<code>MOSI: 11, MISO: 13, SCK: 12</code>) with dedicated hardware CS lines for the nRF24L01+ (<code>CSN: 10</code>), MicroSD (<code>CS: 39</code>), and ST7789 IPS TFT (<code>CS: 40</code>).
</p>
</div>
<div class="card-actions">
<a class="btn btn-cyan" href="https://raw.githubusercontent.com/ertunc-ozbay/multi-functional-controller/master/hardware/mfc-1/mfc-1.kicad_sch" download="mfc-1.kicad_sch">📐 Download KiCad Schematic</a>
<a class="btn btn-secondary" href="projects/multi-functional-controller.html">Full Controller Page →</a>
</div>
</div>
</div>
</section>
@ -106,6 +122,10 @@
In <a href="projects/pointblank-linux.html">pointblank-linux</a>, we engineered a standalone Rust launcher that automatically provisions a 16-byte TLS-aligned <code>ntdll.dll</code> runtime and <code>vcrun2022</code> / <code>d3dx11_43</code> components so Point Blank runs at 200 FPS in DirectX 11 on Linux with unmodified official CheatBlocker anti-cheat.
</p>
</div>
<div class="card-actions">
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/pointblank-linux/releases/latest/download/pointblank-linux-v1.0.0-linux-x86_64.tar.gz">⬇ Download v1.0.0 Binary</a>
<a class="btn btn-secondary" href="projects/pointblank-linux.html">Read Technical Notes →</a>
</div>
</div>
<div class="card card-emerald">
@ -116,9 +136,12 @@
</div>
<h3>RLE MIDI-to-C Struct Compiler (<code>midi_to_c.py</code>)</h3>
<p>
Converts multi-channel `.mid` files into compact C99 <code>SequenceStep</code> struct arrays (`{frequency, duration, kick_drum, hi_hat}`), automatically routing MIDI Channel 10 and low bass notes (`&lt; MIDI 50`) to hardware percussion buzzers.
Converts multi-channel `.mid` files into compact C99 <code>SequenceStep</code> struct arrays (<code>{frequency, duration, kick_drum, hi_hat}</code>), automatically routing MIDI Channel 10 and low bass notes (<code>&lt; MIDI 50</code>) to hardware percussion buzzers.
</p>
</div>
<div class="card-actions">
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument/blob/main/scripts/midi_to_c.py" rel="noopener noreferrer">View Script on GitHub →</a>
</div>
</div>
</div>
</section>
@ -148,7 +171,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -161,6 +184,6 @@
</div>
</footer>
<script src="assets/js/main.js"></script>
<script src="assets/js/main.js?v=2"></script>
</body>
</html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Projects — 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, 4WD Autonomous Vehicle, and Point Blank Linux Launcher in Rust.">
<title>Projects, Code &amp; Downloads — Ertunç Özbay</title>
<meta name="description" content="Hardware and software engineering projects by Ertunç Özbay: ESP32-S3 Multi-Functional RC Controller, ESP32 16-Track MIDI Breadboard Instrument, Point Blank Linux Launcher in Rust, and 4WD Autonomous Vehicle.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css">
<link rel="stylesheet" href="../assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -21,6 +21,13 @@
</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,15 +44,16 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
<div class="container">
<section class="workshop-hero" aria-labelledby="projects-heading">
<span class="workshop-eyebrow">⚡ PROJECT SHOWCASE // VERIFIED BUILDS &amp; REPOSITORIES</span>
<span class="workshop-eyebrow">⚡ PROJECT SHOWCASE // CODE, COMMANDS, DOWNLOADS &amp; POC VIDEOS</span>
<h1 id="projects-heading"><span class="gradient-title">Engineering Projects &amp; Open-Source Builds</span></h1>
<p class="hero-lead">
Every project documented here is backed by real hardware on my bench or shipped open-source code on my GitHub—complete with verified pinouts, schematics, build photos, and dedicated slots for upcoming <strong>YouTube Proof-of-Concept (PoC) demonstration videos</strong>.
Every project documented here includes verified hardware pinouts, build photos, copyable terminal commands, source code snippets, direct download links, and a dedicated <strong>YouTube Proof-of-Concept (PoC) video showcase</strong>.
</p>
</section>
@ -67,7 +75,7 @@
</div>
<h3><a href="multi-functional-controller.html">Multi-Functional RC Controller (MFC)</a></h3>
<p>
A custom 2.4 GHz wireless remote controller and multi-purpose embedded console built around the <strong>ESP32-S3-N16R8</strong> and <strong>nRF24L01+ PA+LNA</strong> transceiver. Currently built as an early Rev 0.1 perfboard carrier and transitioning into a <strong>DT-100 (190×137×59 mm) desktop console</strong> with dual K-Silver Hall-effect gimbals and a 1.3" ST7789 IPS TFT display.
A custom 2.4 GHz wireless remote controller and multi-purpose embedded console built around the <strong>ESP32-S3-N16R8</strong> and <strong>nRF24L01+ PA+LNA</strong> transceiver. Includes C99 ESP-IDF firmware, KiCad 9.0 schematics, Rev 0.1 perfboard photos, and Phase 2 DT-100 console BOM.
</p>
<ul class="tag-list" aria-label="Confirmed technologies for Multi-Functional RC Controller">
@ -80,13 +88,14 @@
</ul>
<div class="project-notes">
<p><strong>Includes on page:</strong> 3 early prototype build photos, full KiCad SVG schematic, verified ESP32-S3 GPIO pinout, Phase 2 DT-100 BOM, and <strong>🎬 YouTube PoC Video Placeholder</strong>.</p>
<p><strong>Included on page:</strong> Copyable `idf.py` build/flash commands, C99 firmware source code, downloadable KiCad `.kicad_sch` schematic &amp; `.zip` archive, 3 prototype photos, and <strong>🎬 YouTube PoC Video slot</strong>.</p>
</div>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="multi-functional-controller.html">Read Page &amp; PoC Video</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">GitHub Repo</a>
<a class="btn btn-primary" href="multi-functional-controller.html">Open Page, Code &amp; PoC</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/multi-functional-controller/archive/refs/heads/master.zip">⬇ Download ZIP</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">GitHub</a>
</div>
</article>
@ -112,51 +121,23 @@
</ul>
<div class="project-notes">
<p><strong>Includes on page:</strong> 3 high-res breadboard photos, 16-track playlist table, ESP32 pinout, RLE compression architecture, and <strong>🎬 YouTube PoC Video Placeholder</strong>.</p>
<p><strong>Included on page:</strong> Full `midi_to_c.py` Python script &amp; C99 Dual-Core FreeRTOS audio engine code, copyable CLI commands, downloadable `.py` &amp; `.zip` links, 3 breadboard photos, and <strong>🎬 YouTube PoC Video slot</strong>.</p>
</div>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="midi-breadboard-instrument.html">Read Page &amp; PoC Video</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">GitHub Repo</a>
<a class="btn btn-primary" href="midi-breadboard-instrument.html">Open Page, Code &amp; PoC</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument/archive/refs/heads/main.zip">⬇ Download ZIP</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">GitHub</a>
</div>
</article>
<!-- Project 3: RC and Autonomous Vehicle -->
<article class="card card-emerald">
<div class="card-top">
<div class="card-meta">
<span class="badge badge-active">In Progress</span>
<span>Project 03 • Robotics &amp; Control</span>
</div>
<h3><a href="rc-autonomous-vehicle.html">RC and Autonomous 4WD Vehicle</a></h3>
<p>
An ongoing 4WD robotic vehicle platform exploring manual 2.4 GHz RF remote control (paired with the Multi-Functional Controller) alongside autonomous obstacle avoidance, motor driver electronics, and real-time control logic.
</p>
<ul class="tag-list" aria-label="Confirmed focus areas for RC and Autonomous Vehicle">
<li><span class="tag tag-hw">4WD Vehicle Platform</span></li>
<li><span class="tag tag-esp">2.4 GHz RF Receiver Link</span></li>
<li><span class="tag tag-c">Autonomous Control Logic</span></li>
<li><span class="tag tag-hw">Power &amp; Motor Electronics</span></li>
</ul>
<div class="project-notes">
<p><strong>Includes on page:</strong> System scope, manual-to-autonomous control transition notes, and <strong>🎬 YouTube PoC Video Placeholder</strong>.</p>
</div>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="rc-autonomous-vehicle.html">Read Page &amp; PoC Video</a>
</div>
</article>
<!-- Project 4: Point Blank Linux Launcher -->
<!-- Project 3: Point Blank Linux Launcher -->
<article class="card card-coral">
<div class="card-top">
<div class="card-meta">
<span class="badge badge-coral">v1.0.0 Shipped</span>
<span>Project 04 • Rust &amp; Linux Systems</span>
<span class="badge badge-coral">v1.0.0 Shipped Binary</span>
<span>Project 03 • Rust &amp; Linux Systems</span>
</div>
<h3><a href="pointblank-linux.html">Point Blank on Linux — Standalone Community Launcher</a></h3>
<p>
@ -171,13 +152,43 @@
</ul>
<div class="project-notes">
<p><strong>Includes on page:</strong> Architecture overview, Wine prefix automation breakdown, release links, and <strong>🎬 YouTube PoC Video Placeholder</strong>.</p>
<p><strong>Included on page:</strong> Direct pre-compiled `x86_64` release `.tar.gz` download, copyable distro dependency commands (Arch/Ubuntu/Fedora), Rust source build commands, and <strong>🎬 YouTube PoC Video slot</strong>.</p>
</div>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="pointblank-linux.html">Read Page &amp; PoC Video</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/pointblank-linux" rel="noopener noreferrer">GitHub Repo</a>
<a class="btn btn-primary" href="pointblank-linux.html">Open Page, CLI &amp; PoC</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/pointblank-linux/releases/latest/download/pointblank-linux-v1.0.0-linux-x86_64.tar.gz">⬇ Download v1.0.0 (.tar.gz)</a>
<a class="btn btn-secondary" href="https://github.com/ertunc-ozbay/pointblank-linux" rel="noopener noreferrer">GitHub</a>
</div>
</article>
<!-- Project 4: RC and Autonomous Vehicle -->
<article class="card card-emerald">
<div class="card-top">
<div class="card-meta">
<span class="badge badge-active">In Progress</span>
<span>Project 04 • Robotics &amp; Control</span>
</div>
<h3><a href="rc-autonomous-vehicle.html">RC and Autonomous 4WD Vehicle</a></h3>
<p>
An ongoing 4WD robotic vehicle platform exploring manual 2.4 GHz RF remote control (paired with the Multi-Functional Controller) alongside autonomous obstacle avoidance, motor driver electronics, and real-time control logic.
</p>
<ul class="tag-list" aria-label="Confirmed focus areas for RC and Autonomous Vehicle">
<li><span class="tag tag-hw">4WD Vehicle Platform</span></li>
<li><span class="tag tag-esp">2.4 GHz RF Receiver Link</span></li>
<li><span class="tag tag-c">Autonomous Control Logic</span></li>
<li><span class="tag tag-hw">Power &amp; Motor Electronics</span></li>
</ul>
<div class="project-notes">
<p><strong>Included on page:</strong> C99 2.4 GHz telemetry receiver packet &amp; differential motor drive code structure, companion controller link, and <strong>🎬 YouTube PoC Video slot</strong>.</p>
</div>
</div>
<div class="card-actions">
<a class="btn btn-primary" href="rc-autonomous-vehicle.html">Open Page, Code &amp; PoC</a>
</div>
</article>
</div>
@ -189,7 +200,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -202,6 +213,6 @@
</div>
</footer>
<script src="../assets/js/main.js"></script>
<script src="../assets/js/main.js?v=2"></script>
</body>
</html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MIDI Breadboard Instrument (Desk Rave &amp; 16-Track Symphony) — Projects — Ertunç Özbay</title>
<meta name="description" content="Project notes for the MIDI Breadboard Instrument (Desk Rave & 16-Track Symphony Controller) by Ertunç Özbay: Dual-Core ESP32 synthesizer in ESP-IDF v5.2.2 with RLE Python MIDI-to-C compiler, 30 FPS SPI OLED visualizer, rotary encoder, and triple-buzzer acoustic stage.">
<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">
<link rel="stylesheet" href="../assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -21,6 +21,13 @@
</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -59,9 +67,10 @@
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://github.com/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">💻 View GitHub Repository</a>
<a class="btn btn-primary" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument" rel="noopener noreferrer">💻 View GitHub Repo</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/midi-breadboard-instrument/archive/refs/heads/main.zip">⬇ Download Project (.zip)</a>
<a class="btn btn-cyan" href="https://raw.githubusercontent.com/ertunc-ozbay/midi-breadboard-instrument/main/scripts/midi_to_c.py" download="midi_to_c.py">🐍 Download midi_to_c.py</a>
<a class="btn btn-youtube" href="#poc-video">🎬 Watch PoC Video Slot</a>
<a class="btn btn-secondary" href="index.html">All Projects</a>
</div>
</header>
@ -70,7 +79,6 @@
<div class="poc-video-card">
<span class="section-label">🎬 Proof of Concept // YouTube Video Showcase</span>
<h2 id="midi-video-heading">YouTube Proof-of-Concept Demonstration</h2>
<!-- Ready-to-use YouTube Embed Placeholder: Replace src when uploaded -->
<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>
@ -116,17 +124,107 @@
</div>
</section>
<section class="section-block reading-width" aria-labelledby="p3-overview">
<span class="section-label">02 // Engineering Challenges Solved</span>
<h2 id="p3-overview">From a Squeaking Buzzer to a Dual-Core Synthesizer</h2>
<p>
Pushing a bare-metal breadboard setup to play recognizable, energetic multi-track music required solving several real embedded systems challenges:
<!-- Terminal Commands & Source Code Section -->
<section class="section-block" aria-labelledby="p3-code">
<span class="section-label">02 // Terminal Commands, Python RLE Compiler &amp; C99 Firmware</span>
<h2 id="p3-code">Build, Flash &amp; 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:
</p>
<ul>
<li><strong>The Strobe-Light Bug &amp; RLE Compression (<code>midi_to_c.py</code>):</strong> Raw MIDI files often slice sustained notes into microscopic fragments, causing the LEDs and OLED UI to strobe at 30+ Hz while wasting flash memory. We built a custom Python Run-Length Encoding (RLE) compressor using <code>mido</code> that merges contiguous identical pitch/drum states into solid <code>SequenceStep</code> blocks and routes bass/percussion channels to dedicated drum triggers.</li>
<li><strong>Acoustic Hardware Limits (+2 Octave Transposition):</strong> Passive piezo buzzers physically struggle to resonate at low bass frequencies. Tracks with deep basslines like <em>Seven Nation Army</em> were transposed up two full octaves so the piezo disc resonates clearly while the active buzzers carry the rhythmic punch.</li>
<li><strong>Dual-Core FreeRTOS Lockless IPC:</strong> Core 0 runs <code>oled_visualizer_task</code> (30 FPS SPI DMA framebuffer engine) and <code>button_task</code> (debounced input polling), while Core 1 exclusively runs <code>buzzer_sequence_task</code> for microsecond-accurate LEDC PWM pitch generation and hardware PCNT rotary encoder scaling.</li>
</ul>
<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 &amp; Flash ESP32 Firmware (ESP-IDF v5.2.2)
</span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Commands</button>
</div>
<pre><code># 1. Clone the repository
git clone https://github.com/ertunc-ozbay/midi-breadboard-instrument.git
cd midi-breadboard-instrument
# 2. (Optional) Convert a custom .mid file into an RLE-compressed C struct array
pip install mido
python3 scripts/midi_to_c.py scripts/midillis/Alla_Turca/Alla_Turca.mid &gt; my_track.h
# 3. Build and flash the 16-track firmware to ESP32
source ~/esp/esp-idf/export.sh
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor</code></pre>
</div>
<h3>Python RLE MIDI-to-C Compiler (<code>scripts/midi_to_c.py</code>)</h3>
<p class="reading-width">
To prevent fragmented MIDI delta-times from strobing the LEDs/OLED at 30+ Hz and exhausting flash memory, <code>midi_to_c.py</code> merges contiguous identical states via Run-Length Encoding and routes Channel 10 + bass notes (`&lt; MIDI 50`) to hardware percussion buzzers:
</p>
<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 &amp; Drum Routing Engine)
</span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Code</button>
</div>
<pre><code>#!/usr/bin/env python3
import sys, mido
def convert_midi_to_c(midi_filename):
mid = mido.MidiFile(midi_filename)
safe_name = midi_filename.split('/')[-1].replace('.mid', '').replace('-', '_')
print(f"const SequenceStep midi_{safe_name}[] = {{")
active_melody_notes = set()
time_accum = 0.0
trigger_kick = trigger_hat = False
rle_freq, rle_dur, rle_kick, rle_hat = -1, 0, False, False
for msg in mid:
time_accum += msg.time
if msg.type in ['note_on', 'note_off'] and time_accum &gt; 0.01:
duration_ms = int(time_accum * 1000)
freq = int(440.0 * (2.0 ** ((max(active_melody_notes) - 69) / 12.0))) if active_melody_notes else 0
# RLE Engine: coalesce contiguous identical frequency &amp; drum states
if freq == rle_freq and trigger_kick == rle_kick and trigger_hat == rle_hat:
rle_dur += duration_ms
else:
if rle_dur &gt; 0:
print(f" {{{rle_freq}, {rle_dur}, {str(rle_kick).lower()}, {str(rle_hat).lower()}}},")
rle_freq, rle_dur, rle_kick, rle_hat = freq, duration_ms, trigger_kick, trigger_hat
time_accum, trigger_kick, trigger_hat = 0.0, False, False</code></pre>
</div>
<h3>Dual-Core FreeRTOS Music &amp; Visualizer Architecture (<code>main/mmcontroller.c</code>)</h3>
<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 &amp; Dual-Core Task Pinning)
</span>
<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)
uint16_t duration; // Step duration in ms (scaled live by PCNT rotary speed)
bool kick_drum; // Triggers Active Buzzer 1 (GPIO 26) + Kick LED (GPIO 21)
bool hi_hat; // Triggers Active Buzzer 2 (GPIO 27) + Hat LED (GPIO 22)
} SequenceStep;
void app_main(void) {
printf("Desk Rave: 16-Track Symphony Edition Initializing...\n");
init_hardware();
// Core 0: 30 FPS SPI OLED Framebuffer Visualizer &amp; 50ms Button Polling
xTaskCreatePinnedToCore(oled_visualizer_task, "oled_task", 4096, NULL, 4, NULL, 0);
xTaskCreatePinnedToCore(button_task, "btn_task", 4096, NULL, 5, NULL, 0);
// Core 1: Dedicated Real-Time Audio Synthesizer &amp; PCNT Rotary Scaling
xTaskCreatePinnedToCore(buzzer_sequence_task, "music_task", 4096, NULL, 5, NULL, 1);
}</code></pre>
</div>
</section>
<section class="section-block reading-width" aria-labelledby="p3-components">
@ -188,9 +286,6 @@
<section class="section-block reading-width" aria-labelledby="p3-playlist">
<span class="section-label">04 // Flash Memory Playlist</span>
<h2 id="p3-playlist">The 16-Track Symphony</h2>
<p>
All 16 tracks are stored in ESP32 flash memory as <code>SequenceStep</code> arrays featuring <code>frequency</code>, <code>duration</code>, <code>kick_drum</code>, and <code>hi_hat</code> triggers:
</p>
<ol>
<li><strong>Careless Whisper</strong> (Extended Club Edit)</li>
<li><strong>Take On Me</strong> (EDM Build-up Edition)</li>
@ -210,20 +305,6 @@
<li><strong>Mega Man 2</strong> (Dr. Wily Stage)</li>
</ol>
</section>
<section class="section-block reading-width" aria-labelledby="p3-learning">
<span class="section-label">05 // Workshop Notes &amp; Next Steps</span>
<h2 id="p3-learning">Current State &amp; Roadmap</h2>
<div class="callout-box magenta">
<span class="callout-title">Current State &amp; Next Steps</span>
<p>
The firmware is rock-solid on the breadboard: the rotary encoder dynamically scales volume and tempo via lockless IPC variables, all 16 tracks play from flash memory, and the 1.3" SPI OLED renders real-time frequency bars and drum hits at 30 FPS.
</p>
<p style="margin-bottom:0;">
<strong>Next Step:</strong> Migrating the dual-breadboard circuit onto a soldered perfboard or custom KiCad PCB.
</p>
</div>
</section>
</article>
</div>
@ -232,7 +313,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -245,6 +326,6 @@
</div>
</footer>
<script src="../assets/js/main.js"></script>
<script src="../assets/js/main.js?v=2"></script>
</body>
</html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<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>
<meta name="description" content="Engineering documentation for the ESP32-S3-N16R8 Multi-Functional RC Controller (MFC) by Ertunç Özbay: 2.4 GHz nRF24L01+ PA+LNA telemetry, K-Silver Hall-effect gimbals, ST7789 IPS TFT + MicroSD SPI2 bus, KiCad schematic, and Phase 1/2 hardware build.">
<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">
<link rel="stylesheet" href="../assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -21,6 +21,13 @@
</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -59,9 +67,10 @@
Designed to serve as a universal handheld and desktop transmitter for external robotic platforms (such as my <a href="rc-autonomous-vehicle.html">4WD RC &amp; Autonomous Vehicle</a>) while integrating dual K-Silver Hall-effect joysticks, a 1.3" ST7789 IPS TFT display, MicroSD storage, and MAX4466 audio capture.
</p>
<div class="button-row">
<a class="btn btn-primary" href="https://github.com/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">💻 View GitHub Repository</a>
<a class="btn btn-primary" href="https://github.com/ertunc-ozbay/multi-functional-controller" rel="noopener noreferrer">💻 View GitHub Repo</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/multi-functional-controller/archive/refs/heads/master.zip">⬇ Download Repo (.zip)</a>
<a class="btn btn-cyan" href="https://raw.githubusercontent.com/ertunc-ozbay/multi-functional-controller/master/hardware/mfc-1/mfc-1.kicad_sch" download="mfc-1.kicad_sch">📐 Download KiCad Schematic</a>
<a class="btn btn-youtube" href="#poc-video">🎬 Watch PoC Video Slot</a>
<a class="btn btn-secondary" href="index.html">All Projects</a>
</div>
</header>
@ -70,7 +79,6 @@
<div class="poc-video-card">
<span class="section-label">🎬 Proof of Concept // YouTube Video Showcase</span>
<h2 id="mfc-video-heading">YouTube Proof-of-Concept Demonstration</h2>
<!-- Ready-to-use YouTube Embed Placeholder: Replace src when uploaded -->
<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>
@ -87,9 +95,9 @@
<!-- 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>
<h2 id="p1-gallery">Very Early Prototype Hardware Gallery</h2>
<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> (click any image to zoom). Currently populated: female/male pin header sockets, 100 µF electrolytic bulk decoupling capacitor, ESP32-S3-N16R8 module, nRF24L01+ 2.4 GHz radio header, and 3.3V/5V/GND power distribution rails. These photos will be updated as the Phase 2 DT-100 desktop console modules are installed.
<em>Note:</em> The photos below show the <strong>very early Phase 1 (Rev 0.1) perfboard carrier build</strong>. Currently populated: female/male pin header sockets, 100 µF electrolytic bulk decoupling capacitor, ESP32-S3-N16R8 module, nRF24L01+ 2.4 GHz radio header, and 3.3V/5V/GND power distribution rails. These photos will be updated as the Phase 2 DT-100 desktop console modules are installed.
</p>
<div class="card-grid">
<figure class="card card-amber" style="margin:0;">
@ -113,25 +121,93 @@
</div>
</section>
<!-- Build, Flash & Clone Commands + C99 Firmware Code -->
<section class="section-block" aria-labelledby="p1-code">
<span class="section-label">02 // Terminal Commands &amp; ESP-IDF C99 Firmware</span>
<h2 id="p1-code">Clone, Build &amp; 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:
</p>
<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 &amp; Flash
</span>
<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://github.com/ertunc-ozbay/multi-functional-controller.git
cd multi-functional-controller/firmware
# 2. Export the ESP-IDF v5.2.2 toolchain environment
source ~/esp/esp-idf/export.sh
# 3. Verify target is set to esp32s3 and compile the firmware
idf.py set-target esp32s3
idf.py build
# 4. Flash over USB-JTAG/UART and open real-time serial telemetry monitor
idf.py -p /dev/ttyACM0 flash monitor</code></pre>
</div>
<h3>Master Node Pinout &amp; Telemetry Firmware Snippet (<code>firmware/main/mmcontroller.c</code>)</h3>
<p class="reading-width">
Below is the hardware pinout and hardware `PCNT` quadrature rotary encoder / ADC1 setup from <a href="https://github.com/ertunc-ozbay/multi-functional-controller/blob/master/firmware/main/mmcontroller.c" rel="noopener noreferrer"><code>firmware/main/mmcontroller.c</code></a>:
</p>
<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>
<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 &amp; MAX4466 Mic) ---
#define PIN_JOY_LX GPIO_NUM_4 // ADC1_CH3
#define PIN_JOY_LY GPIO_NUM_5 // ADC1_CH4
#define PIN_JOY_RX GPIO_NUM_6 // ADC1_CH5
#define PIN_JOY_RY GPIO_NUM_7 // ADC1_CH6
#define PIN_MIC_OUT GPIO_NUM_1 // ADC1_CH0 (MAX4466 Audio Preamp)
// --- 2. SHARED SPI2 BUS (nRF24L01+ PA+LNA, ST7789 1.3" IPS TFT &amp; MicroSD) ---
#define PIN_SPI_MOSI GPIO_NUM_11
#define PIN_SPI_SCK GPIO_NUM_12
#define PIN_SPI_MISO GPIO_NUM_13
#define PIN_NRF_CE GPIO_NUM_9
#define PIN_NRF_CSN GPIO_NUM_10
#define PIN_SD_CS GPIO_NUM_39
#define PIN_TFT_CS GPIO_NUM_40
#define PIN_TFT_DC GPIO_NUM_41
#define PIN_TFT_RST GPIO_NUM_42
// --- 3. HARDWARE PCNT ROTARY ENCODER &amp; 2N2222A BJT DRIVER ---
#define PIN_ENC_CLK GPIO_NUM_15
#define PIN_ENC_DT GPIO_NUM_16
#define PIN_ENC_SW GPIO_NUM_17
#define PIN_BJT_BASE GPIO_NUM_21 // Drives 2N2222A base via 1 kOhm resistor</code></pre>
</div>
</section>
<!-- KiCad Schematic -->
<section class="section-block" aria-labelledby="p1-schematic">
<span class="section-label">02 // Hardware Schematic Capture</span>
<span class="section-label">03 // 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.
Early prototype KiCad schematic (<code>mfc-1.kicad_sch</code>) — click to zoom full-screen or <a href="https://raw.githubusercontent.com/ertunc-ozbay/multi-functional-controller/master/hardware/mfc-1/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">03 // Verified ESP32-S3-N16R8 Pinout &amp; Bus Architecture</span>
<span class="section-label">04 // Verified ESP32-S3-N16R8 Pinout &amp; Bus Architecture</span>
<h2 id="p1-pinout">Master Node GPIO Allocation</h2>
<p>
Because the <strong>ESP32-S3-N16R8</strong> reserves <code>GPIO 35–37</code> internally for its 8 MB Octal PSRAM and 16 MB SPI Flash, all peripherals are mapped across safe ADC1, SPI2, and PCNT pins:
</p>
<table class="spec-table">
<thead>
<tr>
@ -187,7 +263,7 @@
<!-- Phase 1 vs Phase 2 BOM -->
<section class="section-block reading-width" aria-labelledby="p1-bom">
<span class="section-label">04 // Build Roadmap &amp; Phase 2 Console BOM</span>
<span class="section-label">05 // Build Roadmap &amp; 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>
@ -212,7 +288,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -225,6 +301,6 @@
</div>
</footer>
<script src="../assets/js/main.js"></script>
<script src="../assets/js/main.js?v=2"></script>
</body>
</html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Point Blank on Linux (Standalone Rust Launcher) — Projects — Ertunç Özbay</title>
<meta name="description" content="Point Blank on Linux by Ertunç Özbay: Standalone Linux desktop launcher written in Rust with 100% unmodified official CheatBlocker anti-cheat, automated Wine prefix provisioning, and DirectX 9 / DirectX 11 support.">
<meta name="description" content="Download, install, and build commands for Point Blank on Linux by Ertunç Özbay: Standalone Linux desktop launcher written in Rust with 100% unmodified official CheatBlocker anti-cheat and DirectX 9/11 support.">
<link rel="icon" type="image/svg+xml" href="../assets/images/favicon.svg">
<link rel="stylesheet" href="../assets/css/style.css">
<link rel="stylesheet" href="../assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -21,6 +21,13 @@
</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -48,8 +56,8 @@
<article>
<header class="workshop-hero">
<div class="card-meta">
<span class="badge badge-coral">Status: v1.0.0 Released</span>
<span>Project 04 // Rust • Linux Systems • Wine &amp; DirectX 9/11</span>
<span class="badge badge-coral">Status: v1.0.0 Pre-Compiled Binary Released</span>
<span>Project 03 // Rust • Linux Systems • Wine &amp; DirectX 9/11</span>
</div>
<h1><span class="gradient-title">Point Blank on Linux — Standalone Community Launcher</span></h1>
<p class="hero-lead">
@ -59,8 +67,9 @@
Built on Arch Linux without requiring Heroic, Lutris, or external wrappers—featuring automated Wine prefix &amp; Winetricks provisioning, 16-byte TLS-aligned runtime support for DirectX 11, multi-region authentication, and native 1920×1080 borderless fullscreen at 200 FPS.
</p>
<div class="button-row">
<a class="btn btn-primary" href="https://github.com/ertunc-ozbay/pointblank-linux" rel="noopener noreferrer">💻 View GitHub Repository</a>
<a class="btn btn-cyan" href="https://github.com/ertunc-ozbay/pointblank-linux/releases" rel="noopener noreferrer">📦 Download v1.0.0 Release</a>
<a class="btn btn-emerald" href="https://github.com/ertunc-ozbay/pointblank-linux/releases/latest/download/pointblank-linux-v1.0.0-linux-x86_64.tar.gz">⬇ Download v1.0.0 Linux Binary (.tar.gz)</a>
<a class="btn btn-primary" href="https://github.com/ertunc-ozbay/pointblank-linux" rel="noopener noreferrer">💻 View GitHub Repo</a>
<a class="btn btn-cyan" href="https://github.com/ertunc-ozbay/pointblank-linux/releases" rel="noopener noreferrer">📦 All GitHub Releases</a>
<a class="btn btn-youtube" href="#poc-video">🎬 Watch PoC Video Slot</a>
</div>
</header>
@ -70,7 +79,6 @@
<div class="poc-video-card">
<span class="section-label">🎬 Proof of Concept // YouTube Video Showcase</span>
<h2 id="pb-video-heading">YouTube Proof-of-Concept Demonstration</h2>
<!-- Ready-to-use YouTube Embed Placeholder: Replace src when uploaded -->
<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>
@ -84,21 +92,84 @@
</div>
</section>
<section class="section-block reading-width" aria-labelledby="p4-overview">
<span class="section-label">01 // Systems Engineering Overview</span>
<h2 id="p4-overview">Solving Low-Level Windows-on-Linux Compatibility</h2>
<p>
Running legacy 32-bit/64-bit online Windows games with kernel/user-mode anti-cheat modules like CheatBlocker on Linux often fails due to unaligned Thread Local Storage (TLS) allocations in `ntdll.dll`, missing Visual C++ MFC redistributables, and broken WebView2 login flows.
<!-- Download & Terminal Commands Section -->
<section class="section-block" aria-labelledby="p4-commands">
<span class="section-label">01 // Direct Download &amp; Linux Terminal Commands</span>
<h2 id="p4-commands">Quick Download &amp; Launch Commands</h2>
<p class="reading-width">
You do not need to compile from source—download and run the pre-compiled `x86_64` Linux release archive directly from the terminal:
</p>
<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 — Download, Extract &amp; Run Pre-Compiled Release (v1.0.0)
</span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Commands</button>
</div>
<pre><code># 1. Download &amp; extract the official pre-compiled Linux x86_64 release archive
curl -L -O https://github.com/ertunc-ozbay/pointblank-linux/releases/latest/download/pointblank-linux-v1.0.0-linux-x86_64.tar.gz
tar -xzf pointblank-linux-v1.0.0-linux-x86_64.tar.gz
cd pointblank-linux-v1.0.0-linux-x86_64
# 2. Make executable and launch (or install desktop menu shortcut)
chmod +x pointblank-linux install-desktop.sh
./install-desktop.sh
./pointblank-linux</code></pre>
</div>
<h3>1. Install System Dependencies (Arch / Ubuntu / Fedora)</h3>
<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 — Install Wine, Winetricks, 32-bit Vulkan &amp; MinGW-w64
</span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Commands</button>
</div>
<pre><code># Arch Linux / CachyOS / Manjaro / EndeavourOS (with [multilib] enabled)
sudo pacman -Syu --needed wine wine-mono wine-gecko winetricks mingw-w64-gcc \
lib32-vulkan-icd-loader vulkan-icd-loader cabextract curl unzip
# Ubuntu / Debian / Linux Mint / Pop!_OS
sudo dpkg --add-architecture i386 &amp;&amp; sudo apt update
sudo apt install -y wine wine32 wine64 winetricks gcc-mingw-w64-i686 \
mesa-vulkan-drivers mesa-vulkan-drivers:i386 cabextract curl unzip
# Fedora / Nobara
sudo dnf install -y wine winetricks mingw32-gcc vulkan-loader vulkan-loader.i686 \
cabextract curl unzip</code></pre>
</div>
<h3>2. Build from Source with Cargo (Rust)</h3>
<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 &amp; Compile Rust Source Code
</span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Commands</button>
</div>
<pre><code>git clone https://github.com/ertunc-ozbay/pointblank-linux.git
cd pointblank-linux
cargo build --release
./target/release/pointblank-linux</code></pre>
</div>
</section>
<section class="section-block reading-width" aria-labelledby="p4-overview">
<span class="section-label">02 // Systems Engineering Overview</span>
<h2 id="p4-overview">Solving Low-Level Windows-on-Linux Compatibility</h2>
<ul>
<li><strong>16-Byte TLS-Aligned Runtime for DirectX 11:</strong> Automatically provisions a 16-byte TLS-aligned `ntdll.dll` Wine runtime so both <strong>DirectX 9</strong> (`DXVersion = 9`) and <strong>DirectX 11</strong> (`DXVersion = 11`) render cleanly without crashes.</li>
<li><strong>One-Click Isolated Prefix Provisioning:</strong> Configures `~/.local/share/pointblank-linux/prefix` with `vcrun2022` (`mfc140.dll`, `msvcp140.dll`, `vcruntime140.dll`), `d3dx9_31..43`, `d3dcompiler_43`, `d3dx11_43`, and Edge WebView2 (`109.0.1518.78`).</li>
<li><strong>In-Game `F11` Borderless Fullscreen Helper:</strong> Compiles a lightweight MinGW-w64 helper utility for instant 1920×1080 borderless fullscreen switching at 200 FPS.</li>
<li><strong>16-Byte TLS-Aligned Runtime for DirectX 11:</strong> Automatically provisions a 16-byte TLS-aligned <code>ntdll.dll</code> Wine runtime so both <strong>DirectX 9</strong> (<code>DXVersion = 9</code>) and <strong>DirectX 11</strong> (<code>DXVersion = 11</code>) render cleanly without crashes.</li>
<li><strong>One-Click Isolated Prefix Provisioning:</strong> Configures <code>~/.local/share/pointblank-linux/prefix</code> with <code>vcrun2022</code> (<code>mfc140.dll</code>, <code>msvcp140.dll</code>, <code>vcruntime140.dll</code>), <code>d3dx9_31..43</code>, <code>d3dcompiler_43</code>, <code>d3dx11_43</code>, and Edge WebView2 (<code>109.0.1518.78</code>).</li>
<li><strong>In-Game <code>F11</code> Borderless Fullscreen Helper:</strong> Compiles a lightweight MinGW-w64 helper utility for instant 1920×1080 borderless fullscreen switching at 200 FPS.</li>
</ul>
</section>
<section class="section-block reading-width" aria-labelledby="p4-specs">
<span class="section-label">02 // Technical Specifications</span>
<span class="section-label">03 // Technical Specifications</span>
<h2 id="p4-specs">Confirmed Capabilities &amp; Supported Distros</h2>
<table class="spec-table">
<thead>
@ -110,22 +181,22 @@
<tbody>
<tr>
<td><strong>Primary Language</strong></td>
<td>Rust (Standalone Linux `x86_64` executable)</td>
<td>Rust (Standalone Linux <code>x86_64</code> executable)</td>
</tr>
<tr>
<td><strong>Anti-Cheat Compatibility</strong></td>
<td>100% Unmodified Official CheatBlocker (`CB.exe` + `CB.cbm`)</td>
<td>100% Unmodified Official CheatBlocker (<code>CB.exe</code> + <code>CB.cbm</code>)</td>
</tr>
<tr>
<td><strong>Render Pipelines</strong></td>
<td>DirectX 9 &amp; DirectX 11 (1920×1080 Borderless Fullscreen @ 200 FPS)</td>
</tr>
<tr>
<td><strong>Supported Linux Distributions</strong></td>
<td>Arch Linux / CachyOS / Manjaro, Ubuntu / Debian / Mint / Pop!_OS, Fedora / Nobara</td>
<td><strong>Direct Binary Download</strong></td>
<td><a href="https://github.com/ertunc-ozbay/pointblank-linux/releases/latest/download/pointblank-linux-v1.0.0-linux-x86_64.tar.gz">pointblank-linux-v1.0.0-linux-x86_64.tar.gz</a></td>
</tr>
<tr>
<td><strong>Source &amp; Binary Releases</strong></td>
<td><strong>Source Repository</strong></td>
<td><a href="https://github.com/ertunc-ozbay/pointblank-linux" rel="noopener noreferrer">github.com/ertunc-ozbay/pointblank-linux</a></td>
</tr>
</tbody>
@ -139,7 +210,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -152,6 +223,6 @@
</div>
</footer>
<script src="../assets/js/main.js"></script>
<script src="../assets/js/main.js?v=2"></script>
</body>
</html>

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" data-theme="colorful">
<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>
<meta name="description" content="Project notes for the RC and Autonomous 4WD Vehicle by Ertunç Özbay: exploring 2.4 GHz RC telemetry, autonomous obstacle avoidance, motor control electronics, and embedded software.">
<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">
<link rel="stylesheet" href="../assets/css/style.css?v=2">
</head>
<body>
<a class="skip-link" href="#main-content">Skip to main content</a>
@ -21,6 +21,13 @@
</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>
<button class="nav-toggle" type="button" data-nav-toggle aria-expanded="false" aria-controls="primary-navigation">
<span aria-hidden="true">☰</span>
<span data-nav-label>Menu</span>
@ -37,6 +44,7 @@
</ul>
</nav>
</div>
</div>
</header>
<main id="main-content">
@ -49,7 +57,7 @@
<header class="workshop-hero">
<div class="card-meta">
<span class="badge badge-active">Status: In Progress</span>
<span>Project 03 // 4WD Robotics, Control Logic &amp; 2.4 GHz Telemetry</span>
<span>Project 04 // 4WD Robotics, Control Logic &amp; 2.4 GHz Telemetry</span>
</div>
<h1><span class="gradient-title">RC and Autonomous 4WD Vehicle</span></h1>
<p class="hero-lead">
@ -57,7 +65,7 @@
</p>
<div class="button-row">
<a class="btn btn-youtube" href="#poc-video">🎬 Watch PoC Video Slot</a>
<a class="btn btn-secondary" href="multi-functional-controller.html">Companion RC Controller</a>
<a class="btn btn-primary" href="multi-functional-controller.html">🎛️ Companion RC Controller</a>
<a class="btn btn-secondary" href="index.html">All Projects</a>
</div>
</header>
@ -67,7 +75,6 @@
<div class="poc-video-card">
<span class="section-label">🎬 Proof of Concept // YouTube Video Showcase</span>
<h2 id="rc-video-heading">YouTube Proof-of-Concept Demonstration</h2>
<!-- Ready-to-use YouTube Embed Placeholder: Replace src when uploaded -->
<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>
@ -92,8 +99,40 @@
</p>
</section>
<!-- 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>
<h2 id="p2-protocol">Packed C99 Telemetry &amp; 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:
</p>
<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 &amp; Telemetry Packet Definition
</span>
<button type="button" class="copy-code-btn" data-copy-code>📋 Copy Code</button>
</div>
<pre><code>#include &lt;stdint.h&gt;
#include &lt;assert.h&gt;
typedef struct __attribute__((packed)) {
uint8_t magic; // 0xA5 frame sync byte
uint8_t seq; // Rolling packet sequence number
int16_t throttle_pwm; // -1000 to +1000 normalized longitudinal drive
int16_t steering_pwm; // -1000 to +1000 differential yaw command
uint8_t mode_flags; // Bit 0: Autonomous Mode, Bit 1: Emergency Stop
uint8_t crc8; // Checksum for packet integrity
} RcControlPacket_t;
_Static_assert(sizeof(RcControlPacket_t) == 8, "RcControlPacket_t must be 8 bytes");</code></pre>
</div>
</section>
<section class="section-block reading-width" aria-labelledby="p2-confirmed">
<span class="section-label">02 // Confirmed Information</span>
<span class="section-label">03 // Confirmed Information</span>
<h2 id="p2-confirmed">Current Documentation Status</h2>
<table class="spec-table">
<thead>
@ -122,21 +161,6 @@
</tbody>
</table>
</section>
<section class="section-block reading-width" aria-labelledby="p2-learning">
<span class="section-label">03 // Workshop Notes</span>
<h2 id="p2-learning">What I Am Currently Learning &amp; Next Steps</h2>
<div class="callout-box">
<span class="callout-title">What I Am Currently Learning</span>
<p>
Understanding how power supply decoupling, motor driver PWM control, and wireless telemetry packets interact when transitioning smoothly between manual remote control and autonomous vehicle behavior.
</p>
<span class="callout-title">Next Step</span>
<p style="margin-bottom:0;">
Publishing the dedicated vehicle repository, chassis photos, and the YouTube Proof-of-Concept drive video once bench and floor testing are complete.
</p>
</div>
</section>
</article>
</div>
@ -145,7 +169,7 @@
<footer class="site-footer">
<div class="container footer-inner">
<div>
<strong>Ertunç Özbay</strong> — Electrical &amp; Electronics Engineering Student • <a href="mailto:ertuncozbayh@gmail.com">ertuncozbayh@gmail.com</a>
<strong>Ertunç Özbay</strong> — Electrical &amp; 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>
@ -158,6 +182,6 @@
</div>
</footer>
<script src="../assets/js/main.js"></script>
<script src="../assets/js/main.js?v=2"></script>
</body>
</html>