Träna: En interaktiv fitness motivation system (9 / 10 steg)
Steg 9: Programmering ditt plagg | Accelerometer komplett kod
Nedan är komplett Arduino koden för accelerometern:
/*
Träna!
Här är provet koden används för att skapa ett bärbart system som använder en accelerometer för att räkna antalet
åtgärder en användare tar. Systemet lagrar värdet i variabeln och utgångar en visuell display baserat på den
nummer.
Nedan är den kod som används. */
följande uppsättningar upp variabler och stift används i koden
Följande beskriver stiften används för ljus kuddar
int ledde = 5;
int led2 = 9.
int led3 = 11;
/ / int steg = 7;
Dessa konstanter beskriver stiften används för accelerometern:
CONST int xpin = A5; / / x-axeln av accelerometern
CONST int ypin = A2; / / y-axeln
CONST int zpin = A3; / / z-axel (endast på 3-axlig modeller)
antalet millisekunder mellan behandlingarna
int sampleDelay = 500.
/ / global "steg" variabeln beskriver den variabel som används för att bestämma produktionen av lampor:
int steg = 0;
SoftwareSerial xbee(5,6);
inställningen startar"" allt:
void setup() {
initiera den seriell kommunikationen:
Serial.BEGIN(9600);
/ / Ställ in Xbee seriell vara 9600
XBee.BEGIN(9600);
/ / initiera digital stiften som en utgång och accelerometer stiften som indata:
pinMode ledde (, OUTPUT);
pinMode (led2, produktionen);
pinMode (led3, produktionen);
pinMode (xpin, ingång);
pinMode (ypin, ingång);
pinMode (zpin, ingång);
}
loop rutinen körs för evigt om och om igen:
void loop() {
Accelerometer kod används för att bestämma variabeln "steg"
följande flot variabler som används för att fastställa gränsen för "steg":
float oldy = 0;
float tröskel = 0;
//read värdet från xbee
sensorValue = xbee.read();
//serial port som skriver ut vad var läst för att bekräfta det har mottagits
Serial.Print("; Sensor värde = ");
Serial.write(senorValue);
/ / pin avläsningar för x, y, z:
int x = analogRead(xpin);
Delay(1); //add en liten fördröjning mellan pin avläsningar. Jag läste att du bör göra detta men har inte testat vikten
int y = analogRead(ypin);
Delay(1); //add en liten fördröjning mellan pin avläsningar. Jag läste att du bör göra detta men har inte testat vikten
int z = analogRead(zpin);
/ * zero_G är den behandlingen som vi förväntar oss från sensorn när den upptäcker ingen acceleration. Subtrahera värdet från sensorn läser för att få en skiftade sensor läsa. */
flyta zero_G = 512;
/ * skala är antalet enheter som vi förväntar oss den sensor behandlingen ändra när accelerationen längs en axel ändras av 1G. Dela den skiftade sensor läsa av skala att få acceleration i Gs. * /
flyta skala = 102,3;
för detta projekt, vi inte skriver ut ut "x" värden, men om du vill trycka dem:
Serial.Print (((float) x - zero_G) / skala);
Serial.Print("\t");
för detta projekt, vi skriver ut ut "y" värden, detta bidrar till att avgöra tröskelvärdet:
tröskel = oldy - ((float) y - zero_G) / skala;
Serial.Print ("y =");
Serial.Print (((float) y - zero_G) / skala);
Serial.Print("; tröskel = ");
Serial.println(Threshold);
för detta projekt, vi inte skriver ut ut "z" värden, men om du vill trycka dem:
Serial.Print("\t");
Serial.Print (((float) z - zero_G) / skala); Serial.Print("\n");
om (tröskelvärde > 1.3)
steg ++;
Serial.Print ("steg =");
Serial.Print(Steps);
koden används för att bestämma vilken uppsättning lampor till utdata:
om (steg < = 5) {
digitalWrite (ledde, högt); Aktivera den första LED-displayen (HIGH är spänningsnivån)
/ / delay(1000); / / vänta på en andra
digitalWrite (ledde, låg); Inaktivera första LED-displayen genom att spänningen låg
Delay(1000); vänta en sekund
SoftwareSerial.println("A");
}
annars om ((steps > 5) & & (steg < 10)) {
digitalWrite (led2, hög); vänd den andra LED-skärm på (HIGH är spänningsnivån)
/ / delay(1000); / / vänta på en andra
digitalWrite (led2, låg); Stäng andra LED-displayen genom att göra spänningen låg
Delay(1000); vänta en sekund
SoftwareSerial.println("B");
}
annars om (steg > 10) {
digitalWrite (led3, hög); tur i tredje LED-skärm på (HIGH är spänningsnivån)
/ / delay(1000); / / vänta på en andra
digitalWrite (led3, låg); Inaktivera tredje LED-displayen genom att spänningen låg
Delay(1000); vänta en sekund
SoftwareSerial.println("C");
}
annat {
Return 0;
}
/ / fördröjning innan nästa behandlingen:
Delay(sampleDelay);
}