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