Для начала работы установим библиотеку 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

  1. #include <SPI.h>
  2. #include <Adafruit_LIS3DH.h>
  3. #include <Adafruit_Sensor.h>
  4.  
  5. Adafruit_LIS3DH lis = Adafruit_LIS3DH();
  6.  
  7. void setup(void) 
  8. {
  9.   Serial.begin(9600);//Запускаем Serial порт
  10.   Serial.println("LIS3DH test!");
  11.  
  12.   if (! lis.begin(0x19)) //Инициализируем датчик по адресу 0x19
  13.   {
  14.     Serial.println("Couldnt start");//Датчик не запустился
  15.     while (1);//Останавливаем программу
  16.   }
  17.   Serial.println("LIS3DH found!");//Датчик запустился
  18.  
  19.   lis.setRange(LIS3DH_RANGE_4_G);   //Устанавливаем диапазон работы
  20.  
  21.   Serial.print("Range = "); Serial.print(2 << lis.getRange());//Выводим текущий диапазон
  22.   Serial.println("G");
  23. }
  24.  
  25. void loop() 
  26. {
  27.   lis.read();      //Считываем данные осей X, Y, Z 
  28.   //Выводим "сырые" данные
  29.   Serial.print("X:  "); Serial.print(lis.x); 
  30.   Serial.print("  \tY:  "); Serial.print(lis.y); 
  31.   Serial.print("  \tZ:  "); Serial.print(lis.z); 
  32.  
  33.   //Приводим данные в порядок
  34.   sensors_event_t event; 
  35.   lis.getEvent(&event);
  36.  
  37.   //Выводим обработанные данные
  38.   Serial.print("\t\tX: "); Serial.print(event.acceleration.x);
  39.   Serial.print(" \tY: "); Serial.print(event.acceleration.y); 
  40.   Serial.print(" \tZ: "); Serial.print(event.acceleration.z); 
  41.   Serial.println(" m/s^2 ");
  42.  
  43.   Serial.println();
  44.  
  45.   delay(200); 
  46. }

Рассмотрим следующий пример. Файл->Примеры->Adafruit lis3dh tapdemo.

  1. #include <Wire.h>
  2. #include <Adafruit_LIS3DH.h>
  3. #include <Adafruit_Sensor.h>
  4.  
  5. Adafruit_LIS3DH lis = Adafruit_LIS3DH();
  6.  
  7. //Настройка чувствительности
  8. #define CLICKTHRESHHOLD 80
  9.  
  10. void setup(void) {
  11.   Serial.begin(9600);
  12.   Serial.println("Adafruit LIS3DH Tap Test!");
  13.  
  14.   if (! lis.begin(0x19)) //Инициализируем датчик по адресу 0x19
  15.   {
  16.     Serial.println("Couldnt start");//Датчик не запустился
  17.     while (1);//Останавливаем программу
  18.   }
  19.   Serial.println("LIS3DH found!");//Датчик запустился
  20.  
  21.   lis.setRange(LIS3DH_RANGE_2_G);   //Устанавливаем диапазон работы
  22.  
  23.   Serial.print("Range = "); Serial.print(2 << lis.getRange());//Выводим текущий диапазон
  24.   Serial.println("G");
  25.  
  26.   // 0 = отключить обнаружение кликов и прерываний
  27.   // 1 = вызываем прерывание только при одиночном нажатии
  28.   // 2 = вызываем прерывание только при двойном нажатии и учитываем одиночные
  29.   // Настройки порога, более высокие числа менее чувствительны
  30.   lis.setClick(2, CLICKTHRESHHOLD);
  31.   delay(100);
  32. }
  33.  
  34.  
  35. void loop() {
  36.   uint8_t click = lis.getClick();//Считываем информацию о кликах
  37.   if (click == 0) return;//Кликов не обнаружено
  38.   if (! (click & 0x30)) return;
  39.   Serial.print("Click detected (0x"); Serial.print(click, HEX); Serial.print("): ");//Клик обнаружен
  40.   if (click & 0x10) Serial.print(" single click");//Одиночное нажатие
  41.   if (click & 0x20) Serial.print(" double click");//Двойное нажатие
  42.   Serial.println();
  43.  
  44.   delay(100);
  45.   return;
  46. }