Delusions of Dialog
Jim Campbell's Essay
- Key Point:
- Interactive media works on a spectrum from controllable to responsive
- Sensory Inputs
- The world is continuousq, not discrete
- Interfaces can be put on a spectrum of discrete to continuous
- Key Point
- In discrete interfaces the interaction is between the viewer and the interface and in continuous interfaces the interaction is between the viewer and the work or the program
- Discrete choices generally cause the viewer to look for a logical reason to make the correct choice based on what they think the consequences will be
- Key Point
- If an interface has holes in it with regard to its structure, then it will be disregarded by a viewer simply as metaphorical and any interaction that does occur between a viewer and the work will get stuck at the interface
- A transparent interface is one that is perceivably complete of its type of structure
- Memory
- More invisible than the already invisible program
- The difference between an interactive game and an interactive work of art is not just in the subject matter. It’s also in the program and interface which are important parts of the expression of a work. Artists working in this field will continue to be odds with the models and directions of the multimedia industry.
Tweeting Doorbell
From MacLife Magazine March Issue
- http://rooreynolds.com/2008/05/14/hacking-the-doorbell/
- Just shows the cool stuff you can do...
Servos
Example



Servo Rhythms
Download servo_rhythm01.txt file
#include <Servo.h> // Include Servo library
// Create Servo object
Servo myservo ;
// Variables
// pins
int servopin = 10;
// timers
long timer = 0;
int offset = 15;
// servo angle
int angle = 0;
int servodir = 1;
// Setup
void setup(){
Serial.begin(9600);
pinMode(servopin,OUTPUT);
myservo.attach(servopin);
myservo.write(angle);
}
// Das Loop
void loop() {
// Check the timer
if(timer + offset < millis()) {
// if the timer has passed, do the swing
doSwing();
// reset the timer
timer = millis();
}
}
void doSwing() {
//Serial.println(angle);
if(angle == 180) { servodir = -1; }
if(angle == 0) { servodir = 1; }
myservo.write(angle);
angle = angle + servodir;
}
Servo Chaos
Download servo_chaos01.txt file
#include <Servo.h> // Include Servo library
// Create Servo object
Servo myservo ;
// Variables
// pins
int servopin = 10;
// timers
long timer = 0;
int offset = 15;
// servo angle
int angle = 0;
int targetangle = 180;
// Setup
void setup(){
Serial.begin(9600);
pinMode(servopin,OUTPUT);
myservo.attach(servopin);
myservo.write(angle);
}
// Das Loop
void loop() {
// Check the timer
if(timer + offset < millis()) {
// if the timer has passed, do the swing
doSwing();
// reset the timer
timer = millis();
}
}
void doSwing() {
//Serial.println(angle);
if(angle == targetangle) {
targetangle = random(181);
Serial.println(targetangle);
}
if (angle < targetangle) { angle = angle + 1; }
if (angle > targetangle) { angle = angle - 1; }
myservo.write(angle);
}
Download servo_chaos02.txt file
#include// Include Servo library // Create Servo object Servo myservo ; // Variables // pins int servopin = 10; // timers long timer = 0; int offset = 10; // servo angle int angle = 0; int targetangle = 180; // Setup void setup(){ Serial.begin(9600); pinMode(servopin,OUTPUT); myservo.attach(servopin); myservo.write(angle); } // Das Loop void loop() { // Check the timer if(timer + offset < millis()) { // if the timer has passed, do the swing doSwing(); // reset the timer timer = millis(); } } void doSwing() { if (angle == targetangle) { targetangle = random(181); offset = random(1, 50); Serial.println(angle); Serial.println(targetangle); } if (angle < targetangle) { angle = angle + 1; } if (angle > targetangle) { angle = angle - 1; } myservo.write(angle); }