Датчик линии. HELP-HELP!!

Тема в разделе "Arduino & Shields", создана пользователем AsyaEmjay, 29 мар 2014.

  1. AsyaEmjay

    AsyaEmjay Нуб

    Диджитал датчик линии странно себя ведет. Вместо распознавания линии реагирует только на прикосновение к поверхности. Мне надо, чтобы на черную точку на бумаге производился звук на пищалке.
    Делала то же самое с аналоговым датчиком линии - все работало. Здесь же датчик не обращает внимания ни на какие черные фигуры, только на то в воздухе он или касается поверхности.
    Помогите, пожалуйста!

    Коды для аналогового и для диджитал:

    Аналоговый (работающий):

    int sensePin = 0;
    int BUZZER_PIN = 13;

    void setup()
    {
    pinMode(BUZZER_PIN, OUTPUT);
    }

    void loop()
    {
    int sensorValue = analogRead(A0);
    if (sensorValue >= 200)
    { tone(BUZZER_PIN, 500, 50);
    }
    }

    Диджитал (неработающий):

    int digitalsense = 2;
    int BUZZER_PIN = 13;

    void setup()
    {
    pinMode(BUZZER_PIN, OUTPUT);
    }

    void loop()
    {
    int sensorValue1 = digitalRead(digitalsense);
    if (sensorValue1 < 1)
    { tone(BUZZER_PIN, 500, 50);
    }
    }
     
  2. а где pinMode(digitalsense, INPUT); ?
     
  3. AsyaEmjay

    AsyaEmjay Нуб

    закомментированно было
    добавила, но суть не измненилась. прикасаюсь датчиком к бумаге - пищит без остановки, поднимаю вверх - замолкает. На линии никакой реакции
     
  4. Максимус-Бог

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

    pinMode(digitalsense, INPUT); не обязательно писать, т.к все выходы настроены на INPUT.
     
  5. Airbus

    Airbus Радиохулиган Модератор

    А так?
    Код (C++):

    int sensor_Pin = 2;
    int BUZZER_Pin = 13;

    void setup()
    {
    pinMode(BUZZER_Pin, OUTPUT);
    }

    void loop()
    {
    if (!sensor_Pin)
    { tone(BUZZER_Pin, 500, 50);
    }
    }
     
     
  6. Alex19

    Alex19 Гуру

    Можно не писать, но так программа выглядит нагляднее.

    Вы ошиблись, данный код не сработает.
    Код (C++):
    if (!sensor_Pin)
    {
       tone(BUZZER_Pin, 500, 50);
    }
    Так как sensor_Pin будет больше 0, это просто переменная.

    Вероятно, Вы хотели, так
    Код (C++):
    int sensor_Pin = 2;
    int BUZZER_Pin = 13;

    void setup()
    {
      pinMode(sensor_Pin, INPUT);
      pinMode(BUZZER_Pin, OUTPUT);
    }

    void loop()
    {
      if (!digitalRead(sensor_Pin))
      {
        tone(BUZZER_Pin, 500, 50);
      }
    }
     
    Можете назвать его модель?
     
    Airbus нравится это.
  7. Airbus

    Airbus Радиохулиган Модератор

    Да Вы правы ошибся немного но тогда вот так?
    if (digitalRead(!sensor_Pin)) // Если на sensor_Pin "0" тогда пищим
    Видимо этот
     
  8. Alex19

    Alex19 Гуру

    Раз этот, то так.
    Код (C++):
    int sensor_Pin = 2;
    int BUZZER_Pin = 13;

    void setup()
    {
      pinMode(sensor_Pin, INPUT);
      pinMode(BUZZER_Pin, OUTPUT);
    }

    void loop()
    {
      if (digitalRead(sensor_Pin))
      {
        tone(BUZZER_Pin, 500, 50);
      }
    }
    Раз требуется следующее.
    Из описания.
    Но его требуется настроить, изменив его чувствительность, как это сделать.
    Попробуйте подстроится под Вашу черную точку, в этом Вам должен помочь светодиод установленный на датчике.
    Действительно удобно, если верить описанию.

    Если не получится, попробуйте сделать точку пожирнее.

    Более подробная информация о датчике - http://amperka.ru/product/digital-line-sensor.
    Проект с их использованием - http://wiki.amperka.ru/Робототехника:робот-с-датчиками-линии-на-arduino.
     
    Последнее редактирование: 1 фев 2016
    Airbus нравится это.