Accelerometer powered LED klänning (6 / 7 steg)
Steg 6: Mer programmering
När du har fått behandlingen, beslutar den sista delen vilka värden du använder. Jag valde att använda den xAvg behandlingen.Nu det är bara processen att lägga ett enkelt "om"-uttryck och sedan program lamporna. Var noga med att ange lysdioder överst bredvid accelerometer stiften. Och också till antingen deklarera dem utmatning eller inmatning.
Här är koden jag använde.
Koden bygger på programmering interaktivitet (s. 234-235) av Joshua Noble ***
int flower1 = 5; LED stift
int flower2 = 6;
int flower3 = 9;
int flower4 = 10;
int flower5 = 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 (flower1, produktionen); Ställ in pinModes så att ljuset kommer att stänga av och på.
pinMode (flower2, produktionen);
pinMode (flower3, produktionen);
pinMode (flower4, produktionen);
pinMode (flower5, produktionen);
pinMode (xpin, ingång);
pinMode (ypin, ingång);
pinMode (zpin, ingång);
Serial.BEGIN(9600); initierar kommunikationen med dina datorer
}
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);
om (xAvg < 180) //set if uttalande att reagera beroende på dina avläsningar.
{
digitalWrite (flower1, hög); vänder på belysningen och sedan vänder dem igen
Delay(300);
digitalWrite (flower2, hög);
digitalWrite (flower1, låg);
Delay(300);
digitalWrite (flower3, hög);
digitalWrite (flower2, låg);
Delay(300);
digitalWrite (flower4, hög);
digitalWrite (flower3, låg);
Delay(300);
digitalWrite (flower4, låg);
}
annars om (xAvg > 190 & & xAvg < 195)
{
digitalWrite (flower4, hög);
Delay(500);
digitalWrite (flower4, låg);
Delay(500);
digitalWrite (flower3, hög);
Delay(500);
digitalWrite (flower3, låg);
Delay(500);
digitalWrite (flower2, hög);
Delay(500);
digitalWrite (flower2, låg);
Delay(500);
digitalWrite (flower1, hög);
Delay(500);
digitalWrite (flower1, låg);
Delay(500);
}
annars om (xAvg > 195 & & xAvg < 215)
{
digitalWrite (flower1, hög);
digitalWrite (flower3, hög);
digitalWrite (flower2, låg);
digitalWrite (flower4, låg);
Delay(600);
digitalWrite (flower1, låg);
digitalWrite (flower2, hög);
digitalWrite (flower3, låg);
digitalWrite (flower4, hög);
Delay(600);
}
currentSample ++; Increment provet
}