SUPREME COURT TAROT
|
![]() |
|
Ask the fortuneteller a question about the future or how to proceed in a certain aspect of your life. Carefully select three cards from a deck of nine and place them on the table, turning them over one by one. Each card represents a different Supreme Court Justice. The fortuneteller will then read your future based on the opinions these three judges have given in Supreme court decisions. The fortuneteller will be aided by an oracle which will run software assessing the position of each judge in relation to your question. |
||
Sample readings as performed by Jenny Gutbezahl w/Kanarinka and Teri Rueb
The project uses a well-known and understood interface to translate academic
and political facts into a more accessible and entertaining language. It takes
laws that may seem abstract and distant and shows, the tangible effects they
have on our lives. Having my work be accessible to a wide audience is important. I have chosen
a popular game so that people will immediately understand how to interact with
the artwork. The idea of having their future told, and the playful aesthetic,
will entice people to participate. The piece is designed to be exhibited in
public venues such as street fairs or locations one would expect a tarot reading.
The Supreme Court is a topic of particular interest currently, but the cards
could be converted to other games or to address different issues.
![]() |
![]() |
Fortuneteller "reading future"based on supreme
court cards |
fortuneteller consults database(Using Processing and MySQL) |
MATERIALS/TECHNOLOGY
The cards are hand made and painted and embedded with RFID cards. An RFID reader
is built into the table. The identity of each card is transferred to Basic Stamp,
which then sends the information to a computer running processing. Processing
uses MySQL to access a database which pulls up the information on each judge
whose card has been selected.
![]() |
CODE BELOW FOR PROCESSING, BASIC STAMP, Instructions for MySQL.
CODE - Processing
// Example modified from one by Tom Igoe
//modified by Catherine D'Ignazio and Dan Marsh
//http://processing.org/reference/libraries/serial/Serial_read_.html
//be sure to go through this hooplah if you want serial to work in processing:
//http://processing.org/faq/bugs.html#serial
import processing.serial.*;
import de.bezier.mysql.*;
import com.mysql.jdbc.Driver;Serial myPort; // The serial port
int myNumber;
String myJustice;
String[] topics = new String[5];
String[] judges = new String[5];
int[] numbers = new int[4];
int counter = 0;
boolean done = false;
void setup()
{
topics[0] = "civil rights";
topics[1] = "love life";
topics[2] = "labor";
topics[3] = "health";
topics[4] = "blah";
judges[0] = "Nothing";
judges[1] = "Thomas";
judges[2] = "Scalia";
judges[3] = "connor";
judges[4] = "Iolio";
//Set size of the window
size( 600, 600 );
// framerate(50);
// size(800,200);
// background(0);
//time = oldtime = 0;
//SERIAL WANKING
// List all the available serial ports
println(Serial.list());
// I know that the 3rd port in the serial list on my mac
// is always my Keyspan adaptor, so I open Serial.list()[2].
// Open whatever port is the one you're using.
myPort = new Serial(this, Serial.list()[2], 2400);
}void draw()
{
if (!done)
{
myNumber = myPort.read();
if (myNumber > -1 && myNumber < 10) {
if (counter == 0 || (counter > 0 && myNumber != numbers[counter -
1]))
{
//Put value into numbers array
numbers[counter] = myNumber;
counter++;
println(myNumber);
}
if (counter == 4)
{
done = true;
processInput(numbers);
}
}
}
}
void processInput(int[] numbers) {
int judge = numbers[0];
int judge2 = numbers[1];
int judge3 = numbers[2];
int topic = numbers[3];
int offset = 4;
topic = topic - offset;println("The data you sent is: Judge 1=" +
judge + " , Judge 2= " + judge2 + " , Judge 3=" + judge3
+ " , and Topic = " + topic );
sendDataToDB(topic, judge, judge2, judge3);
}
void sendDataToDB(int data, int judge, int judge2, int judge3)
{
//Database variables
MySQL msql;
// replace --username--, --password-- with your mysql-account.
//
String user = "root";
String pass = "";
// name of the database to use
//
String database = "tarot";
// name of the table that will be created
//
String table = "opinions";
// connect to database of server "localhost"
//
msql = new MySQL( "localhost", database, user, pass, this );
if ( msql.connect() )
{
// get all the rows from the db
String sqlQuery = "SELECT " + judges[judge] + ", " + judges[judge2]
+ ", " + judges[judge3] + " FROM " + table + " WHERE
topic LIKE '%" + topics[data] + "%'";
msql.query( sqlQuery);
println(sqlQuery);
//assign those values to an array
while (msql.next())
{
println(msql.getString(judges[judge]));
println(msql.getString(judges[judge2]));
println(msql.getString(judges[judge3]));
} }
else
{
// connection failed !
println("YOUR CONNECTION FAILED");
}} //end sendToDB function//then display the value of the entry associated with
the keypress (0 => huey)
/** void draw()
{
PFont fontA = loadFont("Arial-Black-12.vlw");
// Set the font and its size (in units of pixels)
textFont(fontA, 32);
int y = 60;
for (int i=0; i<result.length; i++)
{
text(result[i], 30, y);
y=y+30;
}
noLoop();
}**/
BASIC STAMP2 CODE
(modified from code that parralax sent with RFID reader)
' -----[ Program Description ]---------------------------------------------
'
' Reads tags from a Parallax RFID reader and compares to known tags (stored
' in EEPROM table). If tag is found, the program will disable a lock.
' -----[ Revision History ]------------------------------------------------
' -----[ I/O Definitions ]-------------------------------------------------
Enable PIN 0
' low = reader on
RX PIN 1
' serial
from reader
Spkr PIN 2
' speaker output
Latch PIN 3
' lock/latch control
' -----[ Constants ]-------------------------------------------------------
#SELECT $STAMP
#CASE BS2SX, BS2P
T1200 CON 2063
T2400 CON 1021
T4800 CON 500
T9600 CON 240
T19K2 CON 110
TMidi CON 60
T38K4 CON 45
#ENDSELECT
SevenBit CON $2000
Inverted CON $4000
Open CON $8000
Baud CON T2400
#SELECT $STAMP
#CASE BS2SX
TmAdj CON $280
' x 2.5
FrAdj CON $066
' x 0.4
#ENDSELECT
LastTag CON 10
#DEFINE __No_SPRAM = ($STAMP < BS2P)
' does module have SPRAM?' -----[ Variables ]-------------------------------------------------------
#IF __No_SPRAM #THEN
buf VAR BYTE(10)
' RFID bytes buffer
#ELSE
chkChar VAR BYTE
' character to test
#ENDIF
tagNum VAR BYTE
' from EEPROM table
idx VAR BYTE
' tag byte index
char VAR BYTE
' character from table'
-----[ EEPROM Data ]-----------------------------------------------------
Tag1 DATA "0F027D7DB5"
' valid tags
Tag2 DATA "0F027D7DA7"
Tag3 DATA "0F027D7DB9"
Tag4 DATA "0F027D7DAF"
Tag5 DATA "0F027D7DBD"
Tag6 DATA "0F027D7DA6"
Tag7 DATA "0F027D7DBF"
Tag8 DATA "0F027D7DAA"
Tag9 DATA "0F027D7DA2"
Tag10 DATA "0000000000"
Name0 DATA "no good",
CR, 0
Name1 DATA "Tag 1",
CR, 0
Name2 DATA "Tag 2",
CR, 0
Name3 DATA "Tag 3",
CR, 0
Name4 DATA "Tag 4",
CR, 0
Name5 DATA "Tag 5",
CR, 0
Name6 DATA "Tag 6",
CR, 0
Name7 DATA "Tag 7",
CR, 0
Name8 DATA "Tag 8",
CR, 0
Name9 DATA "Tag 9",
CR, 0
Name10 DATA "Tag 10",
CR, 0' -----[ Initialization ]--------------------------------------------------
Reset:
HIGH Enable
' turn of RFID reader
LOW Latch
' -----[ Program Code ]----------------------------------------------------
Main:
LOW Enable
' activate the
reader
#IF __No_SPRAM #THEN
SERIN RX, T2400, [WAIT($0A), STR buf\10] ' wait for
hdr + ID
#ELSE
SERIN RX, T2400, [WAIT($0A), SPSTR 10]
#ENDIF
HIGH Enable
' deactivate reader
Check_List:
FOR tagNum = 1 TO LastTag
' scan through known tags
FOR idx = 0 TO 9
' scan bytes in tag
READ (tagNum - 1 * 10 + idx), char
#IF __No_SPRAM #THEN
IF (char <> buf(idx)) THEN Bad_Char
' compare tag to table
#ELSE
GET idx, chkChar
' read char from SPRAM
IF (char <> chkChar) THEN Bad_Char
' compare to table
#ENDIF
NEXT
GOTO Tag_Found
' all bytes match!
Bad_Char:
' try next tag
NEXT
Bad_Tag:
tagNum = 0
GOSUB Show_Name
' print message
PAUSE 1000
GOTO Main
Tag_Found:
GOSUB Show_Name
' print name
' restore latch
GOTO sendserial
sendserial:
SEROUT 16, 1021, [tagNum]
GOTO main
'END' -----[ Subroutines ]-----------------------------------------------------
' Prints name associated with RFID tag
Show_Name:
DEBUG DEC tagNum, ": "
LOOKUP tagNum,
[Name0, Name1, Name2, Name3, Name4, Name5,
Name6, Name7, Name8, Name9, Name10], idx ' point to first
character
DO
READ idx, char
' read character from
name
IF (char = 0) THEN EXIT
' if 0, we're done
DEBUG char
' otherwise print
it
idx = idx + 1
' point to next character
LOOP
RETURN
HOW TO LOAD DATA INTO MYSQL by Catherine D'Ignazio
1) EXPORT DATA TO FILE
* Go to dmphp.risd.edu/phpMyAdmin
* Navigate to the table that you want to export from
* Click on Export
* Use all the default options, but CLICK "ADD DROP TABLE"
* CLick "Go"
* Copy the text into a text file and save to the Desktop2) START MYSQL and MYSQL
CLIENT
* Go to System Prefs, click on MySQL, start the server if it's not already running
* Open Terminal
* Type: "alias mysql=/usr/local/mysql/bin/mysql"
* Type: "mysql -u root"
* Now the mysql client is started and you are logged into it as the root user
3) CONNECT TO YOUR DATABASE
* Type "use ______" where _____ = the name of your database
* Type "source <YOUR_FILE>"
* That will run the file you downloaded, if your file is on the Desktop and
named "opinions.sql", for example, you type "source ~/Desktop/opinions.sql"
* You should see some results like this:
Query OK, 0 rows affected (0.09 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.02 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
* Type "SELECT * from ______" where ______ = the name of your table