Первая программа

Тема в разделе "Arduino & Shields", создана пользователем Алекс55, 5 дек 2016.

  1. Алекс55

    Алекс55 Нуб

    Доброго времени суток, подскажите пожалуйста в чем "затык"(20 лет ничего не писал...)

    программа для управления зарядкой аккумулятора
    при достижении указанного напряжения реле отключается.
    Код (C++):
      int analogInput = A1;
    float vout = 0.0;
    float vin = 0.0;
    int minn = 12.40;
    int maxx = 12.70;
    int value = 0;
    float R1 = 30000.0;
    float R2 = 7500.0;
    void setup(){
       pinMode(analogInput, INPUT);
       Serial.begin(9600);
       Serial.print("DC VOLTMETER");
       pinMode(12, OUTPUT);
    //   digitalWrite (12, HIGH);
    }
    void loop(){
       // read the value at analog input
       value = analogRead(analogInput);
       vout = (value * 5.0) / 1023.0; // see text
       vin = vout / (R2/(R1+R2));
     
    Serial.print("INPUT V= ");
    Serial.println(vin,2);

    //  String str = "a";

      switch(vin())
      {
        case < "minn":
        digitalWrite (12, LOW);

          break;
        case > "maxx":
        digitalWrite (12, HIGH);

          break;
      }

    //if (vin > minn) digitalWrite (12, LOW);

    //if (vin < maxx) digitalWrite (12, HIGH);

    delay(1000);
    }
     
  2. mcureenab

    mcureenab Гуру

    Чам вам if не угодил:

    //if (vin > minn) digitalWrite (12, LOW);

    //if (vin < maxx) digitalWrite (12, HIGH);

    ?

    А switch... я даже затрудняюсь понять, что вы от компилятора хотите.
     
  3. Алекс55

    Алекс55 Нуб

    по IF неработает
    пробывал по switch тоже самое
    12 выход "включился" а далее без изменений при выходе за приделы мин и макс.
    по шнуру напругу измеряет и пишет на компе
     
  4. mcureenab

    mcureenab Гуру

    "пробывал по switch тоже самое" ??? что то же самое? эта программа (точнее весь switch) не компилируется. она синтаксически неправильная.
     
  5. rkit

    rkit Гуру

    Чего-то жирно для первой программы. Язык надо учить по порядку. Тут куча проблем, вытекающих из нулевого понимания того, что делаете.
    int minn = 12.40; — int целое число
    case < "minn": — синтаксически бред
    vin() — это не функция
     
  6. mcureenab

    mcureenab Гуру

    Serial.print("INPUT V= ");
    Serial.println(vin,2);

    какие значения выводит? и с какой стати оно должно меняться?
     
  7. Алекс55

    Алекс55 Нуб

    DC VOLTMETERINPUT V= 12.41
    INPUT V= 12.71
    INPUT V= 12.73
    INPUT V= 12.73
    INPUT V= 12.73
    INPUT V= 12.73
    INPUT V= 12.73
    INPUT V= 12.73
    INPUT V= 12.76
    INPUT V= 12.78
    INPUT V= 12.76
    INPUT V= 12.76
    ардуно подключенна к аккомулятору, а тот через реле к источнику питания 20 вольт(+резистор)
    если напряжение меньше 12.4 то реле поключает "заряд"
    если напряжение меньше 12.7 то реле отключает "заряд"
     
  8. Алекс55

    Алекс55 Нуб

    +
     

    Вложения:

    • photo.jpg
      photo.jpg
      Размер файла:
      1,5 МБ
      Просмотров:
      594
  9. mcureenab

    mcureenab Гуру

    Так уберите switch.
    << int minn =12.40;
    <<int maxx =12.70;
    float minn =12.40;
    float maxx =12.70;
    ...

    if (vin > maxx) digitalWrite (12, LOW); // высокое напряжение - выключаем
    if (vin < minn) digitalWrite (12, HIGH); //низкое напряжение - включаем
     
  10. Алекс55

    Алекс55 Нуб

    Код (C++):

      int analogInput = A1;
    float vout = 0.0;
    float vin = 0.0;
    float minn = 12.40; // напряжение при котором заряд включается
    float maxx = 12.70; // напряжение при котором заряд выключается
    int value = 0;
    float R1 = 30000.0; // сопротивление резистора 1
    float R2 = 7500.0;  // сопротивление резистора 2

    void setup(){
      pinMode(analogInput, INPUT);
      Serial.begin(9600);
      Serial.print("DC VOLTMETER");
      pinMode(12, OUTPUT);
    }
    void loop(){
      // read the value at analog input
      value = analogRead(analogInput);
      vout = (value * 5.0) / 1023.0; // see text
      vin = vout / (R2/(R1+R2));
     
    Serial.print("INPUT V= ");
    Serial.println(vin,2);

    if (vin > maxx) digitalWrite (12, LOW); // высокое напряжение - выключаем
    if (vin < minn) digitalWrite (12, HIGH); //низкое напряжение - включаем

    delay(1000);
    }

     
    отключаю акк напряжение 0 вольт,
    реле = тишина:(
     
  11. mcureenab

    mcureenab Гуру

    Serial.print("INPUT V= ");
    Serial.println(vin,2);
    ?
     
  12. mcureenab

    mcureenab Гуру

    Судя по логу:

    INPUT V= 12.71
    INPUT V= 12.73
    INPUT V= 12.73
    INPUT V= 12.73
    INPUT V= 12.73
    INPUT V= 12.73
    INPUT V= 12.73
    INPUT V= 12.76
    INPUT V= 12.78
    INPUT V= 12.76
    INPUT V= 12.76


    напряжение уже выше порога 12.7.
     
  13. Алекс55

    Алекс55 Нуб

    INPUT V= 12.37
    INPUT V= 12.34
    INPUT V= 12.29
    INPUT V= 12.34
    INPUT V= 12.37
    INPUT V= 0.05
    INPUT V= 0.12
    INPUT V= 0.00
    INPUT V= 3.25
    INPUT V= 0.00
    INPUT V= 0.00
    INPUT V= 0.00
    INPUT V= 0.00
    отключаю клему, ничего..
     
  14. mcureenab

    mcureenab Гуру

    Для проверки потикайте реле принудительно.

    if(vin > maxx) digitalWrite (12, LOW);// высокое напряжение - выключаем
    if(vin < minn) digitalWrite(12, HIGH);//низкое напряжение - включаем

    delay(1000);
    digitalWrite (12, LOW);
    delay(2000);
    digitalWrite (12, HIGH);
    delay(1000);
    digitalWrite (12, LOW);
    delay(2000);
    digitalWrite (12, HIGH);

    может просто пин не тот?
    Вместо 12 изобразите имя пина на плате Arduino.
     
  15. Алекс55

    Алекс55 Нуб

    Serial.println(vin,2);
    округление до 2-х знаков после запятой
    думаю загадка здесь(переменная vin)


    пощелкала и всего то
     
  16. mcureenab

    mcureenab Гуру

    округление только на вывод в лог влияет.
    значит релетработает
     
  17. Алекс55

    Алекс55 Нуб

    поменял HIGH и LOW;)
    Работает спасибо
     
  18. mcureenab

    mcureenab Гуру

    релешка инвертированная. было такое подозрение...