void loop() {
if (flagBars==0) {flagBars=1; flagSteps=0; bars=0;}
if (flagSteps==0){
if (bars < is_steps_of_motor){
digitalWrite (nENBL, 0);
digitalWrite(STEPPER_DIR, closed);}
else {digitalWrite (nENBL, 1); flagSteps=1;}}
DS18B20();
if (timerDSB==1 && flagD==0) {
Disp();
flagD=1; }
a_w = celsW; //получаем целые градусы
if (t==0) {
closed=1; //открывает, положение начального запуска
is_steps_of_motor = steps_of_motor; //где стоит
flagBars=0;
t=1; }
if (timerST==20 && flagSteps==1) {
closed=0; //закрывает
flagBars=0;}
if (timerST==40 && flagSteps==1) {
closed=1; //открываем
flagBars=0;
timerST=0;}
}
я отказался от whili, при таком коде надо чем то жертвовать, либо мотор четко работает датчик пролетает, либо наоборот. Сделал как в коде, недостаток могут пролетать такты шаговика, чуть больше прокрутит, но 13000 шагов на 1 см это не сильно влияет
вот так напишите, все остальное не трогайте - и все будет работать. Иногда интервалы считывания и конверсии DS18B20 будут больше запланированных - но не меньше.
void DS18B20()
{
byte data[12];
if (timerDSB>=0 && flagDR==0)
{
ds.reset();
ds.write(0xCC); //Обращение ко всем датчикам
ds.write(0x44); //Команда на конвертацию
timerDSB=0; flagDR=1;
}
if(timerDSB>=3 && flagDR==1)
{
ds.reset();
ds.write(0xCC);
ds.write(0xBE); // Чтение Scratchpad
for (byte i = 0; i < 9; i++)
{ // нам нужно 9 байт (с сотыми после запятой)
data[i] = ds.read ();
}
if (OneWire::crc8(data, 8) == data[8]) {//return; //проверяем CRC
celsW =((data[1] << 8) | data[0]) /16.0;} // Пересчитываем в температуру
timerDSB=0; flagDR=0; flagD=0;
}
}
согласен
что "согласен"-то? - ошибку свою поняли?
нет
блокирует таймер WDT?
нет
вы сделали то, что сказал Евгений в сообщении 45 ?
если брать #43 то таймер ST и нога 13 с диодом работают
нет
вы сделали то, что сказал Евгений в сообщении 45 ?
таймер работает, флаг стоит на 0
таймер работает, флаг стоит на 0
вы читать умееете? - прочитайте еще раз #45 внимательно - и сделайте ВСЕ В ТОЧНОСТИ, как там сказано.
Если и после этого не поймете - я уж и не знаю, как вам помочь.
таймер работает, флаг стоит на 0
вы читать умееете? - прочитайте еще раз #45 внимательно - и сделайте ВСЕ В ТОЧНОСТИ, как там сказано.
Если и после этого не поймете - я уж и не знаю, как вам помочь.
поставил на 50 сроке, тоже самое что и loop
таймер работает флаг на 0, таймер доходит до 0 флаг переходит на 1 и таймер и флаг начинают работать
таймер работает флаг на 0, таймер доходит до 0 флаг переходит на 1 и таймер и флаг начинают работать
код из #39 работает?
таймер работает флаг на 0, таймер доходит до 0 флаг переходит на 1 и таймер и флаг начинают работать
код из #39 работает?
я про него и писал
я про него и писал
ну значит проблемы больше нет, все работает? - поздравляю
работает, но не так как надо
но проблема понятна
при использования цикла пролетает таймер нуля и ждем пока дойдет до 0
правильно?
решается обнулением таймера после каждого цикла
но проблема понятна
при использования цикла пролетает таймер нуля и ждем пока дойдет до 0
правильно?
Правильно, только вот Вы отличаетесь редчайшим даром говорить так, что вообще не поймёшь что Вы хотели сказать.
Поэтому, давайте впредь, если у Вас есть вопрос, Вы
1. Выкладываете свежий скетч (хоть в каждом сообщении, пофиг)
2. Выкладываете копипасту из монитора порта - что печатается
Внятно объясняете в чём Ваш вопрос.
Например, сейчас, если Вы поняли то, что написали, я так понимаю, вопросов у Вас больше нет и тема закрыта? Или нет?
тема закрыта
решается обнулением таймера после каждого цикла
гланды через Ж :)
На самом деле надо исправить условия в процедуре DS18B20 - корень проблемы там, а не в том, что счетчик проскакивает
а как, если while может сработать в любой момент между 0-3 timerDSB
например в обоих условиях (строчки 04 и 11) - прописать не строгое равенство timerDSB==0, а "больше равно"
тогда уменьшется время между обнулением и чтением датчика, могут быть ошибки
тогда уменьшется время между обнулением и чтением датчика, могут быть ошибки
не уменьшается
я отказался от whili, при таком коде надо чем то жертвовать, либо мотор четко работает датчик пролетает, либо наоборот. Сделал как в коде, недостаток могут пролетать такты шаговика, чуть больше прокрутит, но 13000 шагов на 1 см это не сильно влияет
мотор на полный ход работает где то 0,4-0,6 секунд
вот так напишите, все остальное не трогайте - и все будет работать. Иногда интервалы считывания и конверсии DS18B20 будут больше запланированных - но не меньше.
вечером попробую на коде #39
только вместо градусов вставлю таймер и флаг, отпишу
только вместо градусов вставлю таймер и флаг, отпишу
лучше не надо. Простите за откровенность, но за время темы вы показали, что даже запятую в коде не всегда знаете, куда поставить.