Мост Уитстона.
- Войдите на сайт для отправки комментариев
Пт, 12/04/2019 - 19:05
Приветствую!
В мосту два фоторезистора, один для дневного света, на другой падает свет от светодиода, яркость диода зависит от "i".
После нажатия кнопки напряжениеna на PA7 должно быть минимальным, строки 45-56
Редко , но иногда мост настраиваться на минимуму.
В программе есть проблема с надежным определением минимума.
Подскажите как это исправить ?
HardwareTimer pwmtimer4(4);
#include "EmonLib.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(PA0, PA1, PA2, PA3, PA4, PA5);
EnergyMonitor emon1;
float cur, acur[50], sumc;
int i = 0;
int ovfi = 0;
int (Irms) = 0;
int currentIrms = 0;
int previousIrms;
int maxIrms = 0;
int minIrms = 4095.0;
void setup()
{
pwmtimer4.pause();
pwmtimer4.setPrescaleFactor(3);
pwmtimer4.setOverflow(2000);
//pwmtimer4.setCompare(TIMER_CH2, 2880);
pwmtimer4.refresh();
pwmtimer4.resume();
pinMode(PB7, PWM); //duty regulated for balance
pinMode(PB6, INPUT_PULLDOWN);
pinMode(PB9, INPUT_PULLDOWN);
pinMode(PA7, INPUT); // Irms
lcd.begin(16, 2);
emon1.current(PA7, 2.8);
}
void loop()
{
ovfi = 3000 - i;
pwmtimer4.setCompare(TIMER_CH2, i);
previousIrms = currentIrms;
currentIrms = analogRead(PA7);
if (digitalRead(PB9) == HIGH) {
if (currentIrms != minIrms) {
if (previousIrms > currentIrms)
{
i++;
}
else
{ i --;
}
}
}
lcd.setCursor(0, 1);
lcd.print( currentIrms);
//lcd.print( minValue);
lcd.setCursor(8, 1);
lcd.print( i);
//delay(100);
emon1.calcVI(20, 2);
float Irms = emon1.Irms;
lcd.setCursor(0, 0);
lcd.print("U=");
lcd.print(Irms);
//delay (500);
}
пожалуй подпишусь
И в чём именно она состоит?
Не понял для чего нажимается кнопка, что должно произойти и т.п.
Более понятного объяснения не будет?
Тогда разбирайтесь сами.
Ну, можно добавить
И тогда i никогда не будет отрицательным.
Вывод i сделан ШИМом, знач яркость светодиода будет зависить от i только в среднем, за время существенно более периода ШИМа, а не мгновенно. А в стр.43 вводится пошти мгновенное значение. Отсюда и свистопляска. Надо усреднять введеное и по нему работать. Если устойчивость не потеряется при этом то заработает.
Пытаюсь добавить " if(i<0) i=0; " , открыл скобку и закрыл , но получаю ошибку
if (digitalRead(PB9) == HIGH) { if (currentIrms != minIrms) { if (previousIrms > currentIrms) if (i < 0) i = 0; { // открыл ///////////////////// { i++; } else { i --; } ///////////////// } // закрыл } }@ Logik
В ручной настройке (две кнопки) есть delay, добавил и здесь но не помагает.
if (digitalRead(PB9) == HIGH) { if (i < 3000) { i++; delay(100); } } if (digitalRead(PB6) == HIGH) { if (i > 0) { i--; delay(100); } }//Пытаюсь добавить " if(i<0) i=0; " , открыл скобку и закрыл , но получаю ошибку
ууу как все запущено... Короче забей, те не по силам.
Пытаюсь добавить " if(i<0) i=0; " , открыл скобку и закрыл , но получаю ошибку
Ошибка 1: Скобку открыл два раза подряд.
Ошибка 2: Условный оператор if...else применён не правильно.
До строки #10, 3 скобки открыты , после #20, 3 закрыты, #12 до #18 скобки для i
1) Две открытых скобки подряд - строки 10 и 12.
2) Нахрена там скобки, если тело оператора if написано там же, в строке 09 ?
3) Да и вся строка if (i < 0) i = 0; не на своём месте, нельзя её вставлять перед открывающей скобкой предыдущего оператора if. Синтаксиса Вы не знаете и написали полную хрень.
Количество открытых скоб = количество закрытых , когда убрать #10 тога скобка # 24 зекрывает loop
Дело не в количестве скобок... Код в сообщении #7 написан вообще неправильно.
Количество открытых скоб = количество закрытых , когда убрать #10 тога скобка # 24 зекрывает loop
Гена, ты сюда спорить прищел? Или советов более умных людей спрашивать?
Это та знаю , а как написать правильно = не знаю.
Это та знаю , а как написать правильно = не знаю.
че ты знаешь? ты даже данную тебе готовую строку в ставить в готовый код не можешь. Иди давай синтаксис Си учить - и пока не сможешь эту строчку вставить правильно - не возвращайся.
Тому кто 2х2 не знает, нет смысла интегралы обьяснять.
b707
Я не спорю только говорю что происходит когда убрать скобку
b707
Я не спорю только говорю что происходит когда убрать скобку
ну так почитай же книжку какую-нить! Или ты всю программу так писать думаешь - убирая и добавляя скобки наобум?
это if (i < 0) i = 0; равно
if (i < 0) { i = 0; }Valera19701
Спасибо, программа работает лучше.
Это та знаю , а как написать правильно = не знаю.
Ну, прочитайте Вы хоть какую-нибудь книжку, ну, пожалуйста. Ну, поймите Вы наконец, что нельзя программировать методом тыка.
... Ну, поймите Вы наконец, что нельзя программировать методом тыка.
А всё остальное методом ТЫКА делать можно!!! )))
конечно можна. людей например.
конечно можна. людей например.
главное не пальцем, а то моду взяли, из пробирки...
Вывод i сделан ШИМом, знач яркость светодиода будет зависить от i только в среднем, за время существенно более периода ШИМа, а не мгновенно. А в стр.43 вводится пошти мгновенное значение. Отсюда и свистопляска. Надо усреднять введеное и по нему работать. Если устойчивость не потеряется при этом то заработает.
Спасибо за подсказку, она помогла.