Accelerometer powered LED klänning (5 / 7 steg)
Steg 5: programmering
Nu här är den svåra biten. För att verkligen få exakt accelerometer avläsningar måste du antingen bära kjol eller använda ditt projekt på sättet har det avsett att användas. Annars får du helt värdelös avläsningar. Jag använde Arduino som programmering plattform. Så satte på kjolen, ansluta den till datorn och dansa runt källaren bära din laptop i en minut eller två.
Få avläsningar måste du ha lagt upp koden till Lilypad och sedan vände på den seriella bildskärmen (förstoringsglaset i det övre högra hörnet).
Här är koden jag använde. Det genomsnitt accelerometer avläsningarna för att göra det mer stabilt.
Koden bygger på programmering interaktivitet (s. 234-235) av Joshua Noble ***
int led1 = 5;
int led2 = 6;
int led3 = 9;
int led4 = 10;
int led5 = 11;
int xpin = A3; x-axeln av accelerometern
int ypin = A4; y-axeln
int zpin = A5; z-axel (endast på 3-axlig modeller)
int xVal = 0;
int yVal = 0;
int zVal = 0;
int xVals [8]. en matris med den senaste 8 x koordinaten avläsningar
int yVals [8]. en matris med de sista 8 y koordinaten avläsningar
int zVals [8]. en matris av de sista 8 z samordna avläsningarna
int xAvg = 0; x-värde vi ska läsa så småningom
int yAvg = 0;
int zAvg = 0;
int currentSample = 0;
void setup()
{
pinMode (led1, produktionen);
pinMode (led2, produktionen);
pinMode (led3, produktionen);
pinMode (led4, produktionen);
pinMode (led5, produktionen);
pinMode (xpin, ingång);
pinMode (ypin, ingång);
pinMode (zpin, ingång);
Serial.BEGIN(9600);
}
void loop()
{
Vi använder currentSample som ett index i matrisen och ökar värdet på den
slutet av den huvudsakliga loop)(), så se om vi måste återställa den på den
början av slingan
om (currentSample == 8) {
currentSample = 0;
}
xVal = analogRead(xpin);
yVal = analogRead(ypin);
zVal = analogRead(zpin);
Här lagras 8 värden. I grund och botten lagrar den
de sista 8 värden Läs och genomsnitt det ständigt (senare i koden).
xVals [currentSample] = xVal;
yVals [currentSample] = yVal;
zVals [currentSample] = zVal;
här är där värdena läggs så att du
så småningom få de senast 8 värdena
för (int jag = 0; jag < 8; i ++) {
xAvg += xVals [i];
yAvg += yVals [i];
zAvg += zVals [i];
}
Detta kommer att läsa de första 7 cyklerna, men som inte kommer att göra en enorm skillnad
såvida du inte att läsa värdet från accelerometern direkt
Beräkna medelvärdet
xAvg = (xAvg / 20);
yAvg = (yAvg / 20);
zAvg = (zAvg / 20);
Skriva ut genomsnittet
Serial.Print(xAvg);
Serial.Print("");
Serial.Print(yAvg);
Serial.Print("");
Serial.println(zAvg);
Delay(100);
currentSample ++; Increment provet
om (xAvg > 570 & & xAvg < 590)
{
digitalWrite (led1, hög);
Delay(100);
digitalWrite (led1, låg);
Delay(100);
digitalWrite (led2, hög);
Delay(100);
digitalWrite (led2, låg);
Delay(100);
digitalWrite (led3, hög);
Delay(100);
digitalWrite (led3, låg);
}
}