Étape 2: Code
1) Code Source GSR
Le premier était http://cwwang.com/2008/04/13/gsr-reader/ , qui inclut le code de l’Arduino (pour Arduino et Processing communiquer) et le code de traitement à utiliser les données psychogalvanique des capteurs construites. Code de Wang essentiellement graphiques valeur psychogalvanique une personne dans un mouvement graphique linéaire, qui ressemble un peu à un électrocardiogramme lire visuellement. Je voulais avoir une visualisation plus abstraite du code données ainsi utilisés d’une autre source pour générer les visuels.
2) Code Source visual
Le code pour créer les visuels provient de : http://www.generative-gestaltung.de/P_2_2_1_01
3) mon Code
A) ARDUINO CODE CI-DESSOUS
void setup() {}
Serial.Begin(9600) ;
}
void loop() {}
int a=analogRead(0) ;
Si (Serial.available() > 0)
{
inbyte=Serial.read() octet ;
if(inbyte=='a')
{
Serial.Write(a) ;
}
}
}
---------------------------------------------
B) TRAITEMENT CODE CI-DESSOUS
vous pouvez copier/coller ce code dans une nouvelle esquisse de traitement
Code source visuelle de : http://www.generative-gestaltung.de/P_2_2_1_01
Le code source du GSR: http://cwwang.com/2008/04/13/gsr-reader/
Import processing.pdf.* ;
import java.util.Calendar ;
recordPDF booléen = false ;
Import processing.serial.* ;
Serial myPort ;
int hPosition = 1 ;
flotteur currentReading ;
float lastReading ;
int count = 0 ;
int zeroLinePos = 0 ;
flotteur gsrAverage, prevGsrAverage ;
Base de flotteur = 0 ;
long lastFlatLine = 0 ;
int baselineTimer = 10000 ; //10 sec
int gsrValue ;
int gsrZeroCount = 0 ;
float gsrRange = 0 ;
int downhillCount = 0 ;
int uphillCount = 0 ;
descente booléenne ;
a atteint un sommet de Boolean = false ;
PIC de flotteur, vallée ;
int Vitesse ;
int Nord = 0 ;
int au nord-est = 1 ;
int est = 2 ;
int au sud-est = 3 ;
int Sud = 4 ;
int au sud-ouest = 5 ;
int Ouest = 6 ;
int = Nord-Ouest 7 ;
flotteur stepSize = 1 ;
diamètre flotteur = 1 ;
direction de l’int ;
flotter posX, posY ;
int minCurrentReading = 1000 ;
int maxCurrentReading = 0 ;
void setup() {}
taille (800, 800); //size de la fenêtre d’image
Background(255) ;
Smooth() ;
noStroke() ;
posX = largeur/2 ;
Bouquet = hauteur/2 ;
println(Serial.List()) ;
currentReading = 0 ;
lastReading = 0 ;
gsrAverage = 0 ;
trouver la voie droite de série de votre ordinateur et entrez le nombre à l’intérieur de]
myPort = nouvelle série (ce, Serial.list() [8], 9600) ;
}
void serialEvent (Serial myPort) {}
int inByte=myPort.read() ;
0-255
gsrValue = inByte ; //taking valeur envoyée de Arduino
}
{} void draw()
calculateGSR() ;
println ("currentReading =" + currentReading) ;
carte currentReading pour accélérer
Si (currentReading < = 50)
{
currentReading = minCurrentReading ;
} ElseIf (currentReading > 1000)
{
currentReading = maxCurrentReading ;
}
else / / valide zone
{
Si (currentReading < minCurrentReading)
{
minCurrentReading = int (currentReading) ;
}
Si (currentReading > maxCurrentReading)
{
maxCurrentReading = int(currentReading) ;
}}
println ("currentReading =" + currentReading + "minCurrentReading =" + minCurrentReading + "maxCurrentReading =" + maxCurrentReading) ;
currentReading = carte (currentReading, minCurrentReading, maxCurrentReading, 10, 15000) ;
Vitesse = int (currentReading) ;
println ("mappé valeur =" + vitesse) ;
retard (50); //delay de stabilité
appliquant la lecture GSR sur disque à la vitesse de ce dessin organique « grandit »
pour (int i = 0; i < = vitesse; i ++) {
direction = (int) aléatoire (0, 8) ;
Si (direction == nord) {}
Bouquet = stepSize ;
}
else if (direction == au nord-est) {}
posX += stepSize ;
Bouquet = stepSize ;
}
else if (direction == EAST) {}
posX += stepSize ;
}
else if (direction == au sud-est) {}
posX += stepSize ;
posY += stepSize ;
}
else if (direction == sud) {}
posY += stepSize ;
}
else if (direction == au sud-ouest) {}
posX = stepSize ;
posY += stepSize ;
}
else if (direction == ouest) {}
posX = stepSize ;
}
else if (direction == au nord-ouest) {}
posX = stepSize ;
Bouquet = stepSize ;
}
Si (posX > largeur) posX = 0 ;
Si (posX < 0) posX = width ;
Si posY (posY < 0) = height ;
Si (bouquet > hauteur) bouquet = 0 ;
remplissage (0, 40) ;
ellipse (posX + stepSize/2, posY + stepSize/2, diamètre, diamètre) ;
Envoyez « a » pour plus d’octets
}
}
void calculateGSR () {}
meilleur réglage de retard pour les lectures de gsr
println(gsrValue) ;
Delay(50) ;
image (myMovie, 0, 0) ;
Si (gsrValue < 15 & & gsrValue > -15) {/ / quelque chose entre -15 et + 15 est considérée comme nulle
Si quelqu'un lève les doigts pendant 10 secondes, ce qui entraîne 10 0 s, remise à zéro juste
Si (gsrZeroCount > 10) {}
currentReading = 0; //flatline
gsrAverage = 0 ;
Base = 0 ;
lastFlatLine=millis() ;
gsrZeroCount = 0 ;
println("Reset") ;
}
gsrZeroCount ++ ;
} / / fin de test pour proche de zéro
else {/ / lecture d’électroisolante
currentReading = gsrValue-point de départ ;
gsrZeroCount = 0 ;
}
Si (millis ()-lastFlatLine > baselineTimer) {}
Base = gsrAverage ; //if nous avons obtenu au moins 10 secondes de lecture depuis la dernière flatline
}
gsrRange = pic-vallée ;
gsrAverage=smooth(currentReading,.99,gsrAverage) ;
Ahmed int = 7 ;
Si (currentReading-Ahmed > lastReading & & pointus == true) {}
descente = false ;
println(downhillCount) ;
uphillCount ++ ;
downhillCount = 0 ;
un point (hPosition-1, hauteur/2.0-lastReading) ;
la vallée = lastReading ;
a atteint un sommet = false ;
}
Si (currentReading + Ahmed < lastReading & & pointus == false) {}
println(uphillCount) ;
descente = true ;
uphillCount = 0 ;
downhillCount ++ ;
un point (hPosition-1, hauteur/2.0-lastReading) ;
PIC = lastReading ;
a atteint un sommet = true ;
}
prevGsrAverage = gsrAverage ;
lastReading = currentReading ;
Envoyez « a » pour plus d’octets
myPort.write('a') ;
}
int lisse (float données, float filterVal, float smoothedVal) {}
Si (filterVal > 1) {/ / vérifier sont de faites sûr param portée
filterVal =. 99 ;
}
ElseIf (filterVal < = 0) {}
filterVal = 0 ;
}
smoothedVal = (données * (1 - filterVal)) + (smoothedVal * filterVal) ;
Return (int) smoothedVal ;
}