Лампа, реагирующая на приближение объектов

Тема в разделе "Arduino & Shields", создана пользователем Маша Егорова, 15 ноя 2016.

  1. Здравствуйте! Дело в том, что я собрала эту лампу, но у меня какая-то проблема с программой. Логика моя такова: я считаю расстояние до объекта с помощью сонара и библиотеки ультрасоник, затем из единицы вычитаю расстояние (в сантиметрах), делённое на 400(радиус действия сонара, тоже в сантиметрах). Эту штуку я обозвала part. Далее на светодиодах устанавливаю яркость (через analogWrite) на 255*part. Таким образом если человек находится на расстоянии 3-х метров от лампы, то светодиоды горят лишь на 25 процентов от полной яркости. И проблема именно с рассчётами вот этого коэффициента part. Монитор порта пишет, что этот коэффициент равен 1,00, а иногда 0,00, но никак не дробные значения, которые мне нужны (хотя дистанция правильна рассчитывается). Так вот как эту проблему решить? Буду очень благодарна

    Вот код:

    #include <Ultrasonic.h>


    #define LED1 5
    #define LED2 3
    #define LED3 9
    #define LED4 6
    #define trig 12
    #define echo 13

    float part;

    Ultrasonic sonar1(trig,echo);


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

    pinMode(trig,OUTPUT);
    pinMode(echo, INPUT);
    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);
    pinMode(LED3, OUTPUT);
    pinMode(LED4, OUTPUT);
    Serial.println("start");

    }

    void loop() {
    if (analogRead(A1)<150) {

    int dist = sonar1.Ranging(CM);

    Serial.print("dist= ");
    Serial.println(dist);

    part = (1-(dist/400));

    Serial.print("part=");
    Serial.println(part, 2);

    analogWrite(LED1, part*255);
    analogWrite(LED2, part*255);
    analogWrite(LED3, part*255);
    analogWrite(LED4, part*255);

    }
    }
     
  2. Tomasina

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

    Код (C++):
    part = (1.0-(dist/400.0));
     
  3. rkit

    rkit Гуру

    part = (1-((float)dist/400));

    Иначе там деление с остатком.
     
  4. Спасибо большое! Кажется, сработало)