Current Projects

I have recently been working on Cal Poly’s Computer Engineering Department’s rover project with Professor Murray. Despite the GitHub repository not being public, I am able to describe my work on this project.

We had worked on organizing the main system to make it modular and easier to develop, implemented a basic object detection system, created the framework to allow the vision system to communicate with the main system, and developed a custom motherboard to simplify electrical connections, among other additions.

More details about this project can be found in our Final Design Report.

Outside of school I have recently been working on a discord bot that plays rock paper scissors with a user. The source code for this can be found on my GitHub.


Below are some projects I have worked on with a small description. Click on the box to be taken to the GitHub repository for that project.


A device that can measure signals between 0 V and 3.3 V, ranging in frequencies from 0 Hz to 1000 Hz.

There are two modes: DC and AC. DC mode measures the average voltage and displays it on a bar graph. Similarly AC mode measures RMS and peak-to-peak voltage, displaying RMS voltage on the bar graph. While in AC mode, if no AC signal is detected, the device will automatically revert to DC mode.

This device was originally created on the TI MSP432P401r microcontroller.

Light Weight Processing Library

A library that enables a user to create multi-threaded programs.

The library comes in both the static library and shared object formats, both of which are made by the provided makefile. By default uses a round robin scheduler to manage the threads, however the scheduler can be replaced by one of the user’s design.


Mush stands for “Minimally Useful SHell”, and is a naive implementation of your standard command-line interface.

It is able to read, parse, and execute commands up to 512 bytes long. Additionally it can redirect inputs and outputs to or from any file, or between programs. Like a standard shell, file input/output redirection is limited to one file each, and there are no unnatural limits to the number of stages in one command.

A user is able to use Mush either interactively or with batches of commands.