Тестер батареек на светодиодной шкале из компонентов набора "Матрёшка Z"

Тема в разделе "Глядите, что я сделал", создана пользователем danya plotnik, 2 мар 2018.

  1. danya plotnik

    danya plotnik Гик

    Нам потребуются:
    Arduino Uno / 1
    Кабель USB (A — B) / 1
    Breadboard Half / 1
    Светодиодная шкала / 1
    Резисторы (10 шт.) / набор(220 Ом) и 2(10 КоМ)
    Соединительные провода «папа-папа» (20 шт.) / 17
    Клеммник нажимной / 1
    Диоды выпрямительные 1N4007 (5 шт.) / 1

    Схема подключения:
    dodelat_bb.png
    Сам код:
    Код (C++):
    void setup()
    {
      pinMode(2, OUTPUT); //Включаем шкалу
      pinMode(3, OUTPUT);
      pinMode(4, OUTPUT);
      pinMode(5, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(7, OUTPUT);
      pinMode(8, OUTPUT);
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(11, OUTPUT);
    }
    void loop()
    {
      digitalWrite(11, LOW); //Если батарейки не будет
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      digitalWrite(7, LOW);
      digitalWrite(6, LOW);
      digitalWrite(5, LOW);
      digitalWrite(4, LOW);
      digitalWrite(3, LOW);
      digitalWrite(2, LOW);
      float voltage = analogRead(A0) / 1024.0 * 10.0; //Измеряем, сколько вольт. Делим вольты батарейки, например: если батрейка на 1,5 вольт, то делим 1,50 на десять и у нас получается 0,15
      if(voltage > 0.15){ //Ставим тут 0,15
        digitalWrite(11, HIGH);
      }
      if(voltage > 0.30){ //И каждый раз прибавляем 0,15
        digitalWrite(10, HIGH);
      }
      if(voltage > 0.45){
        digitalWrite(9, HIGH);
      }
      if(voltage > 0.60){
        digitalWrite(8, HIGH);
      }
      if(voltage > 0.75){
        digitalWrite(7, HIGH);
      }
      if(voltage > 0.90){
        digitalWrite(6, HIGH);
      }
      if(voltage > 1.05){
        digitalWrite(5, HIGH);
      }
      if(voltage > 1.20){
        digitalWrite(4, HIGH);
      }
      if(voltage > 1.35){
        digitalWrite(3, HIGH);
      }
      if(voltage >= 1.50){ //Если батарея полностью заряжена, то будут гореть все светодиоды
        digitalWrite(2, HIGH);
      }
    }
    Спасибо за внимание!






     
  2. Tomasina

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

    Всю ветку if можно заменить на одну строку map.
     
    NikitOS нравится это.
  3. danya plotnik

    danya plotnik Гик

    Как?
     
  4. Tomasina

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

    А тут даже map не нужен, просто for и if
    Код (C++):
    void setup()
    {
      for (byte i = 2; i <= 11; i++) { pinMode(i, OUTPUT); }
    }

    void loop()
    {
      for (byte i = 2; i <= 11; i++) { digitalWrite(i, LOW); } // гасим все индикаторы

      float voltage = analogRead(A0) / 1024.0 * 10.0; // Измеряем, сколько Вольт, с шагом 0,15 // Формула на совести автора, я не прикасался :)

      for (byte i = 2; i <= 11; i++)
      {
        float x = (15.0 * (i - 1)) / 100.0;          // получаем последовательность 0.15, 0.30, 0.45, 0.60, 0.75, 0.90, 0.105, 0.120, 0.135, 0.150
        if(voltage > x) digitalWrite(i, HIGH);
      }
    }
     

    Ну или если совсем уж компактно: :rolleyes:
    Код (C++):
    void setup()
    {
      for (byte i = 2; i <= 11; i++) pinMode(i, OUTPUT);
    }

    void loop()
    {
      for (byte i = 2; i <= 11; i++) digitalWrite(i, ((float)(analogRead(A0) / 1024.0 * 10.0) > ((15.0 * (i - 1)) / 100.0)) ? HIGH : LOW);
    }
     
  5. danya plotnik

    danya plotnik Гик

    "Я слышу сильный плач в уголке. Ах, да, это я..."
     
    Последнее редактирование: 9 мар 2018
    issaom и Tomasina нравится это.
  6. Tomasina

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

    http://wiki.amperka.ru/
    В разделах Программирование на C++ и Мини-проекты с Arduino реально много полезной информации (даже я находил для себя что-то новенькое и более оптимальное), причем с понятными пояснениями по работе участков кода.
     
  7. NikitOS

    NikitOS Public enemy Администратор

    И о схеме.. В правом нижнем углу программы fritzing при клике на компонент появляются его свойства, там можно было выбрать номинал резистора и не писать это, и кстати клемник тоже там есть в 1й вкладке