Träna: En interaktiv fitness motivation system (10 / 10 steg)
Steg 10: Programmering ditt plagg | LED-Display komplett kod
/*
Träna! Här är den exempelkod används för att skapa ett bärbart system som använder en accelerometer för att räkna antalet steg en användare tar. Systemet lagrar värdet i variabeln och utgångar en visuell display baserat på numret. Nedan är den kod som används. */
#include < SoftwareSerial.h >
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 = A3; / / x-axeln av accelerometern
CONST int ypin = A5; y-axeln
CONST int zpin = A2; / / z-axel (endast på 3-axlig modeller)
antalet millisekunder mellan behandlingarna
int sampleDelay = 500.
den globala "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);
Ange Xbee seriell vara 9600
XBee.BEGIN(9600);
initiera digital stiften som en utgång:
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() {
int sensorValue = 0;
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;
int counter = 0;
läsa värdet från xbee
sensorValue = xbee.read();
seriell port som skriver ut vad var läst för att bekräfta det har mottagits
Serial.Print("; Sensor värde = ");
Serial.write(sensorValue);
PIN-avläsningar för x, y, z:
int x = analogRead(xpin); Delay(1);
lägga till 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);
lägga till 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;
Skriva ut värden
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); / / slå första LED-displayen på (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 på en andra
SoftwareSerial.println("A");
}
annars om ((steps > 5) & & (steg < 10)) {
digitalWrite (led2, hög); / / slå andra LED-displayen på (HIGH är spänningsnivån)
/ / delay(1000); / / vänta på en andra
/ / digitalWrite (led2, låg); / / stänga andra LED-displayen av genom att spänningen låg
/ / delay(1000); / / vänta på en andra
SoftwareSerial.println("B");
}
annars om (steg > 10) {
digitalWrite (led3, hög); / / slå tredje LED-displayen 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 på en andra
SoftwareSerial.println("C");
}
annat {
Return 0; }
fördröjning innan nästa läsning:
Delay(sampleDelay);
}