Stap 2: Code
1) GSR broncode
De eerste was http://cwwang.com/2008/04/13/gsr-reader/ , waarin de code van de Arduino (voor Arduino en verwerking te communiceren) en de code van de verwerking te gebruiken van de responsgegevens van galvanische huid van de geconstrueerde sensoren. Wang's code grafieken in principe van iemands galvanische huid-responswaarde in een bewegende lijndiagram, dat een beetje lijkt op een EKG visueel lezen. Ik wilde een meer abstracte visualisatie van de code zo gebruikte gegevens uit een andere bron voor het genereren van de visuals.
2) visuele broncode
De code waarmee de visuals is uit: http://www.generative-gestaltung.de/P_2_2_1_01
3) mijn Code
A) ARDUINO ONDERSTAANDE CODE
VOID Setup {}
Serial.begin(9600);
}
void loop {}
int a=analogRead(0);
Als (Serial.available() > 0)
{
byte inbyte=Serial.read();
if(inbyte=='A')
{
Serial.write(a);
}
}
}
---------------------------------------------
B) PROCESSING ONDERSTAANDE CODE
u kunt kopiëren/plakken deze code in een nieuwe Processing Schets
Visuele broncode van: http://www.generative-gestaltung.de/P_2_2_1_01
GSR broncode van: http://cwwang.com/2008/04/13/gsr-reader/
importeren van processing.pdf.*;
importeren van java.util.Calendar;
Boole recordPDF = false;
importeren van processing.serial.*;
Seriële myPort;
int hPosition = 1;
float currentReading;
float lastReading;
int count = 0;
int zeroLinePos = 0;
float gsrAverage, prevGsrAverage;
float basislijn = 0;
lange lastFlatLine = 0;
int baselineTimer = 10000; //10 sec
int gsrValue;
int gsrZeroCount = 0;
zweven gsrRange = 0;
int downhillCount = 0;
int uphillCount = 0;
Booleaanse afdaling;
Boolean piek = false;
float peak, vallei;
int de snelheid;
int Noord = 0;
int ten NOORDOOSTEN = 1;
int EAST = 2;
int ten ZUIDOOSTEN = 3;
int zuiden = 4;
int ten ZUIDWESTEN = 5;
int WEST = 6;
int ten NOORDWESTEN = 7;
zweven stepSize = 1;
float diameter = 1;
int richting;
posX, zweven posY;
int minCurrentReading = 1000;
int maxCurrentReading = 0;
VOID Setup {}
grootte (800, 800); //size van venster voor afbeelding
Background(255);
Smooth();
noStroke();
posX = breedte/2;
posY = hoogte/2;
println(Serial.List());
currentReading = 0;
lastReading = 0;
gsrAverage = 0;
vinden van de juiste seriële poort voor uw computer en voer het aantal binnen]
myPort = nieuwe Serial (dit, Serial.list() [8], 9600);
}
VOID serialEvent (seriële myPort) {}
int inByte=myPort.read();
0-255
gsrValue = inByte; //taking waarde verzonden van Arduino
}
VOID draw() {}
calculateGSR();
println ("currentReading =" + currentReading);
kaart van de currentReading te versnellen
Als (currentReading < = 50)
{
currentReading = minCurrentReading;
} else if (currentReading > 1000)
{
currentReading = maxCurrentReading;
}
anders / / geldige zone
{
Als (currentReading < minCurrentReading)
{
minCurrentReading = int (currentReading);
}
Als (currentReading > maxCurrentReading)
{
maxCurrentReading = int(currentReading);
}}
println ("currentReading =" + currentReading + "minCurrentReading =" + minCurrentReading + "maxCurrentReading =" + maxCurrentReading);
currentReading = kaart (currentReading, minCurrentReading, maxCurrentReading, 10, 15000);
snelheid = int (currentReading);
println ("toegewezen waarde =" + snelheid);
vertraging (50), //delay voor stabiliteit
de GSR lezing toe te passen op de snelheid van die de biologische tekening "groeit" station
for (int i = 0; ik < = snelheid; i ++) {}
richting = (int) willekeurige (0, 8);
Als (richting noorden ==) {}
posY-= stepSize;
}
anders als (richting == ten NOORDOOSTEN) {}
posX += stepSize;
posY-= stepSize;
}
anders als (richting Oosten ==) {}
posX += stepSize;
}
anders als (richting == ten ZUIDOOSTEN) {}
posX += stepSize;
posY += stepSize;
}
anders als (richting zuiden ==) {}
posY += stepSize;
}
anders als (richting == ten ZUIDWESTEN) {}
posX-= stepSize;
posY += stepSize;
}
anders als (richting WEST ==) {}
posX-= stepSize;
}
anders als (richting == ten NOORDWESTEN) {}
posX-= stepSize;
posY-= stepSize;
}
Als (posX > breedte) posX = 0;
Als (posX < 0) posX = breedte;
Als (posY < 0) posY = hoogte;
Als (posY > hoogte) posY = 0;
vulling (0, 40);
ellips (posX + stepSize/2, posY + stepSize/2, doorsnede, diameter);
Stuur voor meer bytes ' a'
}
}
VOID calculateGSR () {}
beste vertraging instelling voor gsr lezingen
println(gsrValue);
delay(50);
afbeelding (linkageName, 0, 0);
Als (gsrValue < 15 & & gsrValue > -15) {/ / iets tussen -15 en + 15 wordt beschouwd als nul
Als iemand vingers gedurende 10 seconden presenteert, wat resulteert in 10 0s, gewoon reset
Als (gsrZeroCount > 10) {}
currentReading = 0; //flatline
gsrAverage = 0;
Basislijn = 0;
lastFlatLine=millis();
gsrZeroCount = 0;
println("Reset");
}
gsrZeroCount ++;
} / / einde van de test voor dicht bij nul
else {/ / ggood lezen
currentReading = gsrValue-basislijn;
gsrZeroCount = 0;
}
Als (millis ()-lastFlatLine > baselineTimer) {}
Basislijn = gsrAverage; //if we ten minste 10 seconden lezing sinds de laatste flatline kregen
}
gsrRange = piek-vallei;
gsrAverage=smooth(currentReading,.99,gsrAverage);
int Bovenstebeoordelings = 7;
Als (currentReading-Bovenstebeoordelings > lastReading & & piek == true) {}
bergafwaarts = false;
println(downhillCount);
uphillCount ++;
downhillCount = 0;
punt (hPosition-1, hoogte/2.0-lastReading);
vallei = lastReading;
piek = false;
}
Als (currentReading + Bovenstebeoordelings < lastReading & & piek == false) {}
println(uphillCount);
bergafwaarts = true;
uphillCount = 0;
downhillCount ++;
punt (hPosition-1, hoogte/2.0-lastReading);
piek = lastReading;
piek = true;
}
prevGsrAverage = gsrAverage;
lastReading = currentReading;
Stuur voor meer bytes ' a'
myPort.write('a');
}
int glad (zweven gegevens, filterVal drijven, zweven smoothedVal) {}
Als (filterVal > 1) {/ / check te maken zeker param zijn binnen bereik
filterVal =. 99;
}
else if (filterVal < = 0) {}
filterVal = 0;
}
smoothedVal = (gegevens * (1 - filterVal)) + (smoothedVal * filterVal);
keren smoothedVal (int);
}