2014-09-25 2 views
0

Мы установили Arduino uno, который контролирует плату реле. Реле возбуждаются при установке LOW и ничего не делают при приеме сигнала HIGH. Эти реле используются для открытия/закрытия дверей, и мы сталкиваемся с большой проблемой, потому что двери открываются «по их собственным», возможно, 1 раз в день или, возможно, 1 раз в 2 или 3 дня (случайная мода) ...Как читать выходные значки на Arduino?

Мы видели, что наша система не посылает команды (AT), чтобы открывать двери, и мы подозреваем, что выходное напряжение Arduino HIGH может снизиться на несколько мс, а затем плата ретранслятора обнаруживает это как сигнал и реле горячится ...

Итак, теперь вопрос программного обеспечения ...

Как я могу прочитать реальный выход булавки и проверить, есть ли какие-то моменты, когда напряжения становятся LOW, а эти выходные контакты устанавливаются ВЫСОКАЯ? Чтобы сделать это, я прочитал другую questions на SO, и я сделал следующее:

const int PIN_GARAGE = 3; 

void setup() { 
    Serial.begin(9600); 
    pinMode(PIN_GARAGE, OUTPUT); 
    digitalWrite(PIN_GARAGE, HIGH); 
} 

void loop() { 
    // Ommited code that processes commands sent to the Arduino 
    if (!digitalRead(PIN_GARAGE)) { 
    Serial.print(millis()); 
    Serial.print(" LOW VOLTAGE ON PIN "); 
    Serial.println(PIN_GARAGE); 
    } 
} 

Я не уверен, что если делать digitalRead() на OUTPUT штифт установлен в ВЫСОКИЙ всегда будет возвращать 1 вместо текущая реальная стоимость, что мне и нужно.

ответ

0

https://stackoverflow.com/a/6487713/2041472 от вопроса вы связаны

Почему вы хотите сделать это? Если вы делаете это, чтобы подтвердить, что контакт действительно высок, это не подтвердит его, потому что, возможно, есть короткое замыкание на высоком контакте от внешней цепи, лучший способ - создать обратную связь через другой контакт; сконфигурируйте другой контакт в качестве входного сигнала и подключите выходной вывод к новому входному выводу и прочитайте его значение. Чтение внутреннего регистра всегда будет возвращать вам то, что контроллер пытается установить на штырь, а не фактическое значение штыря.

Если у вас есть запасной штырь, установите его как входной штырь и соедините провод от выходного провода во входной провод, а затем прочитайте значение входа.

Если возможно, я также подумал об изменении схемы, чтобы ардуино тянет высоко, чтобы активировать ваш сигнал, поскольку он, вероятно, будет более надежным.

+0

Спасибо за ваш ответ! Я пропустил этот ответ среди всех ответов ... (Интересно, почему у него просто +2 ...). Примечание: я подключил сопротивление 1K на входных выводах, ограничивающих ток. Посмотрите, что произойдет! – Caumons

0

Вы проверили, что ваш Arduino не перезагружается по любой другой причине, и это странное поведение, которое вы видите? Вы можете распечатать миллис() через последовательный порт и посмотреть, как долго работает Arduino.

+0

Я уже делаю это, спасибо в любом случае! :) – Caumons

Смежные вопросы