Tag: Processing

SparkFun RGB and Gesture Sensor e o Processing

12787-01

Aqui está uma ligação simples entre o sensor da SparkFun RGB and Gesture Sensor APDS-9960 e o Processing. É necessário instalar o exemplo que está na página da Sparkfun. Fui testado no processing 2.1 e com uma board arduino uno. Fui também utilizado o exemplo do Arduino que está na página da Sparkfun.

//no arduino
#include <Wire.h>
#include <SparkFun_APDS9960.h>
#define APDS9960_INT    2

SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup() {
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));
  attachInterrupt(0, interruptRoutine, FALLING);

  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }

  if ( apds.enableGestureSensor(true) ) {
    Serial.println(F("Gesture sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during gesture sensor init!"));
  }
}

void loop() {
  if ( isr_flag == 1 ) {
    handleGesture();
    isr_flag = 0;
  }
}

void interruptRoutine() {
  isr_flag = 1;
}

void handleGesture() {
  if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_UP:
        Serial.write("U"); //up
        Serial.write("\n");
        break;
      case DIR_DOWN:
        Serial.write("D"); // down
        Serial.write("\n");
        break;
      case DIR_LEFT:
        Serial.write("L"); //left
        Serial.write("\n");
        break;
      case DIR_RIGHT:
        Serial.write("R"); //right
        Serial.write("\n");
        break;
      case DIR_NEAR:
        Serial.write("N"); //near
        Serial.write("\n");
        break;
      case DIR_FAR:
        Serial.write("F"); //far
        Serial.write("\n");
        break;
      default:
        Serial.write("NULL"); //null
        Serial.write("\n");
    }
  }
}
//no processing
import processing.serial.*; 
Serial porta;
int valor = 0;
int aX=200, aY=200;
int veloci=20;

void setup() {
  size(400, 400);
  porta = new Serial(this, "COM12", 9600);
}

void draw() {
  background(255,255,255);
  while (porta.available () > 0) {
    valor = porta.read();
    if (valor=='R') {   
      println("right");
      aX=aX+veloci;
    }
    if (valor=='L') {   
      println("left");
      aX=aX-veloci;
    }
    if (valor=='U') {   
      println("up");
      aY=aY-veloci;
    }
    if (valor=='D') {   
      println("down");
      aY=aY+veloci;
    }
  }
  ellipse(aX, aY, 50, 50);
}


+infos(sparkfun): LINK

Tags : , , , ,

Send a string from arduino to processing

i would like to send a string with 2 letters and 1 to 3 random numbers from arduino to processing. The work is to send random values from a led RGB conected to an arduino, so in that in a stage in processing i can have a similar image with the same color from the led RGB

//in arduino
int colorRED, colorGREEN, colorBLUE;
int ledRedPin = 9;
int ledGreenPin = 10;
int ledBluePin = 11;

void setup()
{
  Serial.begin(9600);
  pinMode(ledRedPin, OUTPUT);
  pinMode(ledGreenPin, OUTPUT);
  pinMode(ledBluePin, OUTPUT);
}

void loop()
{
  Serial.flush();
  colorRED = random(0, 255);
  colorGREEN = random(0, 255);
  colorBLUE = random(0, 255);
  
  analogWrite(ledRedPin, colorRED);
  analogWrite(ledGreenPin, colorGREEN);
  analogWrite(ledBluePin, colorBLUE);
  delay(200);

  Serial.print("rd");
  Serial.print(colorRED);
  Serial.print("\n");
  delay(200);
  Serial.print("gr");
  Serial.print(colorGREEN);
  Serial.print("\n");
  delay(200);
  Serial.print("bl");
  Serial.print(colorBLUE);
  Serial.print("\n");
  delay(200);
}



//in processing
import processing.serial.*; 
Serial porta;
String sinal_letra;
String sinal_tipo;
int valor_cor, valor_cor1, valor_cor2, valor_cor3;
int totalc;

void setup() {
  size(400, 400);
  porta = new Serial(this, "COM50", 9600);
  porta.clear();
}

void draw() {
  desenha_led();
}

void desenha_led() {
  //a desenhar um led
  background(valor_cor1, valor_cor2, valor_cor3);
}

void serialEvent(Serial porta) {
  sinal_letra = porta.readStringUntil('\n');
  if (sinal_letra != null) {

    sinal_letra = trim(sinal_letra);
    totalc = sinal_letra.length();
    sinal_tipo = sinal_letra.substring(0, 2);
    valor_cor =  parseInt(sinal_letra.substring(2, totalc));
    println(sinal_tipo+"-"+valor_cor);

    if (sinal_tipo.equals("rd")) {
      porta.clear();
      valor_cor1=valor_cor;
    }
    if (sinal_tipo.equals("gr")) {
      porta.clear();
      valor_cor2=valor_cor;
    }
    if (sinal_tipo.equals("bl")) {
      porta.clear();
      valor_cor3=valor_cor;
    }
  }
}

Tags : , , , ,

Learning Processing

os ficheiros de apoio do livro de Daniel Shiffman… “Learning Processing”

+infos: https://github.com/shiffman/LearningProcessing

Tags :