Things used in this project

Schematics

Block Diagram
Wii eyeball  rukgmywiqq

Code

Wii_eye01.inoArduino
#include <Wire.h>
#include "nunchuck_funcs.h"
#include <Adafruit_NeoPixel.h>

#define PIN 6

Adafruit_NeoPixel led = Adafruit_NeoPixel(68, PIN, NEO_GRB + NEO_KHZ800);

int blackNum = 24;
int pupilNum = 12;

uint32_t color;
int brightness = 40;
byte eyeColor;

int LR =0;

//Black eye L&R animation
int blackLED[15][24] = {{12,32,35,55,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        {12,13,31,36,54,55,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        {11,13,14,30,37,53,54,56,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        {10,11,14,15,29,38,52,53,56,57,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        { 9,10,11,12,15,16,28,33,34,39,51,52,55,56,57,58,68,68,68,68,68,68,68,68},
                        { 0, 8, 9,10,11,12,13,16,17,27,32,35,40,50,51,54,55,56,57,58,59,67,68,68},
                        { 0, 1, 7, 8, 9,10,13,14,17,18,26,31,36,41,49,50,53,54,57,58,59,60,66,67},
                        { 1, 2, 6, 7, 8, 9,14,15,18,19,25,30,37,42,48,49,52,53,58,59,60,61,65,66},
                        { 2, 3, 5, 6, 7, 8,15,16,19,20,24,29,38,43,47,48,51,52,59,60,61,62,64,65},
                        { 3, 4, 5, 6, 7,16,17,20,21,23,28,39,44,46,47,50,51,60,61,62,63,64,68,68},
                        { 4, 5, 6,17,18,21,22,27,40,45,46,49,50,61,62,63,68,68,68,68,68,68,68,68},
                        { 4, 5,18,19,26,41,48,49,62,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        { 4,19,20,25,42,47,48,63,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        {20,21,24,43,46,47,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68},
                        {21,23,44,46,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68}};

//pupil L&R animation
int pupilLED[15][12] = {{33,34,68,68,68,68,68,68,68,68,68,68},
                        {32,33,34,35,68,68,68,68,68,68,68,68},
                        {12,31,32,33,34,35,36,55,68,68,68,68},
                        {12,13,30,31,32,33,34,35,36,37,54,55},
                        {13,14,29,30,31,32,35,36,37,38,53,54},
                        {14,15,28,29,30,31,36,37,38,39,52,53},
                        {15,16,27,28,29,30,37,38,39,40,51,52},
                        {16,17,26,27,28,29,38,39,40,41,50,51},
                        {17,18,25,26,27,28,39,40,41,42,49,50},
                        {18,19,24,25,26,27,40,41,42,43,48,49},
                        {19,20,23,24,25,26,41,42,43,44,47,48},
                        {20,21,22,23,24,25,42,43,44,45,46,47},
                        {21,22,23,24,43,44,45,46,68,68,68,68},
                        {22,23,44,45,68,68,68,68,68,68,68,68},
                        {22,45,68,68,68,68,68,68,68,68,68,68}};

//Blink animation
int eyelid = 0;
int eyelidNum[8] = {0,4,8,16,24,34,44,56};
int eyelidLED[56] = {64,65,66,67,58,59,60,61,56,57,62,63,49,50,51,52,47,48,53,54,38,39,40,41,46,55,36,37,42,43,26,27,28,29,35,44,24,25,30,31,15,16,17,18,34,45,23,32,13,14,19,20,6,7,8,9};

byte joyx,joyy,zbut,cbut;

void setup() {
  Serial.begin(19200);

  led.begin();
  led.setBrightness(brightness); // Initial Brightness 40
  led.show(); // Initialize all pixels to 'off'
  color = led.Color(0, 177, 55); //pupil color
  
  nunchuck_init(); // send the initilization handshake
}

uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return led.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return led.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return led.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

void blink(int eyelid, int LR) {
  if (eyelid != 8){
    //White eye
    for(uint16_t i=0; i<led.numPixels(); i++) {
      led.setPixelColor(i, led.Color(66, 66, 66));
    }
    
    //Black eye
    for(uint16_t i=0; i<blackNum; i++) {
      led.setPixelColor(blackLED[LR][i], color);
    }
    
    //pupil
    for(uint16_t i=0; i<pupilNum; i++) {
      led.setPixelColor(pupilLED[LR][i], led.Color(0, 0, 66));
    }

    //eyelid
    for(int i=0; i < eyelidNum[eyelid]; i++) {
      led.setPixelColor(eyelidLED[i], 0);
    }
  } else if (eyelid == 8){
    led.clear();
  }
  led.show();
}

void loop() {
  nunchuck_get_data();

  joyx = nunchuck_joyx(); // range 29 - 226
  joyy = nunchuck_joyy(); // range 29 - 226
  zbut = nunchuck_zbutton();
  cbut = nunchuck_cbutton(); 

  /*
  Serial.print("joyx: "); Serial.print((byte)joyx,DEC);
  Serial.print("\tjoyy: "); Serial.print((byte)joyy,DEC);
  Serial.print("\tzbut: "); Serial.print((byte)zbut,DEC);
  Serial.print("\tcbut: "); Serial.println((byte)cbut,DEC);
  */


  //Change the color of the pupil with the Z button push
  if(zbut == 1){
    eyeColor++;
    if(eyeColor > 255){
      eyeColor = 0;
    }
    delay(10);
    color =  Wheel(eyeColor);
  }

  //Blink on the joystick's y axis
  eyelid = map(joyy, 29, 130, 8, 0);
  if (eyelid > 8) {
    eyelid = 8;
  }
  if (eyelid < 0) {
    eyelid = 0;
  }

  //The pupil moves left and right on the joystick's x axis
  LR = map(joyx, 29, 226, 0, 14);
  if (LR > 14) {
    LR = 14;
  }
  if (LR < 0) {
    LR = 0;
  }

  blink(eyelid, LR);
}

Credits

3eytbp i
HomeMadeGarbage

We are family. hobby is D.I.Y!!

Contact

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Similar projects you might like

Arduino on Internal Oscillator Crystal as Clock Source
Intermediate
  • 509
  • 41

Protip

Want to make an Arduino having only an ATmega328 chip and nothing else? Not even the crystal oscillator!

Distance Measurement Vehicle via Websocket
Intermediate
  • 1,253
  • 13

Full instructions

A vehicle measures distance with an encoder on its wheel. It is remotely controlled and transmits the distance via Websocket.

Smart Shoes (Auto-lacing and Generating Electricity)
Intermediate
  • 251
  • 7

Full instructions

Features of smart shoes: generates electricity, auto lacing, step counting, etc.

Barbot: Cocktail Mixing Robot
Intermediate
  • 3,108
  • 16

Full instructions

Barbot is an open source Arduino cocktail mixing robot controlled with the hybrid mobile app via Bluetooth.

Terminal Chat Client!
Intermediate
  • 1,231
  • 9

Full instructions

Make a terminal chat client powered by the same technology as the Facebook Messenger mobile app and display your messages on your Arduino!

Roombot: Room Cleaning Robot
Intermediate
  • 2,494
  • 12

Work in progress

Roombot is a room cleaning robot that moves around the room avoiding obstacles, picking up dust and wiping the floor.

ProjectsCommunitiesTopicsContestsLiveAppsBetaFree StoreBlogAdd projectSign up / Login