Перейти к публикации
iT4iT.CLUB

init.d

Пользователи
  • Публикации

    1
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем init.d


  1. Дано: модуль датчика холла A3144 подключенный через I2C расширитель PCF8575 к UNO R3

    Необходимо контролировать наличие магнита и передавать информацию на сервер по mqtt-протоколу

    При инициализации устройства магниты УЖЕ поднесены к датчику Холла. 

    Проблема: при старте устройства с поднесенными магнитом, скетчу "сносит" башню и Ардуино не понимает состояние датчика и не может отслеживать их переключение.

    Если изначально при старте магниты не поднесены, всё прекрасно работает.

    Код (часть связанную с сетью и передачей по mqtt-протоколу на брокер исключил):

    01  #include <SPI.h>
    02	#include <Wire.h>
    03	#include <PCF8575.h>
    04	
    05	#define PUB_DELAY 3000 // Частота передачи данных ото всех ключей
    06	#define CHK_DELAY 500 // Частота проверки ключей
    07	#define KEYS 3 // Кол-во ключей
    08	#define ACT LOW // Состояние входа при активации
    09	#define DIS !ACT
    10	
    11	PCF8575 ex1;
    12	  
    13	long previousMillis, checkMillis;
    14	boolean kst[KEYS] = {0};
    15	  
    16	void setup () {
    17	  // setup serial communication
    18	  Serial.begin(9600);
    19	  
    20	  
    21	  // Адрес i2c расширителя pcf8575
    22	  ex1.begin(0x20);
    23	   
    24	  for (int i = 0; i < 3; i++) ex1.pinMode(i, INPUT);
    25	  for (int i = 0; i < KEYS; i++) kst = DIS; // состояние датчика задается константой 
    26   
    27   delay(1500); // Allow hardware to stabilize
    28   
    29   previousMillis = millis();
    30   checkMillis = millis();
    31    
    32 }
    33   
    34 void loop () {
    35   if (millis() - checkMillis > CHK_DELAY) { // проверка ключей
    36     for (int i = 0; i < 3; i++) kst = ex1.digitalRead(i);
    37     for (int i = 0; i < 3; i++){
    38       if (kst[i] == ACT) { // если хотя бы 1 ключ активен
    39         String state = "Active";
    40         Serial.println (state);
    41       }
    42     }
    43     checkMillis = millis();
    44   }
    45   if (millis() - previousMillis > PUB_DELAY) { // передача данных о ключах
    46     String request;
    47     for (int i = 0; i < 3; i++) {
    48        Serial.println (request);
    49     }
    50     previousMillis = millis();
    51   }
    52     // mqttClient.loop();
    53 }

     

×
×
  • Создать...