Попытка использовать решение для обнаружения кранов с помощью ADXL345 с Arduino

Я использую на ADXL345 подключения датчика с Arduino через I2C интерфейс, я могу проверить данные в Tri-осевой оси, но так как есть некоторые другие функции, которые я собираюсь попробовать с активным обнаружения метода, так как я не использовать водопроводную молотить регистрации и вместо этого я использую регистры (в десятичной системе) кран задержки - 33, активный продолжительность - 34, коснитесь окна - 35.

Для чего я только что начал с необработанного кода,

#include <Wire.h>

// ADXL345 I2C - адрес 0x53(83)
#define Addr 0x53

void setup()
{
  // Инициализация связи I2C в качестве ВЕДУЩЕГО
  Wire.begin();
  // Инициализировать последовательную связь, установить скорость передачи данных = 9600
  Serial.begin(9600);

  // Запуск передачи I2C
  Wire.beginTransmission(Addr);
  // Выберите регистр скорости полосы пропускания
  Wire.write(0x2C);
  // Нормальный режим, Выходная скорость передачи данных = 100 Гц
  Wire.write(0x0A);
  // Остановить передачу I2C
  Wire.endTransmission();

  // Запуск передачи I2C
  Wire.beginTransmission(Addr);
  // Выберите регистр управления питанием
  Wire.write(0x2D);
  // Автоматическое отключение сна
  Wire.write(0x08);
  // Остановить передачу I2C
  Wire.endTransmission();

  // Запуск передачи I2C
  Wire.beginTransmission(Addr);
  // Выберите регистр формата данных
  Wire.write(0x31);
  // Самопроверка отключена, 4-проводный интерфейс, Полное разрешение, Диапазон = +/-2g
  Wire.write(0x08);
  // Остановить передачу I2C
  Wire.endTransmission();
  delay(300);
 }

 void loop()
 {
   unsigned int data[3];
   for(int i = 0; i < 3; i++)
   {
    // Запуск передачи I2C
    Wire.beginTransmission(Addr);
    // Выберите регистр данных
    Wire.write ((33 + i));
    // Остановить передачу I2C
    Wire.endTransmission();

    // Request 1 byte of data
    Wire.requestFrom(Addr, 1);

    //Read Three Bytes 
    if(Wire.available() == 1)
    {
      data[i] = Wire.read();
    }
 }
   int TAP_DUR = data[1];
   int TAP_LAT = data[2];
   int TAP_WIN = data[3];

   Serial.print("ДЛИТЕЛЬНОСТЬ НАЖАТИЯ: ");
   Serial.println(TAP_DUR);
   Serial.print("Задержка НАЖАТИЯ: ");
   Serial.println(TAP_LAT);
   Serial.print("Окно касания : ");
   Serial.println(TAP_WIN);
   delay(3000);
   }

который не работает должным образом и дает такой результат

TAP DURATION: 0
TAP Latency: 0
Tap Window : 22272
TAP DURATION: 0
TAP Latency: 0
Tap Window : 22272
TAP DURATION: 0
TAP Latency: 0
Tap Window : 22272

Основная цель состоит в том, чтобы проверить отсутствие количества нажатий и продолжительности между одним нажатием и двойным нажатием, а не использовать какую-либо библиотеку, необходимую для работы с кодом, который я делал.

Предложение и немного советов, чтобы заставить его работать, будут приветствоваться.

, 👍0


1 ответ


1

массивы индексируются начиная с 0, но вы присваиваете переменным TAP_ значения массива с индексом 1,2,3.

Вы уверены, что датчик подключен нормально? Работал ли он с примером библиотеки?

,