Определение состояния датчиков холла при инициализации работы устройства
- Войдите на сайт для отправки комментариев
Ср, 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?
Убрал, чтобы не "засорять" эфир ненужным:
С благодарностью и признательностью кину донат тому, кто решит траблу и поправит код
Да. делал так только в таком порядке:
Не помогало
Убрал, чтобы не "засорять" эфир ненужным:
так у вас реально в этом коде не осталось ни малейшего смысла.
Опишите, пожалуйста, каким образом коду "сносит башню" и , самое интересное! - как вы это видите, если в коде нет вывода принятых с датчиков значений?
Не воспринимайте мои слова как глум, отнеситесь серьезно. Я склонен думать. что в погоне за выкидыванием лишнего вы удалили из кода и проблемный участок и исправлять в этих остатках попросту нечего.
Убрал, чтобы не "засорять" эфир ненужным:
так у вас реально в этом коде не осталось ни малейшего смысла.
Опишите, пожалуйста, каким образом коду "сносит башню" и , самое интересное! - как вы это видите, если в коде нет вывода принятых с датчиков значений?
Не воспринимайте мои слова как глум, отнеситесь серьезно. Я склонен думать. что в погоне за выкидыванием лишнего вы удалили из кода и проблемный участок и исправлять в этих остатках попросту нечего.
Отправил на почту ded@cur-ex.ru
Гуру AlexanderNO, Ваш лаконичный комментарий решил мою проблему. Спасибо за эффективный краудсорсинг!
Напишите, как можно кинуть вам небольшое вознаграждение за решение задачи.
Кидай мне, а то пить ненашта
Кидай мне, а то пить ненашта
Судя по комментариям, вы философ и свободный художник) Не поленился посетить ваш профиль на гитхабе и читануть про таймеры. Если когда-нибудь буду в N-k (новороссийске? новосибирске?), обязательно налью...
Кидай мне, а то пить ненашта
Судя по комментариям, вы философ и свободный художник) Не поленился посетить ваш профиль на гитхабе и читануть про таймеры. Если когда-нибудь буду в N-k (новороссийске? новосибирске?), обязательно налью...
У деда зимой минус 40 было....
Кипяток на лету замерзал!
Делайте выводы.....
Наливка-то не замёрзнет, надеюсь...