Graphene/Mediaplayer controller

Da raspibo.
Jump to navigation Jump to search

Media player controller

Altra applicazione sempre mediante l'uso di Teensy che può essere visto oltre che come terminale seriale anche come dispositivo HID e quindi simulare mouse, tastiera e joystick.

In questo caso il test sfrutta la libreia capsense di Arduino che ha il vantaggio di poter essere calibrata settando alcuni valori.

#include <CapacitiveSensor.h>
 
/*
   Simple example of interaction between Teens 3.1 and graphene film used as capacitive touch sensor
   set uotput as serial+keyboard+mouse+joystick
   Based on CapacitiveSensor library: http://playground.arduino.cc/Main/CapacitiveSensor
   Set the correct number of samples to measure time
*/
 
 
CapacitiveSensor   Play_Pause = CapacitiveSensor(20, 15);
CapacitiveSensor   Inc_Volume = CapacitiveSensor(20, 16);
CapacitiveSensor   Dec_Volume = CapacitiveSensor(20, 17);
 
int val;
long calc;
long tasto_piu;
long tasto_meno;
const int ledPin_r = 21;
const int ledPin_g = 5;
const int ledPin_b = 6;
const long soglia_tasto_piu = 1800;
const long soglia_tasto_meno = 1800;
const int inc = 100;
 
 
void setup()
{
  Serial.begin(9600);
}
 
void loop()
{
  long start = millis();
  long time1 =  Play_Pause.capacitiveSensor(250);     //Tune with correct values
  long time2 =  Inc_Volume.capacitiveSensor(100);     //Tune with correct values
  long time3 =  Dec_Volume.capacitiveSensor(250);     //Tune with correct values
 
  Serial.print((millis() - start) / 10);
  Serial.print("\t");
  Serial.print(time1);
  Serial.print("\t");
  Serial.print(time2);
  Serial.print("\t");
  Serial.print(time3);
  Serial.print("\t");
  if (time1 > 3000) {                                 //Change to detect best values
    Serial.print("p1");
    Keyboard.set_media(KEY_MEDIA_VOLUME_DEC);
    Keyboard.send_now();
    Keyboard.set_media(0);
    Keyboard.send_now();
  }
  Serial.print("\t");
  if (time2 > 11000) {                                 //Change to detect best values
    Serial.print("p2");
    Keyboard.set_media(KEY_MEDIA_PLAY_PAUSE);
    Keyboard.send_now();
    Keyboard.set_media(0);
    Keyboard.send_now();
  }
  Serial.print("\t");
  if (time3 > 5000) {                               //Change to detect best values
    Serial.print("p3");
    Keyboard.set_media(KEY_MEDIA_VOLUME_INC);
    Keyboard.send_now();
    Keyboard.set_media(0);
    Keyboard.send_now();
  }
  Serial.print("\t");
 
  tasto_piu = touchRead(22);
  tasto_meno = touchRead(23);

  if (tasto_piu > soglia_tasto_piu && val <= 3072) {
    val = val + inc;
    //Serial.print("tasto +");
  }
  Serial.print("\t");  
  if (tasto_meno > soglia_tasto_meno && val >= 0) {
    val = val - inc;
    //Serial.print("tasto -");
  }
  Serial.print("\t");
  if (val > 2048) {
    analogWrite(ledPin_g, val - 2048);
  } else {
    analogWrite(ledPin_g, 0);
  }
  if (val > 1024) {
    analogWrite(ledPin_b, val - 1024);
  } else {
    analogWrite(ledPin_b, 0);
  }
  analogWrite(ledPin_r, val);
  Serial.print(val);
  Serial.print("\t");
  Serial.print(tasto_piu);
  Serial.print("\t");
  Serial.print(tasto_meno);
  Serial.println("");
  delay(100);
}

Con questo esempio possiamo controllare un media player come Vlc pilotando i tasti play e pause con un sensore ed alzando ed abbassando il volume con altri due sensori.

Per questa applicazione può essere usata anche la pellicola più trasparente variando i valori in capacitiveSensor() e settando oppurtunamente i tempi.

Codice per entrambi gli esperimenti

Questo semplicemente il codice che comprende entrambi gli esperimenti precedenti con qualche aggiustamento:

#include <CapacitiveSensor.h>

/*
   Simple example of interaction between Teens 3.1 and graphene film used as capacitive touch sensor
   set uotput as serial+keyboard+mouse+joystick
   Based on CapacitiveSensor library: http://playground.arduino.cc/Main/CapacitiveSensor
   Set the correct number of samples to measure time
*/


CapacitiveSensor   Play_Pause = CapacitiveSensor(20, 15);
CapacitiveSensor   Inc_Volume = CapacitiveSensor(20, 16);
CapacitiveSensor   Dec_Volume = CapacitiveSensor(20, 17);

int val;
long calc;
long tasto_piu;
long tasto_meno;
const int ledPin_r = 21;
const int ledPin_g = 5;
const int ledPin_b = 6;
const long soglia_tasto_piu = 2400;
const long soglia_tasto_meno = 2400;
const int inc = 100;


void setup()
{
  Serial.begin(9600);
}

void loop()
{
  long start = millis();
  long time1 =  Play_Pause.capacitiveSensor(250);     //Tune with correct values
  long time2 =  Inc_Volume.capacitiveSensor(100);     //Tune with correct values
  long time3 =  Dec_Volume.capacitiveSensor(250);     //Tune with correct values

  Serial.print((millis() - start) / 10);
  Serial.print("\t");
  Serial.print(time1);
  Serial.print("\t");
  Serial.print(time2);
  Serial.print("\t");
  Serial.print(time3);
  Serial.print("\t");
  if (time1 > 3000) {                                 //Change to detect best values
    Serial.print("p1");
    Keyboard.set_media(KEY_MEDIA_VOLUME_DEC);
    Keyboard.send_now();
    Keyboard.set_media(0);
    Keyboard.send_now();
  }
  Serial.print("\t");
  if (time2 > 11000) {                                 //Change to detect best values
    Serial.print("p2");
    Keyboard.set_media(KEY_MEDIA_PLAY_PAUSE);
    Keyboard.send_now();
    Keyboard.set_media(0);
    Keyboard.send_now();
  }
  Serial.print("\t");
  if (time3 > 3000) {                               //Change to detect best values
    Serial.print("p3");
    Keyboard.set_media(KEY_MEDIA_VOLUME_INC);
    Keyboard.send_now();
    Keyboard.set_media(0);
    Keyboard.send_now();
  }
  Serial.print("\t");

  tasto_piu = touchRead(22);
  //Serial.print(val);
  //Serial.print("\t");
  //Serial.print(tasto_piu);
  //Serial.print("\t");
  tasto_meno = touchRead(23);
  //Serial.println(tasto_meno);
  if (tasto_piu > soglia_tasto_piu && val <= 3072) {
    val = val + inc;
  }
  if (tasto_meno > soglia_tasto_meno && val >= 0) {
    val = val - inc;
  }
  if (val > 2048) {
    analogWrite(ledPin_g, val - 2048);
  } else {
    analogWrite(ledPin_g, 0);
  }
  if (val > 1024) {
    analogWrite(ledPin_b, val - 1024);
  } else {
    analogWrite(ledPin_b, 0);
  }
  analogWrite(ledPin_r, val);
  Serial.println("");
  delay(100);
}