-MIXED SIGNALS-
Photos:
Description:
This piece is about interspecies communication/human-animal communication. The interface is a handmade cat plush with an LED matrix head. Inside the head is where the arduino/protoshield is housed, and a long-life battery is housed in the body in a hidden zipper pouch. Embroidered into the plush's back are rows of conductive thread that serve as one big capacitive touch sensor to trigger the matrix. At first I thought of programming the matrix with 'faces' or recognizable symbols like letters or numbers, but then decided it might be too cliche and too embedded in human communication to be animal communication. I chose to instead create abstract compositions that would be displayed when the cat was touched, the thinking being that they would invite interpretation by the viewer, just as animal communication invites interpretation. In critique, one of the first things my classmates began discussing was whether one reaction was a 'good' reaction or a 'bad' reaction, so I was really pleased with that! This lends to my concept being that whatever the animal's intention behind it's communication, we only take away our human interpretation of it.
Process Posts:
[1] [2] [3] [4] [5] [6] [7] [8]
Code (through 'read more'):
#include <Adafruit_GFX.h> // Core graphics library
#include <RGBmatrixPanel.h> // Hardware-specific library
// 32x32 matrix setup:
#define CLK 8
#define OE 9
#define LAT 10
#define A A0
#define B A1
#define C A2
#define D A3
#include <CapacitiveSensor.h>
#define COMMON_PIN 11 // The common 'send' pin for touch sensor.
#define CAP_THRESHOLD 30 // Capactive reading that triggers reaction. Low due to fur in the way of thread.
// Defines the pins that the sensor is connected to. Name refers to base code's pin setup(4,2) but I used (11,12).
CapacitiveSensor cs_4_2 = CapacitiveSensor(11,12);
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false);
int mode = 0; //mode will cycle the reactions.
void setup() {
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);
matrix.begin();
}
void loop() {
long total1 = cs_4_2.capacitiveSensor(30);
// If the capacitance reading is greater than the threshold, show reaction and cycle mode:
//composition #1
if(cs_4_2.capacitiveSensor(30) > CAP_THRESHOLD && mode == 0) {
matrix.drawRect(0, 0, 32, 32, matrix.Color333(7, 6, 0));
matrix.drawLine(10, 10, 30, 30, matrix.Color333(7, 3, 0));
matrix.drawLine(5, 25, 25, 5, matrix.Color333(7, 1, 0));
matrix.fillRect(20, 20, 7, 7, matrix.Color333(7, 0, 0));
matrix.drawLine(5, 5, 5, 15, matrix.Color333(7, 3, 0));
matrix.drawLine(7, 7, 7, 17, matrix.Color333(7, 0, 0));
matrix.fillCircle(15, 5, 2, matrix.Color333(7, 1, 0));
delay(2000);
mode=1;
}
//composition #2
if(cs_4_2.capacitiveSensor(30) > CAP_THRESHOLD && mode == 1 ) {
matrix.drawLine(31, 0, 0, 31, matrix.Color333(1, 6, 1));
matrix.fillCircle(21, 21, 5, matrix.Color333(0, 0, 2));
matrix.drawLine(18, 18, 31, 31, matrix.Color333(0, 7, 7));
matrix.drawRect(4, 4, 12, 12, matrix.Color333(4, 7, 0));
matrix.fillCircle(15, 25, 2, matrix.Color333(0, 3, 2));
matrix.fillCircle(4, 5, 2, matrix.Color333(2, 6, 0));
delay(2000);
mode=2;
}
//composition #3
if(cs_4_2.capacitiveSensor(30) > CAP_THRESHOLD && mode == 2 ) {
matrix.drawLine(0, 31, 31, 31, matrix.Color333(7, 0, 2));
matrix.drawLine(3, 28, 28, 28, matrix.Color333(7, 0, 4));
matrix.drawLine(6, 25, 25, 25, matrix.Color333(7, 0, 7));
matrix.drawLine(6, 25, 25, 25, matrix.Color333(6, 0, 7));
matrix.drawLine(9, 22, 22, 22, matrix.Color333(2, 0, 7));
matrix.drawLine(12, 19, 19, 19, matrix.Color333(0, 0, 7));
matrix.drawLine(14, 16, 17, 16, matrix.Color333(0, 4, 7));
matrix.drawLine(14, 13, 17, 13, matrix.Color333(0, 7, 2));
matrix.drawLine(12, 10, 19, 10, matrix.Color333(3, 7, 0));
matrix.drawLine(9, 7, 22, 7, matrix.Color333(7, 6, 0)); //yas gurl
matrix.drawLine(0, 30, 30, 0, matrix.Color333(7, 7, 7));
matrix.drawLine(18, 15, 30, 3, matrix.Color333(7, 7, 7));
matrix.fillCircle(7, 10, 4, matrix.Color333(5, 2, 5));
delay(2000);
mode=3;
}
//composition #1 again for 'randomness'
if(cs_4_2.capacitiveSensor(30) > CAP_THRESHOLD && mode == 3 ) {
matrix.drawRect(0, 0, 32, 32, matrix.Color333(7, 6, 0));
matrix.drawLine(10, 10, 30, 30, matrix.Color333(7, 3, 0));
matrix.drawLine(5, 25, 25, 5, matrix.Color333(7, 1, 0));
matrix.fillRect(20, 20, 7, 7, matrix.Color333(7, 0, 0));
matrix.drawLine(5, 5, 5, 15, matrix.Color333(7, 3, 0));
matrix.drawLine(7, 7, 7, 17, matrix.Color333(7, 0, 0));
matrix.fillCircle(15, 5, 2, matrix.Color333(7, 1, 0));
delay(2000);
mode=4;
}
//composition #4
if(cs_4_2.capacitiveSensor(30) > CAP_THRESHOLD && mode == 4 ) {
matrix.drawLine(16, 0, 16, 15, matrix.Color333(7, 4, 0));
matrix.drawLine(17, 15, 25, 15, matrix.Color333(7, 4, 0));
matrix.drawLine(25, 16, 25, 31, matrix.Color333(7, 4, 0));
matrix.fillRect(17, 17, 7, 8, matrix.Color333(0, 0, 7));
matrix.fillRect(10, 5, 5, 8, matrix.Color333(7, 0, 0));
matrix.drawCircle(8, 25, 5, matrix.Color333(7, 7, 7));
matrix.drawLine(29, 18, 29, 30, matrix.Color333(7, 7, 7));
matrix.drawRect(0, 0, 32, 32, matrix.Color333(7, 0, 0));
matrix.fillCircle(25, 5, 2, matrix.Color333(7, 4, 0));
delay(2000);
mode=0;
}
//if no touch, blank screen.
else{
matrix.fillScreen(matrix.Color333(0, 0, 0));
}
}
No comments:
Post a Comment