Digispark игнорирует кнопку

Тема в разделе "Микроконтроллеры AVR", создана пользователем dmb, 24 сен 2020.

  1. dmb

    dmb Нерд

    Работает, все как надо! Энди, ты просто волшебник! Код в "голове" набросал? Огромный респект!
     
  2. Andy16

    Andy16 Гик

    Конечно, я не проверял, просто две строчки скопировал в нужные места.
    Рад, что работает.
     
    dmb нравится это.
  3. dmb

    dmb Нерд

    Молоток! А то тут некоторые пресмыкающиеся со статусом "гуру" (за пару тысяч никчемных комментов) уверяют, что "наугад программы не пишут", и что нужно нужно выжечь USB из недр МК - тогда все заработает как надо! ))) Хорошо, что есть еще толковые люди! Еще раз спасибо.
     
    issaom нравится это.
  4. Я тоже столкнулся с такой проблемой и после долгих поисков обнаружил что при подтягивании пина к +5В резистором от 1,5к до 10к на этом пине напряжение все равно ниже чем напряжение питания (около 3В вместо 5В) и digitalRead воспринимает это состояние как логический ноль. Кнопка опускает пин к нулю, но с точки зрения контроллера ничего не меняется, как был ноль так и остался. Поэтому вместо digitalRead я использовал конструкцию "if (analogRead(pin) < 300)" и все заработало как надо.
     
  5. ИгорьК

    ИгорьК Гуру

    ... эту тему надо отследить. Видимо, узнаю много нового.
     
  6. Кстати, если под кнопку использовать PB3, то в digispark на нем уже есть подтягивающий резистор на 1,5к. Прошивке через USB кнопка не мешает. Если конечно не нажимать ее в процессе. PULLUP в диджиспарке работает как-то криво, как мне показалось.
     
  7. Andy16

    Andy16 Гик

    А ты программно, случайно, не притянул пин к минусу?
     
  8. parovoZZ

    parovoZZ Гуру

    ну не он, а используемая им библиотека. Ну или что там используют ардуинщики...
     
  9. Нет. Я экспериментировал с подтяжкой и отказался от ее использования в пользу железных резисторов. Корявая там программная подтяжка.
     
  10. parovoZZ

    parovoZZ Гуру

    Нормальная там подтяжка. Надо уметь пользоваться.
     
  11. Возможно просто у меня дефектный экземпляр. До этого пользовался подтяжкой на Atnega 328, там все нормально было.
     
  12. SergeiL

    SergeiL Оракул Модератор

    А на Digispark USB был подключен к компу, когда подтяжка себя странно вела?
     
  13. Код (C++):
    // ATtiny85
    #define tune    -60    // Калибровка разброса показаний датчиков. Подбирается опытным путем в диапазоне +/- 200
    #define gister  10     // Гистерезис против самовозбуждения
    #define night   10     // Минимальная яркость в авто режиме. Типа ночная подсветка

    byte i, pwm;           // Счетчик цикла и заполнение ШИМ
    int outdoor, indoor;   // Яркость снаружи и внутри
    byte mode = 0;         // Режим работы 0-авто, 1-выключено, 2-среднаая яркость, 3-высокая и 4-максимальная

    void setup() {

      pinMode(PB2, INPUT);   //Аналоговый вход 1, датчик комнаты
      pinMode(PB4, INPUT);   //Аналоговый вход 2, датчик улицы
      pinMode(PB1, OUTPUT);  // Пин мосфет
      pinMode(PB3, INPUT);   // Пин кнопки
      pwm = night;
    Нет. USB подключаю только на заливку скетча т.к. одна из его линий задействована под кнопку. а вторая под аналоговый датчик.

    До этого пытался кнопку на PB0 повесить, но когда разобрался в чем проблема, уже успел ее на PB3 перепаять, и решил оставить там. Тем более что в этом варианте можно на подтягивающем резисторе сэкономить.
     
  14. haxbam

    haxbam Нуб

    Как быть с подключением нескольких кнопок на Attiny85 на разные каналы? Почему Digitalread не работает корректно? ТО совсем не работает, то работает но по какой то одной кнопке.
    Естественно стоит внешний подтягивающий резистор и кнопки подают VCC.
    Может быть здесь проблема такая же как на 13 тиньке с АЦП который не успевает переключаться по каналам? Тогда как сделать чтобы кнопки нормально опрашивались(кнопки с делителем напряжения на нескольких резисторах использовать не хочется ,да и ради принципа уже хочется разобраться)?
    Код (C++):

    #define BUZZER  0
    #define pin1    1
    #define pin2    2
    #define pin3    3
    #define pin4    4

    void setup() {
      pinMode(BUZZER, OUTPUT);
      pinMode(pin1, INPUT);
      pinMode(pin2, INPUT);
      pinMode(pin3, INPUT);
      pinMode(pin4, INPUT);
      }


    void loop() {

      if (digitalRead(pin1)==HIGH) {
        tone(BUZZER, 3400,10); // Send sound signal...
      }
      if (digitalRead(pin2)==HIGH) {
        tone(BUZZER, 2600,10); // Send sound signal...
      }
      if (digitalRead(pin3)==HIGH) {
        tone(BUZZER, 1800,10); // Send sound signal...
      }
      if (digitalRead(pin4)==HIGH) {
        tone(BUZZER, 1000,10); // Send sound signal...
      }
    } //end loop
     
  15. Andy16

    Andy16 Гик

    Несколько лет стоит она в спальне на свет. Две кнопки на разных пинах (0 и 2). Схему смотреть не полезу под потолок.
    В исходнике:
    Код (Text):
     pinMode(key1, INPUT);
    pinMode(key2, INPUT);
    digitalWrite(key1, LOW);
    digitalWrite(key2, LOW);
    ....
    if (digitalRead(key1)) {
    ....
    if (digitalRead(key2)) {
     
     
  16. parovoZZ

    parovoZZ Гуру

    Все работает абсолютно корректно.

    Оно и будет работать исключительно по одной кнопке.
    Алгоритм, изложенный в коде, абсолютно не работоспособный. Это если хочется микширования.
     
  17. haxbam

    haxbam Нуб

    Нет,я микса не хочу да и понимаю что не получится. Нужно чтобы по нажатию каждой кнопки выполнялись разные действия- бузер это только для тестов. Вообще этот примитивный скетч сделал только для тестов работы кнопок.
    Вообще планируется при нажатии и удерживании на разные интервалы времени разные функции по каждой кнопке. По этому
    в каждом цикле мне не совсем подходит, если только в сетап не впихнуть...
    А тут оказалось что сначала надо разбираться почему тинька не правильно распознает нажатия.
    С одной дискретной кнопкой(и несколькими резистивными аналоговыми кнопками тоже) уже делал другую конструкцию для сигнализатора поклевки - идеально работает, а вот уже даже с двумя кнопками проблема.

    Фиг с ней, я могу и аналоговую поставить, но хочу разобраться чтобы знать в чем проблема.
     
  18. Andy16

    Andy16 Гик

    Я, видимо, не совсем понятно написал. Первые 4 строки - это в сетапе. В лупе только ифы.
     
  19. haxbam

    haxbam Нуб

    Все заработало только после переустановки Arduino IDE с удалением всех сторонних папок программы. Очень странно, но заработало все сразу и даже тайминги delay стали соответсвовать реальному времени. Хотя ведь я проверял фьюзы и пробовал разные микросхемы...
    Похоже где то настройки ядра в самом IDE подгружались криво. ХЗ как еще это объяснить.
    Всем спасибо за помощь!
     
  20. haxbam

    haxbam Нуб

    кстати хорошо что возникла проблема, пока перебирал разные микрухи , оказалось что китайцы меня кинули на одну тиньку. вместо 85 впаяна 13 :) Сейчас буду открывать спор. 1644171802529.jpg