Доброго времени суток, подскажите пожалуйста в чем "затык"(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); }
Чам вам if не угодил: //if (vin > minn) digitalWrite (12, LOW); //if (vin < maxx) digitalWrite (12, HIGH); ? А switch... я даже затрудняюсь понять, что вы от компилятора хотите.
по IF неработает пробывал по switch тоже самое 12 выход "включился" а далее без изменений при выходе за приделы мин и макс. по шнуру напругу измеряет и пишет на компе
"пробывал по switch тоже самое" ??? что то же самое? эта программа (точнее весь switch) не компилируется. она синтаксически неправильная.
Чего-то жирно для первой программы. Язык надо учить по порядку. Тут куча проблем, вытекающих из нулевого понимания того, что делаете. int minn = 12.40; — int целое число case < "minn": — синтаксически бред vin() — это не функция
Serial.print("INPUT V= "); Serial.println(vin,2); какие значения выводит? и с какой стати оно должно меняться?
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 то реле отключает "заряд"
Так уберите 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); //низкое напряжение - включаем
Код (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 вольт, реле = тишина
Судя по логу: 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.
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 отключаю клему, ничего..
Для проверки потикайте реле принудительно. 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.
Serial.println(vin,2); округление до 2-х знаков после запятой думаю загадка здесь(переменная vin) пощелкала и всего то