Skip to content

Instantly share code, notes, and snippets.

@gallaugher
Created August 9, 2024 03:44
Show Gist options
  • Save gallaugher/68bdc9d454304b87674ee073b262c7ec to your computer and use it in GitHub Desktop.
Save gallaugher/68bdc9d454304b87674ee073b262c7ec to your computer and use it in GitHub Desktop.
config for uncanny eyes & Itsy Bitsy
// Pin selections here are based on the original Adafruit Learning System
// guide for the Teensy 3.x project. Some of these pin numbers don't even
// exist on the smaller SAMD M0 & M4 boards, so you may need to make other
// selections:
// GRAPHICS SETTINGS (appearance of eye) -----------------------------------
// If using a SINGLE EYE, you might want this next line enabled, which
// uses a simpler "football-shaped" eye that's left/right symmetrical.
// Default shape includes the caruncle, creating distinct left/right eyes.
#if defined(ADAFRUIT_HALLOWING) || defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS) // Hallowing, with one eye, does this by default
#define SYMMETRICAL_EYELID
#else // Otherwise your choice, standard is asymmetrical
#define SYMMETRICAL_EYELID
#endif
// Enable ONE of these #includes -- HUGE graphics tables for various eyes:
#include "graphics/defaultEye.h" // Standard human-ish hazel eye -OR-
//#include "graphics/dragonEye.h" // Slit pupil fiery dragon/demon eye -OR-
//#include "graphics/noScleraEye.h" // Large iris, no sclera -OR-
//#include "graphics/goatEye.h" // Horizontal pupil goat/Krampus eye -OR-
//#include "graphics/newtEye.h" // Eye of newt -OR-
//#include "graphics/terminatorEye.h" // Git to da choppah!
//#include "graphics/catEye.h" // Cartoonish cat (flat "2D" colors)
//#include "graphics/owlEye.h" // Minerva the owl (DISABLE TRACKING)
//#include "graphics/naugaEye.h" // Nauga googly eye (DISABLE TRACKING)
//#include "graphics/doeEye.h" // Cartoon deer eye (DISABLE TRACKING)
// Optional: enable this line for startup logo (screen test/orient):
#if !defined(ADAFRUIT_HALLOWING) // Hallowing can't always fit logo+eye
#include "graphics/logo.h" // Otherwise your choice, if it fits
#endif
// EYE LIST ----------------------------------------------------------------
// This table contains ONE LINE PER EYE. The table MUST be present with
// this name and contain ONE OR MORE lines. Each line contains THREE items:
// a pin number for the corresponding TFT/OLED display's SELECT line, a pin
// pin number for that eye's "wink" button (or -1 if not used), and a screen
// rotation value (0-3) for that eye.
eyeInfo_t eyeInfo[] = {
#if defined(ADAFRUIT_HALLOWING)
{ 39, -1, 1 }, // SINGLE EYE display-select and wink pins, rotate 180
#elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS)
{ A7, -1, 1 }, // SINGLE EYE display-select and wink pins, no rotate
#else
{ 9, -1, 0 }, // LEFT EYE display-select and wink pins, no rotation
// { 10, 2, 1 }, // RIGHT EYE display-select and wink pins, no rotation
#endif
};
// DISPLAY HARDWARE SETTINGS (screen type & connections) -------------------
#if defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS)
#define TFT_SPI SPI1
#define TFT_PERIPH PERIPH_SPI1
#else
#define TFT_SPI SPI
#define TFT_PERIPH PERIPH_SPI
#endif
#if defined(ADAFRUIT_HALLOWING)
#include <Adafruit_ST7735.h> // TFT display library
#define DISPLAY_DC 38 // Display data/command pin
#define DISPLAY_RESET 37 // Display reset pin
#define DISPLAY_BACKLIGHT 7
#define BACKLIGHT_MAX 128
//#define SYNCPIN A2 // I2C sync if set, GND this pin on receiver
//#define SYNCADDR 0x08 // I2C address of receiver
// (Try disabling SYMMETRICAL_EYELID then)
#elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS)
#include <Adafruit_ST7735.h> // TFT display library
#define DISPLAY_DC A6 // Display data/command pin
#define DISPLAY_RESET -1 // Display reset pin
#define DISPLAY_BACKLIGHT A3
#define BACKLIGHT_MAX 255
#else
// Enable ONE of these #includes to specify the display type being used
#include <Adafruit_SSD1351.h> // OLED display library -OR-
//#include <Adafruit_ST7735.h> // TFT display library (enable one only)
#define DISPLAY_DC 11 // Data/command pin for ALL displays
#define DISPLAY_RESET 7 // Reset pin for ALL displays
#endif
#if defined(_ADAFRUIT_ST7735H_) || defined(_ADAFRUIT_ST77XXH_)
#define SPI_FREQ 24000000 // TFT: use max SPI (clips to 12 MHz on M0)
#else // OLED
#if !defined(ARDUINO_ARCH_SAMD) && (F_CPU <= 72000000)
#define SPI_FREQ 24000000 // OLED: 24 MHz on 72 MHz Teensy only
#else
#define SPI_FREQ 12000000 // OLED: 12 MHz in all other cases
#endif
#endif
// INPUT SETTINGS (for controlling eye motion) -----------------------------
// JOYSTICK_X_PIN and JOYSTICK_Y_PIN specify analog input pins for manually
// controlling the eye with an analog joystick. If set to -1 or if not
// defined, the eye will move on its own.
// IRIS_PIN speficies an analog input pin for a photocell to make pupils
// react to light (or potentiometer for manual control). If set to -1 or
// if not defined, the pupils will change on their own.
// BLINK_PIN specifies an input pin for a button (to ground) that will
// make any/all eyes blink. If set to -1 or if not defined, the eyes will
// only blink if AUTOBLINK is defined, or if the eyeInfo[] table above
// includes wink button settings for each eye.
//#define JOYSTICK_X_PIN A0 // Analog pin for eye horiz pos (else auto)
//#define JOYSTICK_Y_PIN A1 // Analog pin for eye vert position (")
//#define JOYSTICK_X_FLIP // If defined, reverse stick X axis
//#define JOYSTICK_Y_FLIP // If defined, reverse stick Y axis
// JMG mod - removed TRACKING to try to get eyelids wide open
//#define TRACKING // If defined, eyelid tracks pupil
// JMG mod - removed AUTOBLINK since Moody's eye doesn't blink
#define AUTOBLINK // If defined, eyes also blink autonomously
#if defined(ADAFRUIT_HALLOWING)
#define LIGHT_PIN A1 // Hallowing light sensor pin
#define LIGHT_CURVE 0.33 // Light sensor adjustment curve
#define LIGHT_MIN 30 // Minimum useful reading from light sensor
#define LIGHT_MAX 980 // Maximum useful reading from sensor
#elif defined(ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS)
#define LIGHT_PIN A8 // CPX light sensor pin
#define LIGHT_CURVE 0.33 // Light sensor adjustment curve
#define LIGHT_MIN 30 // Minimum useful reading from light sensor
#define LIGHT_MAX 980 // Maximum useful reading from sensor
#define BLINK_PIN 4 // Button
#else
#define BLINK_PIN 1 // Pin for manual blink button (BOTH eyes)
#define LIGHT_PIN A2 // Photocell or potentiometer (else auto iris)
//#define LIGHT_PIN_FLIP // If defined, reverse reading from dial/photocell
#define LIGHT_MIN 0 // Lower reading from sensor
#define LIGHT_MAX 1023 // Upper reading from sensor
#endif
#define IRIS_SMOOTH // If enabled, filter input from IRIS_PIN
#if !defined(IRIS_MIN) // Each eye might have its own MIN/MAX
#define IRIS_MIN 120 // Iris size (0-1023) in brightest light
#endif
#if !defined(IRIS_MAX)
// JMG mod - my attempt to shrink Iris. Might not nwork. Was 720
#define IRIS_MAX 360 // Iris size (0-1023) in darkest light
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment