Попытка использовать решение для обнаружения кранов с помощью 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
Основная цель состоит в том, чтобы проверить отсутствие количества нажатий и продолжительности между одним нажатием и двойным нажатием, а не использовать какую-либо библиотеку, необходимую для работы с кодом, который я делал.
Предложение и немного советов, чтобы заставить его работать, будут приветствоваться.
@varul jain, 👍0
1 ответ
массивы индексируются начиная с 0, но вы присваиваете переменным TAP_ значения массива с индексом 1,2,3.
Вы уверены, что датчик подключен нормально? Работал ли он с примером библиотеки?
- hx711 и датчик нагрузки показывают 0 для калибровки
- Объединение 2 датчиков в один код с 1 кнопкой
- Ультразвуковой датчик показывает странные показания
- Как получить и интерпретировать данные цифрового акселерометра?
- Компас с компенсацией наклона Использование HMC5983 дает непоследовательный вывод
- Библиотека клавиатуры не работает или я где-то ошибаюсь
- Можно ли измерить скорость акселерометром? Насколько точно?
- Какова работа pulseIn?