/*
---- SimpleMessageSystem Example 1 ----
Control Arduino board functions with the following messages:
writepin
r a -> read analog pins
r d -> read digital pins
w d [pin] [value] -> write digital pin
w a [pin] [value] -> write analog pin
Base: Thomas Ouellet Fredericks
Additions: Alexandre Quessy
Adapted for "Fato Sensível Wireless"
Filipe Valpereiro @ inmotion.pt, May 2009
*/
// Include de SimpleMessageSystem library
// REMOVE THE FOLLOWING LINE IF USING WIRING
#include "SimpleMessageSystem.h"
// These are the pins used to connect the 4051 muxer
// for the bend sensors aka Wolverine Midi Glove
#define MUX1_A 11 // Muxer S0
#define MUX1_B 12 // Muxer S1
#define MUX1_C 13 // Muxer S2
#define MUX1_Z 0 // Analog input from muxer
// Sparkfun 16-channel muxer. Connected sensors:
// knees bend sensors
// ADXL330 accelerometer
#define MUX2_A 7 // Muxer S0
#define MUX2_B 8 // Muxer S1
#define MUX2_C 9 // Muxer S2
#define MUX2_D 10 // Muxer S3
#define MUX2_Z 1 // Analog input from muxer
#define SWITCH_A 6 // Digital input for switch button
void setup()
{
// set the pin mode, all muxer's address are OUTPUT
pinMode(MUX1_A, OUTPUT);
pinMode(MUX1_B, OUTPUT);
pinMode(MUX1_C, OUTPUT);
pinMode(MUX2_A, OUTPUT);
pinMode(MUX2_B, OUTPUT);
pinMode(MUX2_C, OUTPUT);
pinMode(MUX2_D, OUTPUT);
// Use pin as sink source (use the internal pushup resistor)
pinMode(SWITCH_A, INPUT);
digitalWrite(SWITCH_A, HIGH);
// Set the serial port baudrate. This value must be the same used in XBee radio
Serial.begin(57600); //Baud set at 9600 for compatibility, CHANGE!
}
void loop()
{
if (messageBuild() > 0) { // Checks to see if the message is complete and erases any previous messages
switch (messageGetChar()) { // Gets the first word as a character
case 'r': // Read pins (analog or digital)
readpins(); // Call the readpins function
break; // Break from the switch
// disable pin write, we don't need to mess with all the sensors plugged on the muxer's
// case 'w': // Write pin
// writepin(); // Call the writepin function
}
}
}
void readpins(){ // Read pins (analog or digital)
switch (messageGetChar()) { // Gets the next word as a character
// disable digital read, makes no sense for this project
/*
case 'd': // READ digital pins
messageSendChar('d'); // Echo what is being read
for (char i=2;i<14;i++) addr="0;">> 1) & 0x01);
digitalWrite(MUX1_C, (addr >> 2) & 0x01);
// Send finger 1, 2 and 3
messageSendInt(analogRead(MUX1_Z));
}
// read the sparkfun 16 input muxer and related analog inputs
for (int addr=0; addr<7;>> 1) & 0x01);
digitalWrite(MUX2_C, (addr >> 2) & 0x01);
digitalWrite(MUX2_D, (addr >> 3) & 0x01);
// Send knee L, R and ADXL330 X Y Z
messageSendInt(analogRead(MUX2_Z));
}
// read the switch and send it as an analog signal
messageSendInt(! digitalRead(SWITCH_A));
messageEnd(); // Terminate the message being sent
}
}
// this function is not used. just here for completeness
/*
void writepin() { // Write pin
int pin;
int state;
switch (messageGetChar()) { // Gets the next word as a character
case 'a' : // WRITE an analog pin
pin = messageGetInt(); // Gets the next word as an integer
state = messageGetInt(); // Gets the next word as an integer
pinMode(pin, OUTPUT); //Sets the state of the pin to an output
analogWrite(pin, state); //Sets the PWM of the pin
break; // Break from the switch
// WRITE a digital pin
case 'd' :
pin = messageGetInt(); // Gets the next word as an integer
state = messageGetInt(); // Gets the next word as an integer
pinMode(pin,OUTPUT); //Sets the state of the pin to an output
digitalWrite(pin,state); //Sets the state of the pin HIGH (1) or LOW (0)
}
}
*/
Created and adapted by: Filipe Valpereiro