Jump to content
iT4iT.CLUB

init.d

Members
  • Content Count

    1
  • Joined

  • Last visited

Community Reputation

0 Neutral
  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 }
×
×
  • Create New...