Для начала работы установим библиотеку Adafruit LIS3DH.
Датчик LIS3DH в ATWatch подключен по шине I2C и имеет адрес 0x19.
Загрузим стандартный скетч. Файл->Примеры->Adafruit lis3dh acceldemo.
Датчик LIS3DH имеет 10 режимов работы скорости передачи данных. Установить скорость передачи данных можно с помощью функции setDataRate().
*LIS3DH_DATARATE_400_HZ
*LIS3DH_DATARATE_200_HZ
*LIS3DH_DATARATE_100_HZ
*LIS3DH_DATARATE_50_HZ
*LIS3DH_DATARATE_25_HZ
*LIS3DH_DATARATE_10_HZ
*LIS3DH_DATARATE_1_HZ
*LIS3DH_DATARATE_POWERDOWN
*LIS3DH_DATARATE_LOWPOWER_1K6HZ
*LIS3DH_DATARATE_LOWPOWER_5KHZ
По такому же принципу можно установить один из 4 диапазонов работы датчика функцией setRange().
*LIS3DH_RANGE_16_G
*LIS3DH_RANGE_8_G
*LIS3DH_RANGE_4_G
*LIS3DH_RANGE_2_G
#include <SPI.h>
#include <Adafruit_LIS3DH.h>
#include <Adafruit_Sensor.h>
Adafruit_LIS3DH lis = Adafruit_LIS3DH();
void setup(void)
{
Serial.begin(9600);//Запускаем Serial порт
Serial.println("LIS3DH test!");
if (! lis.begin(0x19)) //Инициализируем датчик по адресу 0x19
{
Serial.println("Couldnt start");//Датчик не запустился
while (1);//Останавливаем программу
}
Serial.println("LIS3DH found!");//Датчик запустился
lis.setRange(LIS3DH_RANGE_4_G); //Устанавливаем диапазон работы
Serial.print("Range = "); Serial.print(2 << lis.getRange());//Выводим текущий диапазон
Serial.println("G");
}
void loop()
{
lis.read(); //Считываем данные осей X, Y, Z
//Выводим "сырые" данные
Serial.print("X: "); Serial.print(lis.x);
Serial.print(" \tY: "); Serial.print(lis.y);
Serial.print(" \tZ: "); Serial.print(lis.z);
//Приводим данные в порядок
sensors_event_t event;
lis.getEvent(&event);
//Выводим обработанные данные
Serial.print("\t\tX: "); Serial.print(event.acceleration.x);
Serial.print(" \tY: "); Serial.print(event.acceleration.y);
Serial.print(" \tZ: "); Serial.print(event.acceleration.z);
Serial.println(" m/s^2 ");
Serial.println();
delay(200);
}
Рассмотрим следующий пример. Файл->Примеры->Adafruit lis3dh tapdemo.
#include <Wire.h>
#include <Adafruit_LIS3DH.h>
#include <Adafruit_Sensor.h>
Adafruit_LIS3DH lis = Adafruit_LIS3DH();
//Настройка чувствительности
#define CLICKTHRESHHOLD 80
void setup(void) {
Serial.begin(9600);
Serial.println("Adafruit LIS3DH Tap Test!");
if (! lis.begin(0x19)) //Инициализируем датчик по адресу 0x19
{
Serial.println("Couldnt start");//Датчик не запустился
while (1);//Останавливаем программу
}
Serial.println("LIS3DH found!");//Датчик запустился
lis.setRange(LIS3DH_RANGE_2_G); //Устанавливаем диапазон работы
Serial.print("Range = "); Serial.print(2 << lis.getRange());//Выводим текущий диапазон
Serial.println("G");
// 0 = отключить обнаружение кликов и прерываний
// 1 = вызываем прерывание только при одиночном нажатии
// 2 = вызываем прерывание только при двойном нажатии и учитываем одиночные
// Настройки порога, более высокие числа менее чувствительны
lis.setClick(2, CLICKTHRESHHOLD);
delay(100);
}
void loop() {
uint8_t click = lis.getClick();//Считываем информацию о кликах
if (click == 0) return;//Кликов не обнаружено
if (! (click & 0x30)) return;
Serial.print("Click detected (0x"); Serial.print(click, HEX); Serial.print("): ");//Клик обнаружен
if (click & 0x10) Serial.print(" single click");//Одиночное нажатие
if (click & 0x20) Serial.print(" double click");//Двойное нажатие
Serial.println();
delay(100);
return;
}