Paso 10: Programación de la prenda | Código completo de la exhibición de LED
/*
Resolver! Aquí está el código utilizado para crear un sistema usable que un acelerómetro se utiliza para contar el número de pasos que un usuario toma. El sistema almacena este valor en una variable y una exposición visual basada en el número de las salidas. A continuación es el código utilizado. */
#include < SoftwareSerial.h >
a continuación establece las variables y los pernos utilizados en el código:
las siguientes describen los pasadores utilizados para las almohadillas de luz:
int led = 5;
int led2 = 9;
led3 int = 11;
pasos de int = 7;
estas constantes describen los pines utilizados para el acelerómetro:
const int xpin = A3; / / eje x del acelerómetro
const int ypin = A5; eje y
const int zpin = A2; / / eje z (sólo en modelos de 3-ejes)
número de milisegundos entre las lecturas
int sampleDelay = 500;
la variable global "pasos" describe la variable utilizada para determinar la salida de luces:
pasos de int = 0;
SoftwareSerial xbee(5,6);
la configuración «comienza» todo:
void setup() {}
inicializar la comunicación serial:
Serial.Begin(9600);
configurar lo Xbee serie a 9600
XBee.Begin(9600);
Inicializa los pines digitales como salida:
pinMode (led, salida);
pinMode (led2, salida);
pinMode (led3, salida);
pinMode (xpin, entrada);
pinMode (ypin, entrada);
pinMode (zpin, entrada);
}
una y otra vez funciona para siempre la rutina bucle:
void loop() {}
int sensorValue = 0;
código de acelerómetro para determinar la variable 'pasos'
se utilizan las siguientes variables de flot para ayudar a determinar el umbral de "pasos":
oldy flotador = 0;
umbral de flotador = 0;
int contador = 0;
leer el valor de xbee
sensorValue = xbee.read();
puerto serie que imprime a lo que fue leído para confirmar que ha recibido
Serial.Print("; Valor del sensor = ");
Serial.Write(sensorValue);
perno de lecturas para x, y, z:
int x = analogRead(xpin); Delay(1);
Añadir un pequeño retardo entre lecturas de pin. He leído que debería hacer esto pero no han probado la importancia
int y = analogRead(ypin); Delay(1);
Añadir un pequeño retardo entre lecturas de pin. He leído que debería hacer esto pero no han probado la importancia
int z = analogRead(zpin);
/ * zero_G es la lectura que esperamos del sensor cuando no detecta ninguna aceleración. Reste este valor del sensor de lectura para obtener un sensor cambiado de puesto de lectura. */
Float zero_G = 512;
/ * escala es el número de unidades que esperamos que la lectura del sensor para cambiar cuando cambia la aceleración a lo largo de un eje de 1G. Dividir el sensor cambiado de puesto de lectura en la escala para obtener aceleración en Gs. * /
escala de flotador = 102.3;
Imprimir valores
para este proyecto, no estamos imprimiendo los valores de 'x', pero si quieres imprimir:
Serial.Print (((float) x - zero_G) / escala);
Serial.Print("\t");
para este proyecto, estamos imprimiendo los valores de 'y', esto le ayudará a determinar el umbral:
umbral = oldy - ((float) y - zero_G) / escala;
Serial.Print ("y =");
Serial.Print (((float) y - zero_G) / escala);
Serial.Print("; umbral = ");
Serial.println(THRESHOLD);
para este proyecto, no estamos imprimiendo los valores de 'z', pero si quieres imprimir:
Serial.Print("\t");
Serial.Print (((float) z - zero_G) / escala);
Serial.Print("\n");
Si (umbral > 1.3)
pasos ++;
Serial.Print ("pasos =");
Serial.Print(STEPS);
código utilizado para determinar qué conjunto de luces a la salida:
Si (pasos < = 5) {}
digitalWrite (led, alto); / / enciende la primera pantalla de LED (alto es el nivel de voltaje)
/ / delay(1000); / / espera por un segundo
//digitalWrite (led, LOW); / / apagará la primera pantalla de LED por lo que la tensión baja
/ / delay(1000); / / espera por un segundo
SoftwareSerial.println("A");
}
else if ((steps > 5) & & (pasos < 10)) {}
digitalWrite (led2, HIGH); / / enciende el segundo LED pantalla (alto es el nivel de voltaje)
/ / delay(1000); / / espera por un segundo
/ / digitalWrite (led2, LOW); / / apagar la pantalla de LED segundo haciendo que la tensión baja
/ / delay(1000); / / espera por un segundo
SoftwareSerial.println("B");
}
else if (pasos > 10) {}
digitalWrite (LED 3, alto); / / enciende el tercer display (alto es el nivel de voltaje)
/ / delay(1000); / / espera por un segundo
//digitalWrite (led3, LOW); / / apagar la pantalla de LED tercer haciendo que la tensión baja
/ / delay(1000); / / espera por un segundo
SoftwareSerial.println("C");
}
Else {}
return 0; }
retardo antes de la lectura siguiente:
Delay(sampleDelay);
}