Texting Mat

by lushahuang in Circuits > Arduino

7679 Views, 37 Favorites, 0 Comments

Texting Mat

DSC_5496副本.jpg
secret mat2_副本.gif
 
Lusha and May created a "Text-Mat”. This surface can allow the user to write and send messages using one’s feet. This text-mat is designed to send secret messages during meetings or classes. The design utilizes conductive fabric and thread, as well as a flora-board. The program contains 7 preset sentences. The user can press a button to select the appropriate sentence and then a final button to send.

Please enjoy the video:
https://vimeo.com/81472818

Text-Mat

DSC_5432.JPG
Lusha and May created a "Text-Mat”. This surface can allow the user to write and send messages using one’s feet. This text-mat is designed to send secret messages during meetings or classes. The design utilizes conductive fabric and thread, as well as a flora-board. The program contains 7 preset sentences. The user can press a button to select the appropriate sentence and then a final button to send.

1.JPG
2.JPG
 Next, we cut the wool, felt and conductive fabrics to the desired sizes.

3.JPG
3. We then used the sewing machine to sew the fabrics together.

4-.JPG
4.JPG
. 4. Next, we sewed the conductive thread to make a circuit with the conductive fabric.

5.JPG
5. Then we ironed the edges flat.

6.JPG
6. Then we connected the flora board into the circuit.

DSC_5479.JPG
7. We prepared the following code for the flora: _________

DSC_5466.JPG
8. We then connected the smart phone and Arduino with the USB connection.

Code

The code: 
*/
#include

CapPin cPin_10 = CapPin(10);    // read pin 10 (D10 on Flora) - connect to NES B
CapPin cPin_9  = CapPin(9);     // read pin 9 (D9 on Flora)   - connect to NES A
CapPin cPin_6  = CapPin(6);     // read pin 6 (D6 on Flora)   - connect to NES Start
CapPin cPin_12 = CapPin(12);    // read pin 12 (D12 on Flora) - connect to NES Select
CapPin cPin_1  = CapPin(1);     // read pin 1 (TX on Flora)   - connect to NES right
CapPin cPin_0  = CapPin(0);     // read pin 0 (RX on Flora)   - connect to NES up
CapPin cPin_2  = CapPin(2);     // read pin 2 (SDA on Flora)  - connect to NES left
CapPin cPin_3  = CapPin(3);     // read pin 3 (SCL on Flora)  - connect to NES down

CapPin pins[] = {cPin_10, cPin_9, cPin_6, cPin_12, cPin_1, cPin_0, cPin_2, cPin_3};
// check http://arduino.cc/en/Reference/KeyboardModifiers for more info on unique keys

// WASD D-pad, select = Return, start = Space, LeftButton = z, RightButton = x
//char Keys[] =   {  'x',    'z',    ' ',     KEY_RETURN,    'd',     'w',    'a',    's'};

// arrow D-pad, select = Return, start = Space, LeftButton = b, RightButton = a
//char Keys[] =   {  'a',    'b',    ' ',     KEY_RETURN, KEY_RIGHT_ARROW, KEY_UP_ARROW, KEY_LEFT_ARROW, KEY_DOWN_ARROW};

char* Keys[] =   {"hello", "winkyface", "you there?", "hi", "I'm bored", "let's meet for lunch", "zzz", "bye"};

boolean currentPressed[] = {false, false, false, false, false, false, false, false};

// Capactive touch threashhold, you might want to mess with this if you find its too
// sensitive or not sensitive enough
#define THRESH 500

float smoothed[8] = {0,0,0,0,0,0,0,0};

void setup()
{
  //while (!Serial)
  Serial.begin(115200);
  Serial.println("start");
  Keyboard.begin();
}


void loop()                   
{
  for (int i=0;i<8;i++) {
    delay(1);
    long total1 = 0;
    long start = millis();
    long total =  pins[i].readPin(2000);

    // check if we are sensing that a finger is touching the pad
    // and that it wasnt already pressed
    if ((total > THRESH) && (! currentPressed[i])) {
      Serial.print("Key pressed #"); Serial.print(i);
      Serial.print(" ("); Serial.print(Keys[i]); Serial.println(")");
      currentPressed[i] = true;

      Keyboard.println(Keys[i]); //sends string as keyboard presses, ending with the ENTER key
    }
    else if ((total <= THRESH) && (currentPressed[i])) {
      // key was released (no touch, and it was pressed before)
      Serial.print("Key released #"); Serial.print(i);
      Serial.print(" ("); Serial.print(Keys[i]); Serial.println(")");
      currentPressed[i] = false;
     
      Keyboard.releaseAll();
    }
   
/*
    // simple lowpass filter to take out some of the jitter
    // change parameter (0 is min, .99 is max) or eliminate to suit
    smoothed[i] = smooth(total, .8, smoothed[i]);  

    Serial.print(i); Serial.print(": ");
    Serial.print( millis() - start);      // time to execute in mS
    Serial.print("ms \t");
    Serial.print(total);                  // raw total
    Serial.print("\t->\t");
    Serial.println((int) smoothed[i]);       // smoothed
*/
    delay(5);
  }
}

// simple lowpass filter
// requires recycling the output in the "smoothedVal" param
int smooth(int data, float filterVal, float smoothedVal){

  if (filterVal > 1){      // check to make sure param's are within range
    filterVal = .999999;
  }
  else if (filterVal <= 0){
    filterVal = 0;
  }

  smoothedVal = (data * (1 - filterVal)) + (smoothedVal  *  filterVal);

  return (int)smoothedVal;
}