Определение состояния датчиков холла при инициализации работы устройства
- Войдите на сайт для отправки комментариев
Ср, 10/04/2019 - 10:47
Доброго дня комьюнити!
Дано: модуль датчика холла A3144 подключенный через I2C расширитель PCF8575 к UNO R3
Необзодимо контролировать наличие магнита и передавать информацию на сервер.
При инициализации устройства магниты поднесены к датчику Холла.
Проблема: при старте устройства с поднесенными магнитом, скетчу "сносит" башню, ардуино не понимает состяние датчиков и не может отследивать их переключение.
Если изначально при старте магниты не поднесены, всё прекрасно работает.
HELP!
Код (часть связанную с сетью и передачей по mqtt-протоколу на брокер исключил):
#include <SPI.h>
#include <Wire.h>
#include <PCF8575.h>
#define PUB_DELAY 3000 // Частота передачи данных ото всех ключей
#define CHK_DELAY 500 // Частота проверки ключей
#define KEYS 3 // Кол-во ключей
#define ACT LOW // Состояние входа при активации
#define DIS !ACT
PCF8575 ex1;
long previousMillis, checkMillis;
boolean kst[KEYS] = {0};
void setup () {
// setup serial communication
Serial.begin(9600);
// Адрес i2c расширителя pcf8575
ex1.begin(0x20);
for (int i = 0; i < 3; i++) ex1.pinMode(i, INPUT);
for (int i = 0; i < KEYS; i++) kst[i] = DIS; // состояние датчика задается константой
delay(1500); // Allow hardware to stabilize
previousMillis = millis();
checkMillis = millis();
}
void loop () {
if (millis() - checkMillis > CHK_DELAY) { // проверка ключей
for (int i = 0; i < 3; i++) kst[i] = ex1.digitalRead(i);
for (int i = 0; i < 3; i++){
if (kst[i] == ACT) { // если хотя бы 1 ключ активен
String state = "Active";
Serial.println (state);
}
}
checkMillis = millis();
}
if (millis() - previousMillis > PUB_DELAY) { // передача данных о ключах
String request;
for (int i = 0; i < 3; i++) {
Serial.println (request);
}
previousMillis = millis();
}
// mqttClient.loop();
}
спасибо за информацию. ТТеперь мы знаем, чтобы этот скетч правильно работал, не нужно подносить магниты при старте.
Выбраковка финно-угром продолжается
init.d - можете обьяснить, что вы печаете в строке 48?
init.d - можете обьяснить, что вы печаете в строке 48?
Убрал, чтобы не "засорять" эфир ненужным:
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[i] = 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[i] = ex1.digitalRead(i); 37 for (int i = 0; i < 3; i++){ 38 if (kst[i] == ACT) { // если хотя бы 1 ключ активен 39 //передача информации на сервер 41 } 42 } 43 checkMillis = millis(); 44 } 45 if (millis() - previousMillis > PUB_DELAY) { // передача данных о ключах 46 String request; 47 for (int i = 0; i < 3; i++) { 4 //передача информации на сервер 49 } 50 previousMillis = millis(); 51 } 52 // mqttClient.loop(); 53 }С благодарностью и признательностью кину донат тому, кто решит траблу и поправит код
Да. делал так только в таком порядке:
Не помогало
Убрал, чтобы не "засорять" эфир ненужным:
так у вас реально в этом коде не осталось ни малейшего смысла.
Опишите, пожалуйста, каким образом коду "сносит башню" и , самое интересное! - как вы это видите, если в коде нет вывода принятых с датчиков значений?
Не воспринимайте мои слова как глум, отнеситесь серьезно. Я склонен думать. что в погоне за выкидыванием лишнего вы удалили из кода и проблемный участок и исправлять в этих остатках попросту нечего.
Убрал, чтобы не "засорять" эфир ненужным:
так у вас реально в этом коде не осталось ни малейшего смысла.
Опишите, пожалуйста, каким образом коду "сносит башню" и , самое интересное! - как вы это видите, если в коде нет вывода принятых с датчиков значений?
Не воспринимайте мои слова как глум, отнеситесь серьезно. Я склонен думать. что в погоне за выкидыванием лишнего вы удалили из кода и проблемный участок и исправлять в этих остатках попросту нечего.
Отправил на почту ded@cur-ex.ru
Гуру AlexanderNO, Ваш лаконичный комментарий решил мою проблему. Спасибо за эффективный краудсорсинг!
Напишите, как можно кинуть вам небольшое вознаграждение за решение задачи.
Кидай мне, а то пить ненашта
Кидай мне, а то пить ненашта
Судя по комментариям, вы философ и свободный художник) Не поленился посетить ваш профиль на гитхабе и читануть про таймеры. Если когда-нибудь буду в N-k (новороссийске? новосибирске?), обязательно налью...
Кидай мне, а то пить ненашта
Судя по комментариям, вы философ и свободный художник) Не поленился посетить ваш профиль на гитхабе и читануть про таймеры. Если когда-нибудь буду в N-k (новороссийске? новосибирске?), обязательно налью...
У деда зимой минус 40 было....
Кипяток на лету замерзал!
Делайте выводы.....
Наливка-то не замёрзнет, надеюсь...