STM32Butterfly: współpraca z 3-osiowym czujnikiem przyspieszenia MEMS (LIS35D)
Do odczytu wartości przyspieszeń służy poniższa funkcja:
void LIS35_GetPosition(signed char * x, signed char * y, signed char * z)
{
SPI_CS_Enable();
SPI_Transmit(LIS35_READ|LIS35_ADDR_INC|LIS35_REG_OUTX);
*x=SPI_Receive();
SPI_Receive();
*y=SPI_Receive();
SPI_Receive();
*z=SPI_Receive();
SPI_CS_Disable();
}
Program główny
Aplikacja umożliwia wyświetlenie wartości przyspieszeń na dwa sposoby. Pierwsza wersja wyświetla trzy paski, których długość jest proporcjonalna do odczytanego przyspieszenia. Paski rysowane są tylko w przypadku, gdy któraś z wartości przyspieszenia różni się o co najmniej 3 od poprzedniej wartości, dzięki temu unikamy migotania spowodowanego częstym odrysowywaniem pasków.
while(1)
{
// Read KAmodMEMS orientation
LIS35_GetPosition(&x, &y, &z);
if (abs(xo - x) > 3 || abs(yo - y) > 3 || abs(zo - z) > 3)
{
DrawBar(x, 0, 20, 0x3);
DrawBar(y, 40, 60, 0x1C);
DrawBar(z, 80, 100, 0xE0);
xo = x; yo = y; zo = z;
}
}
Druga wersja wyświetla siatkę sześcianu, sześcian jest obrócony w trzech osiach o kąty proporcjonalne do odczytanych przyspieszeń.
while(1)
{
// Read KAmodMEMS orientation
LIS35_GetPosition(&x, &y, &z);
// If MEMS moved then redraw cube
if (abs(xo - x) > 3 || abs(yo - y) > 3 || abs(zo - z) > 3)
{
// Erase previous cube
DrawCube(xo, yo, zo, 0x0);
// Draw new cube
DrawCube(x, y, z, 0xFF);
// Store old orientation
xo = x; yo = y; zo = z;
}
}

Koniec ery defiladowej. Cykl życia technologii na froncie skrócił się do kilku tygodni
Czym jest czytnik e-booków i jak działa?
O suwerenności Europy mówią gen. Sławomir Żakowski, gen. Paweł Bielawny, dr. Jacek Pawlak, Adam Cudny i dr Daniel Więzik 




