дребезг контактов выключателя

Тема в разделе "Arduino & Shields", создана пользователем qwerty12344321, 10 янв 2016.

  1. Onkel

    Onkel Гуру

    вы спорите. вы даже спорите с такими очевидными вещами, как непропускание стеклом теплового комнатного ик - вещь еще более очевидная, установленная пару сотен лет. Так и вы подвергали сомнению правомерность !i с целым i, писали что i должно быть булевым.
     
  2. DrProg

    DrProg Вечный нерд

    Блин, очевидно же что в приведеном автором коде нет задачи инвертировать числа больше нуля в нуль. Я бы поверил в смысл этой строки, если бы хоть один элемент массива был нулевой. Все вопросы я задал правильные, если бы автор на них ответил, то истина бы нашлась. И это была бы польза. Но вместо этого выслушиваю факты которые вообще никакого отношения к вопросу не имеют. Зачем?
     
    ИгорьК нравится это.
  3. DrProg

    DrProg Вечный нерд

    Я не писал что i должно быть булевым, хватит притягивать факты!
     
    ИгорьК нравится это.
  4. Onkel

    Onkel Гуру

     
  5. DrProg

    DrProg Вечный нерд

    Мне льстит допущение, что мой авторитет так велик и безупречен, что любой мой совет люди моментально кидаются воплощать в жизнь! Право не знаю дар это или наказание.
    Кстати, да с линзами это был триумф справедливости, а зло было разоблачено и наказано. Поэтому надо писать об этом на всех ветках, чтобы никто не пропустил случайно. Годами!
     
    ИгорьК нравится это.
  6. DrProg

    DrProg Вечный нерд

    Не понял с цитатами. Я имел ввиду, что для получения эффекта триггера (как хотел автор) используют булевы переменные поочередно переключая их инвертироованием то в 0 то в 1. А смысла инвертирования целых чисел при этом нет никакого.
     
    ИгорьК нравится это.
  7. Onkel

    Onkel Гуру

     
  8. a.skalkin

    a.skalkin Нуб

    Спасибо всем за то что откликнулись. Возможно я что то не правильно объяснил. Но код все таки получилось написать. Если кому интересно:
    Код (C++):

    const int buttonPin[] = {2, 3, 4, 5};
    const int ledPin[] = {8, 9, 10, 11};
    const int alloff = 6;

    int ledState[] = {HIGH, HIGH, HIGH, HIGH};
    int buttonState[5];
    int lastButtonState[] = {LOW, LOW, LOW, LOW,};
    int index = 0;

    long lastDebounceTime[] = {0, 0, 0, 0};
    long debounceDelay = 50;

    void setup() {
      for (index = 0; index <= 3; index++)
      { pinMode(buttonPin[index], INPUT);
        pinMode(ledPin[index], OUTPUT);
        digitalWrite(ledPin[index], ledState[index]);
      }
      pinMode (alloff, INPUT);
    }

    void loop() {
      int reading[] = {0, 0, 0, 0};
      for (index = 0; index <= 3; index++)
      { reading[index] = digitalRead(buttonPin[index]);

        if (reading[index] != lastButtonState[index]) {

          lastDebounceTime[index] = millis();
        }

        if ((millis() - lastDebounceTime[index]) > debounceDelay) {
          if (reading[index] != buttonState[index]) {
            buttonState[index] = reading[index];

            if (buttonState[index] == HIGH) {
              ledState[index] = !ledState[index];
            }
          }
        }

        digitalWrite(ledPin[index], ledState[index]);

        lastButtonState[index] = reading[index];
        if (digitalRead(alloff) == 1) {
          ledState[index] = LOW;
        }
      }
    }
     
  9. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    у амперки был ещё инвертирующий триггер шмита.
     
  10. DrProg

    DrProg Вечный нерд

    Можно и без него, 40мс дребезга и помехи эта схема держит стабильно, сигнал распознается четко.
     
    ИгорьК нравится это.
  11. a.skalkin

    a.skalkin Нуб

    Доброго времени суток. Подскажите уважаемые знатоки, а можно ли, и как, при использовании сдвигового ригистра, байт (0b00000000) отправляемый на него формировать с переменных, значение которых изменяется в результате нажатия кнопки, т.е. 1 или 0.
     
  12. DrProg

    DrProg Вечный нерд

    char i = 0;
    i |= 1; // установка 0-го бита переменной i в 1
    i |= 1 << 3; // установка 3-го бита в 1 (отсчет с 0, т.е. первый бит -- это нулевой)
    i |= 0b0101010; - единицы в единицы без изменения остального

    i &= ~(1 << 4); // Сброс 4-го бита в 0
    i &= 0b11110000; - нули в нули без изменения остального

    char s = 0;
    s = i & (1 << 5); // s != 0, если 5-й бит переменной i установлен в 1, иначе 0

    If (!(I & (1 <<n))) {..} else {..}; проверка бита на 0
    If (~I & (1 <<n))) {..} else {..};

    If ((I & (1 <<n))) {..} else {..}; проверка бита на 1
    If (I & 1 <<n) {..} else {..};