Помогите разобраться любителю как сделать счетчик

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем ZelGer, 16 фев 2015.

  1. ZelGer

    ZelGer Нерд

    Вообщем тема такая есть фоторезистор на него светит лазер, как сделать так что бы при прерывании лазера к значению прибавлялась единичка(ну типа подсчет прерываний)?
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    Фоторезистор не сожгете? Лазер в постоянном режиме тоже проработает недолго.

    1. обнуляем переменную n
    2. читаем состояние пина A0
    3. если показания больше 512, переходим к п. 2.
    иначе прибавляем счетчик на 1.
    4. пауза 0,1 сек.
    5. переходим к п. 2.

    Вообще фоторезистор срабатывает на любой яркий свет, не только от лазера.
     
  3. vvr

    vvr Инженерище

    Делаем простой счётчик.
    Заводим переменную int val = 0;
    Снимаем показания с фоторезистора.
    Если не светит - ничего не происходит.
    Светит val = val + 1;
     
  4. vvr

    vvr Инженерище

    Опа, Tomasina опередил:)
     
  5. ZelGer

    ZelGer Нерд


    Ну вы конечно молодцы ) я ж говорю любителю помогите, я конечно в коде примерно разбираюсь но все же, вот пример посмотрите годно ли


    int sensePin =0;
    int ledPin =9;


    void setup(){

    Serial.begin(9600);
    }

    void loop(){

    int val = 0;
    Serial.print(analogRead(sensePin));
    Serial.print(" ");
    Serial.println(val);
    delay(500);


    if (sensePin > 700) {
    val += 1;
    }
    }
     
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    почти так, только у вас счетчик обнуляется каждые полсекунды :) val=0 надо вынести из loop.

    Код (Text):
    #define PHOTOSENSOR A0    // пин датчика света
    int sensivity = 512;      // уровень чувствительности
    int count = 0;            // счетчик

    void setup()
    {
      Serial.begin(9600);
    }


    void loop()
    {
      int sensorValue = analogRead(PHOTOSENSOR);  // читаем фоторезистор
      Serial.println(sensorValue);                // показываем значение
      if (sensorValue > sensivity)                // сравниваем. Если больше, то...
      {
        count = count + 1;                        // увеличиваем счетчик
        Serial.print("Count: ");                  // показываем счетчик
        Serial.println(sensorValue);  
      }
      delay(10);
    }
     
  7. vvr

    vvr Инженерище

    Код (Text):
    #define  sense_PIN  A0
    int sense =0;
    int val = 0;

    void setup()
    {
    Serial.begin(9600);
    }

    void loop()
    {
    sense = analogRead(sense_Pin);
    Serial.print(sense);
    Serial.print(" ");
    Serial.println(val);
    delay(500);
    if (sense > 700)
    {
    val += 1;
    }
    }
     
  8. vvr

    vvr Инженерище

  9. Tomasina

    Tomasina Сушитель лампочек Модератор

    а мы вот так:
    Код (Text):
    void loop()
    {
    do {Serial.println(++count);} while (analogRead(PHOTOSENSOR) > sensivity);
    delay(10);
    }
    Кто короче? ;)
     
    Последнее редактирование: 16 фев 2015
  10. ZelGer

    ZelGer Нерд

    Ну я как бы примерно принцип понял но можно ли сделать так когда лазер прерывается + 1 а если по твоему коду то оно выдает столько значений , то есть например поднес я руку между лазером и резистором +1 убрал все так и осталось опять поднес, опять +1(в сумме 2) надеюсь все понятно написал:):)
     
  11. Tomasina

    Tomasina Сушитель лампочек Модератор

    т.е. чтобы счетчик не увеличивался, если продолжаем держать руку?
    Тогда надо сравнивать не только разницу в яркости, но и учитывать, что рука уже была посчитана полсекунды назад. Примерно так (вживую не проверено):
    Код (Text):
    #define PHOTOSENSOR A0    // пин датчика света
    int sensivity = 512;      // уровень чувствительности
    int count = 0;            // счетчик
    boolean flag = false;    // метка о том, что препятствие уже посчитали

    void setup()
    {
      Serial.begin(9600);
    }


    void loop()
    {
      int sensorValue = analogRead(PHOTOSENSOR);  // читаем фоторезистор
      Serial.println(sensorValue);                // показываем значение
      if ((sensorValue > sensivity) && (flag == false)) // сравниваем. Если больше И препятствие еще не зафиксировано
      {
        count++;                        // увеличиваем счетчик
        Serial.print("Count: ");                  // показываем счетчик
        Serial.println(sensorValue);
        flag = true;                              // ставим метку, что препятствие посчитано - пока она есть, счетчтик не увеличивать
      }
      if ((sensorValue < sensivity) && (flag == true)) // опять сравниваем. Если меньше И препятствие уже было зафиксировано
      {
        flag = false;                            // сбрасываем метку, т.е. следующее препятствие будет снова посчитано
      }
      delay(10);
    }
     
  12. ZelGer

    ZelGer Нерд

    #define PHOTOSENSOR A0 // пин датчика света
    int sensivity = 700; // уровень чувствительности
    int count = -1; // счетчик
    boolean flag = false; // метка о том, что препятствие уже посчитали

    void setup()
    {
    Serial.begin(9600);
    }


    void loop()
    {
    int sensorValue = analogRead(PHOTOSENSOR); // читаем фоторезистор
    Serial.println(sensorValue); // показываем значение
    if ((sensorValue < sensivity) && (flag == false)) // сравниваем. Если больше И препятствие еще не зафиксировано
    {
    count++; // увеличиваем счетчик
    flag = true; // ставим метку, что препятствие посчитано - пока она есть, счетчтик не увеличивать
    }
    if ((sensorValue > sensivity) && (flag == true)) // опять сравниваем. Если меньше И препятствие уже было зафиксировано
    {
    flag = false; // сбрасываем метку, т.е. следующее препятствие будет снова посчитано
    }
    Serial.print("Count: "); // показываем счетчик
    Serial.println(count);
    delay(100);
    }

    Вот он идеальный счетчик проверенный на практике немного изменил код
     
  13. vvr

    vvr Инженерище

    А как часто будет меняться освещение фоторезистора?
     
  14. Tomasina

    Tomasina Сушитель лампочек Модератор

    со знаками сравнения моя промашка, признаю. :rolleyes:
    В вашем коде счетчик показывается 10 раз в секунду, даже если он не менялся. У меня было не так.
    И зачем счетчик начинать от -1? Это же не будет соответствовать реальному количеству (всегда меньше на 1).
     
  15. ZelGer

    ZelGer Нерд

    ну поменял на -1 я для того что бы при включении счетчика я сам мог выйти из помещения, эта же приблуда на дверь ставится), а 10 раз в секунду поставил т.к этого достаточно для меня а так конечно лучше 100 раз в секунду(10 что бы не забивать лог), и да я дуда еще светодиоды влепил для подсчета без компьютера ;)
     
  16. vvr

    vvr Инженерище

    а фоторезистор будет срабатывать 100 раз в секунду?
     
  17. ZelGer

    ZelGer Нерд

    у меня 10 но легко можно поменять на 100
     
  18. vvr

    vvr Инженерище

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

    ZelGer Нерд

    Я немного даже удивился что ничего подобного не нашел в инете
     
  20. vvr

    vvr Инженерище

    так выложи, посмотрим, почерпнём:)