Посудомоечная машина
- Войдите на сайт для отправки комментариев
Пт, 13/07/2018 - 14:48
Подкинули мне посудомойку бесплатно. Дело в том, что она без ЭБУ. Фирма не популярная. Все комплектующие работают. Решил я ее на китайской Uno сделать. Вот только она пинается. Я в IDE не спец, да и в программировании многого не знаю. В общем программа рабочая, но иногда слетает. Если код более менее правильный, дело может в посторонних шумах от 220?
Вот код
// Подключаем библиотеку прерывания по таймеру #include <TimerOne.h> // Вводим константы для пинов реле const int releAS = 12; // Реле аквастоп const int relePD = 11; // Реле привода дверцы моющего и дозатора ополаскивателя const int releKS = 10; // Реле клапана слива конденсата и сливного насоса const int releCN = 9; // Реле основного центробежного насоса const int releVN = 8; // Реле водяного нагревателя // Начальное состояние реле соответственно boolean AS = false; boolean PD = false; boolean KS = false; boolean CN = false; boolean VN = false; // Общие переменные для таймера volatile unsigned long times = 0; volatile unsigned long timer = 0; volatile unsigned long Times = 0; volatile unsigned int summtimes = 0; // Переменная кнопки "Пауза" volatile boolean clickPause; // Переменные для датчиков volatile float temp; // Датчик температуры воды int b; // Сигал при наборе воды volatile int regim; // Переменная режима работы volatile int r; // Счетчик режима volatile int s; // Счетчик воды boolean LED = false; // Переменные режимов int F1; // пауза int F2; // слив int F3; // пауза int F4; // набор int F5; // пауза int F6; // полоскание int F7; // пауза int F8; // полоскание int F9; // пауза int F10; // слив int F11; // пауза int F12; // набор int F13; // пауза int F14; // полоскание int F15; // пауза int F16; // полоскание int F17; // пауза int F18; // слив int F19; // пауза int F20; // набор int F21; // пауза int F22; // полоскание int F23; // пауза int F24; // слив int F25; // финиш int T1; // int T0; // int tempBrake; // Функция настройки системы void setup() { // Пины реле pinMode(releAS, OUTPUT); pinMode(relePD, OUTPUT); pinMode(releKS, OUTPUT); pinMode(releCN, OUTPUT); pinMode(releVN, OUTPUT); pinMode(13, OUTPUT); // Инициализация таймера Timer1.initialize(1000000); // шаг 1000000 мкрс. или 1 с. Timer1.attachInterrupt(UpTimer); // передача информации по серийному порту Serial.begin(9600); delay(1000); } // Функция прерывания по таймеру void UpTimer() { timer = timer + Times; LED = !LED; Serial.print("Температура: "); Serial.println(temp); Serial.print("Мойка: "); Serial.println(summtimes); Serial.print("Кнопка Play/Pause: "); Serial.println(clickPause); Serial.print("Таймер: "); Serial.println(times); Serial.print("Счетчик воды: "); Serial.println(s); Serial.print("Режим: "); Serial.println(regim); digitalWrite(releAS, AS); digitalWrite(relePD, PD); digitalWrite(releKS, KS); digitalWrite(releCN, CN); digitalWrite(releVN, VN); } // Основной код программы void loop() { noInterrupts(); times = timer; interrupts(); r = analogRead(1); if (times == 0) { if (r > 500 && r < 600) { regim = 1; F1 = 0; F2 = 5; F3 = 30; F4 = 35; F5 = 155; F6 = 160; F7 = 760; F8 = 1060; F9 = 1660; F10 = 1960; F11 = 1985; F12 = 1990; F13 = 2110; F14 = 2115; F15 = 2715; F16 = 2720; F17 = 3320; F18 = 3325; F19 = 3350; F20 = 3355; F21 = 3475; F22 = 3480; F23 = 4080; F24 = 4085; F25 = 4110; T1 = 70; T0 = 65; } if (r > 400 && r < 500) { regim = 2; F1 = 0; F2 = 5; F3 = 30; F4 = 35; F5 = 155; F6 = 160; F7 = 660; F8 = 780; F9 = 1280; F10 = 1400; F11 = 1425; F12 = 1430; F13 = 1550; F14 = 1555; F15 = 2155; F16 = 2160; F17 = 2760; F18 = 2765; F19 = 2790; F20 = 2795; F21 = 2915; F22 = 2920; F23 = 3520; F24 = 3525; F25 = 3550; T1 = 65; T0 = 60; } if (r > 250 && r < 350) { regim = 3; F1 = 0; F2 = 5; F3 = 30; F4 = 35; F5 = 155; F6 = 160; F7 = 460; F8 = 580; F9 = 880; F10 = 1000; F11 = 1025; F12 = 1030; F13 = 1150; F14 = 1155; F15 = 1455; F16 = 1460; F17 = 2060; F18 = 2360; F19 = 2385; F20 = 2390; F21 = 2510; F22 = 2515; F23 = 3115; F24 = 3120; F25 = 3145; T1 = 50; T0 = 45; } if (r > 650 && r < 750) { regim = 4; F1 = 0; F2 = 5; F3 = 30; F4 = 35; F5 = 155; F6 = 160; F7 = 460; F8 = 760; F9 = 1060; F10 = 1360; F11 = 1385; F12 = 1390; F13 = 1510; F14 = 1515; F15 = 1815; F16 = 1820; F17 = 2120; F18 = 2420; F19 = 2445; F20 = 2450; F21 = 2570; F22 = 2575; F23 = 3175; F24 = 3180; F25 = 3205; T1 = 50; T0 = 45; } if (r > 50 && r < 150) { regim = 5; F1 = 0; F2 = 5; F3 = 30; F4 = 35; F5 = 155; F6 = 160; F7 = 760; F8 = 1060; F9 = 1660; F10 = 1960; F11 = 1985; F12 = 1990; F13 = 2110; F14 = 2115; F15 = 2415; F16 = 2420; F17 = 2810; F18 = 2815; F19 = 2840; F20 = 2845; F21 = 2965; F22 = 2970; F23 = 3570; F24 = 3575; F25 = 3600; T1 = 60; T0 = 55; } if (r > 150 && r < 250) { regim = 6; F1 = 0; F2 = 5; F3 = 30; F4 = 35; F5 = 155; F6 = 160; F7 = 460; F8 = 520; F9 = 820; F10 = 825; F11 = 850; F12 = 855; F13 = 975; F14 = 980; F15 = 1280; F16 = 1285; F17 = 1585; F18 = 1590; F19 = 1615; F20 = 1620; F21 = 1740; F22 = 1745; F23 = 2345; F24 = 2350; F25 = 2375; T1 = 45; T0 = 40; } } // НАБОР ВОДЫ СЧЕТЧИК boolean But = digitalRead(0); if(But) b = 1; if(!But && b == 1) { s++; b = 0; delay(50); } // ТЕМПЕРАТУРЫ ВОДЫ ДАТЧИК float v = analogRead(3) * 5.0 / 1024.0; temp = (10.0 / (v * v) + 0.5) * 10; clickPause = digitalRead(2); // УСЛОВИЯ ПОСТАНОВКИ НА ПАУЗУ if (clickPause) { if (summtimes == 1 && clickPause) { summtimes = 0; while(clickPause) { clickPause = digitalRead(2); } } if (summtimes == 0 && clickPause) { summtimes = 1; while(clickPause) { clickPause = digitalRead(2); } } } else Times = summtimes; // ЦИКЛ ОПОЛАСКИВАНИЕ if (summtimes == 0) { digitalWrite(13, LED); AS = false; PD = false; KS = false; CN = false; VN = false; } if (summtimes == 1) { digitalWrite(13, HIGH); if(times > F1 && times < F2) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F2 && times < F3) { AS = false; PD = false; KS = true; CN = false; VN = false; } if(times > F3 && times < F4) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F4 && times < F5) { tempBrake = 1; if(s < 750) { AS = true; PD = false; KS = false; CN = false; VN = false; } if(s > 750) { AS = false; PD = false; KS = false; CN = false; VN = false; timer = F5; } } if(times > F5 && times < F6) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F6 && times < F7) { AS = false; PD = false; KS = false; CN = true; if(temp < T1 && tempBrake == 1) { VN = true; } if(temp > T1 && tempBrake == 1) { tempBrake = 0; VN = false; } if(temp < T0 && tempBrake == 0) tempBrake = 1; } if(times > F7 && times < F8) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F8 && times < F9) { AS = false; PD = false; KS = false; CN = true; if(temp < T1 && tempBrake == 1) { VN = true; } if(temp > T1 && tempBrake == 1) { tempBrake = 0; VN = false; } if(temp < T0 && tempBrake == 0) tempBrake = 1; } if(times > F9 && times < F10) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F10 && times < F11) { AS = false; PD = false; KS = true; CN = false; VN = false; } if(times > F11 && times < F12) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F12 && times < F13) { tempBrake = 1; if(s < 1500) { AS = true; PD = false; KS = false; CN = false; VN = false; } if(s > 1500) { AS = false; PD = false; KS = false; CN = false; VN = false; timer = F5; } } if(times > F13 && times < F14) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F14 && times < F15) { AS = false; PD = false; KS = false; CN = true; if(temp < T1 && tempBrake == 1) { VN = true; } if(temp > T1 && tempBrake == 1) { tempBrake = 0; VN = false; } if(temp < T0 && tempBrake == 0) tempBrake = 1; } if(times > F15 && times < F16) { AS = false; PD = true; KS = false; CN = false; VN = false; } if(times > F16 && times < F17) { AS = false; PD = false; KS = false; CN = true; if(temp < T1 && tempBrake == 1) { VN = true; } if(temp > T1 && tempBrake == 1) { tempBrake = 0; VN = false; } if(temp < T0 && tempBrake == 0) tempBrake = 1; } if(times > F17 && times < F18) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F18 && times < F19) { AS = false; PD = false; KS = true; CN = false; VN = false; } if(times > F19 && times < F20) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F20 && times < F21) { tempBrake = 1; if(s < 2250) { AS = true; PD = false; KS = false; CN = false; VN = false; } if(s > 2250) { AS = false; PD = false; KS = false; CN = false; VN = false; timer = F5; } } if(times > F21 && times < F22) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F22 && times < F23) { AS = false; PD = false; KS = false; CN = true; if(temp < T1 && tempBrake == 1) { VN = true; } if(temp > T1 && tempBrake == 1) { tempBrake = 0; VN = false; } if(temp < T0 && tempBrake == 0) tempBrake = 1; } if(times > F23 && times < F24) { AS = false; PD = false; KS = false; CN = false; VN = false; } if(times > F24 && times < F25) { AS = false; PD = false; KS = true; CN = false; VN = false; } if(times > F25) { timer = 0; Times = 0; summtimes = 0; } } }Код большой, чтобы сильно не вникать... Прерывание по таймеру, оно же таймер. Согласно заданного режима работы переменным ряда F(x) и T(x) присваиваются значения. Через оператор условия if выполняются циклы согласно показаний датчиков температуры, счетчика воды. Обычно клинит в начале на 12 секунде или в конце цикла мойки перед последним сливом.
С этим Вам вот сюда.
А если у Вас техническая проблема, то потрудитесь объяснить её понятным техническим языком.
Или Вы думаете, что кто-то начнёт подробно изучать Ваш код с целью определить как именно и зачем она у Вас "пинается"?
Схему соединений и фото монтажа выложите, пожалуйста.
На будущее - это раздел для готовых проектов. Для вопросов и просьб о помощи есть другие разделы.
Код большой, чтобы сильно не вникать... Прерывание по таймеру, оно же таймер. Согласно заданного режима работы переменным ряда F(x) и T(x) присваиваются значения. Через оператор условия if выполняются циклы согласно показаний датчиков температуры, счетчика воды. Обычно клинит в начале на 12 секунде или в конце цикла мойки перед последним сливом.
Данунах, код у него большой. Там и датчиков куча.
Датчик - 500 евро
реле - 300 евро
нетолерантный софт - 2000евро
Извините, уважаемый.
Но соглашусь с ЕвгенийП.
Придумайте свой алоритм и его программируйте.
Удачи!
Еще раз, извините.
Ваша программа не читаема. При этом скорость выполнения очень маленькая.
Может стоит все-таки перейти на ООП?
И события по прерываниям?
Не пойму этих высказываний про евро... Сразу накинулись как шакалы. Проект готовый. Машинка работает. А кому в лом в код вникать — не утруждайте себя в комментариях.
Уважаемый, а как нам понять Ваше "пинается"? Вот прям натурально берет Вас за шкирятник, размахивается дверцей, и по жопе? Тогда я понимаю, почему Вы такой нервный, конечно, но - может Вы что-то другое имели ввиду?
Изложите на понятном языке, что именно происходит не так. Код Ваш и правда сложен для понимания, поскольку комментариев там практически нет, зато есть неимоверное количество переменных с ничего не говорящими именами, зато повторяющимеся функциями, если верить тем немногим комментарием, которые там есть. :)
Подкинули мне бричку бесплатно, фирма непопулярная. Проблема в том, что под капотом пусто. Решил сделать движитель из своего металлолома. Только вот она сопротивляется. В автоделах я не спец, да и вообще не много в этой теме знаю. Вобщем-то всё рычит и дым пускает, только на выезде из гаража встает колом. Если я все правильно собрал, может дело в заливке пола гаража?
Расскажу по порядку.
Пины с 8 по 12 подключены через мосфеты к реле.
Соответственно под них идут булевые переменные.
Переменная times считывается в цикле loop() и присваевает значение переменной timer счетчика (прерывание по таймеру). Так как прерывания срабатывают с момента запуска программы, переменная Times дает возможность прерывать увеличение значения таймера.
В свою очередь в цикле loop() происходит изменение значения Times:
if (clickPause) { if (summtimes == 1 && clickPause) { summtimes = 0; while(clickPause) { clickPause = digitalRead(2); } } if (summtimes == 0 && clickPause) { summtimes = 1; while(clickPause) { clickPause = digitalRead(2); } } } else Times = summtimes;Если кнопка Пуск/Пауза нажата проверяется условие прерывания счетчика, если отпущена - присваевается соответствующее значение для Times.
if (summtimes == 0) { digitalWrite(13, LED); AS = false; PD = false; KS = false; CN = false; VN = false; } if (summtimes == 1) { ....... ....... }И проверяется условие на выполнение работы или ее прерывание.
Череда if() можно бы и упрастить в виде case()... Но в целом это последовательность условий по запуску или остановке блоков посудомоечной машины.
// НАБОР ВОДЫ СЧЕТЧИК boolean But = digitalRead(0); if(But) b = 1; if(!But && b == 1) { s++; b = 0; delay(50); } // ТЕМПЕРАТУРЫ ВОДЫ ДАТЧИК float v = analogRead(3) * 5.0 / 1024.0; temp = (10.0 / (v * v) + 0.5) * 10; clickPause = digitalRead(2);Счетчик воды - крыльчатка с магнитом и герконом. Производится считывание количества оборотов колеса. Температура считывается по собственной формуле через термопару машины.
if(times > F25) { timer = 0; Times = 0; summtimes = 0; s = 0; timer = 0; tempBrake = 0; AS = false; PD = false; KS = false; CN = false; VN = false; delay(10000); }По итогу выполнения последнего условия машинка должна сброситься в ноль, но это не всегда происходит. Да и почему программа после 12 секунд работы производит сброс данных переменных до начальных?..
Подкинули мне бричку бесплатно, фирма непопулярная. Проблема в том, что под капотом пусто. Решил сделать движитель из своего металлолома. Только вот она сопротивляется. В автоделах я не спец, да и вообще не много в этой теме знаю. Вобщем-то всё рычит и дым пускает, только на выезде из гаража встает колом. Если я все правильно собрал, может дело в заливке пола гаража?
Скажем так, что двигатель есть, а как подключить систему питания, форсунки подстроить и коробку передач подобрать. Так вот тут проблема с настройкой, а не двигателем и бричкой...
Просто здесь поязвить любят, да под**бнуть. На другое видимо мозг истощен))))
Т.е. как именно пинается нам так и не расскажут? Судя по коду, там до хрена где пинаться можно. ну, например,
А что делать, если она, сцуко, равна F2 или там F3, ну и далее по списку? Ничго не делать, получается.
Та же хрень про ифы, связанные с r чуть повыше.
А вообще, когда в коде видишь глобальные переменные times и Times - рупь за сто - толком работать не будет :(
Это условия временных промежутков. F0 = 0, F1 = 5, F3 = 35... Если время по таймеру в промежутке от F0 до F1, то есть больше 0 и меньше 5, происходит одно действие. Почему не будет работать, если глобальные переменные Times и times?
Простите, про переменную r не упомято... Это считывается сопротивление на тумблере выбора режима работы. Тумблер — шесть делителей напряжения. Выбираешь режим, временнЫм переменным ряда F и T присваиваются значения. Это при условии, что таймер не был запущен.
Т.е. как именно пинается нам так и не расскажут? Судя по коду, там до хрена где пинаться можно. ну, например,
Выше написано
По итогу выполнения последнего условия машинка должна сброситься в ноль, но это не всегда происходит. Да и почему программа после 12 секунд работы производит сброс данных переменных до начальных?..
Принцип работы.
Действия пользователя : Подаем питание >> Выбираем режим>> Нажимаем кнопку Play/Pause
Если мойка еще не производится, т.е. таймер равен 0, режим можно изменить. Выбрали к примеру режим 1. Делитель напряжения на тумлере переключения выдает на ардуино 2.5V, или значение 524. Оно может выдаваться 523, 520. Для этого выставлено условие с нижней и верхней границей if (r > 500 && t < 600). Происходит присвоение переменных ряда F и T.
if (r > 500 && r < 600) { regim = 1; F1 = 0; F2 = 5; F3 = 30; F4 = 35; F5 = 155; F6 = 160; F7 = 760; F8 = 1060; F9 = 1660; F10 = 1960; F11 = 1985; F12 = 1990; F13 = 2110; F14 = 2115; F15 = 2715; F16 = 2720; F17 = 3320; F18 = 3325; F19 = 3350; F20 = 3355; F21 = 3475; F22 = 3480; F23 = 4080; F24 = 4085; F25 = 4110; T1 = 70; T0 = 65; }Далее выполняются условия
То есть:
1.
if(times > F1 && times < F2) { AS = false; PD = false; KS = false; CN = false; VN = false; }если (times > 0 && times < 5) значение выводов реле LOW ( временная задержка);
2.
if(times > F2 && times < F3) { AS = false; PD = false; KS = true; CN = false; VN = false; }если (times > 5 && times < 30) значение выводов реле LOW, кроме KS (происходит слив воды);
3. Вторая временная задержка;
4.
if(times > F4 && times < F5) { tempBrake = 1; if(s < 750) { AS = true; PD = false; KS = false; CN = false; VN = false; } if(s > 750) { AS = false; PD = false; KS = false; CN = false; VN = false; timer = F5; }если (times > 35 && times < 155)
Отключается блокировка нагрева для следующего условия по таймеру (times > 160 && times < 760) работы насоса мойки и нагревателя:
Если счетчик воды (s < 750), аквастоп открыт, если (s > 750), аквастоп закрыт и происходит скачок по времени. Напор воды бывает разный, поэтому на набор выделяется 120 секунд. В среднем набор воды занимает 65 - 70 секунд.
Так согласно значению таймера происходит последовательное выполнение условий if.
ВНИМАНИЕ!!!
ВОПРОС: "ПО КАКОЙ ПРИЧИНЕ ПРОИСХОДИТ СБОЙ - СБРОС ПЕРЕМЕННЫХ ТАЙМЕРА НА 12 СЕКУНДЕ?
volatile unsigned long times = 0; volatile unsigned long timer = 0; volatile unsigned long Times = 0; volatile unsigned int summtimes = 0; void setup() { // Инициализация таймера Timer1.initialize(1000000); // шаг 1000000 мкрс. или 1 с. Timer1.attachInterrupt(UpTimer); //Включена передача информации по серийному порту Serial.begin(9600); delay(1000); } void UpTimer() { timer = timer + Times; } void loop() { noInterrupts(); times = timer; interrupts(); if(times > 0 && times < 5) { ....... } if(times > 5 && times < 30) { ....... } if(times > 30 && times < 35) { ....... } }P.S. " Если и дальше в комментариях писать чушь, которая не относится к данной теме, то проблему не решить"
Работать-то оно будет, компиляторы нонче умные. Но так не принято делать. Потому что разница только в регистре букв, и ошибится и запутаться при отладке очень легко.
Всем спасибо!!!
Проблема решена
Ты вообще читал, что тебе пишут? А если равно 5, то в какую категорию попадает? Ни в какую. И так же про всё остальное.
Потому что в них очень легко запутаться. Но дело даже не в этом. Человек, который пишет так, обязательно напишет "что-нибудь ещё".
Опыт показывает, что программы с такими закидонами нормально не работают.
Проблема решена
Судя по коду, решена до следующего глюка.
Ты вообще читал, что тебе пишут? А если равно 5, то в какую категорию попадает? Ни в какую. И так же про всё остальное.
А нафига мне эта 5???
Я мог написать >= или <=, но это так ринципиально потерять в таймере секунду?
По поводу Times и times... Это разные переменные и я это учитываю. Не наю кому как, а мне так проще...
Я мог написать >= или <=, но это так ринципиально потерять в таймере секунду?
Принципиально - захватить границы проверяемого интервала. Вот я смотрю, вы паяете хорошо. Наверное понимаете, что такое оставить вход без подтяжки. Ну вот тут то же самое.
Ну, проще, так проще. Сюда-то зачем пришёл, если всё лучше всех знаешь? Делай как хочешь. Только не плачь потом, что глючит.
Да и про программирования через цифровой автомат ТС не слышал ни разу.
ПС:#258
Кстати про категории...
А если (timer > 20 && timer < 40) одно действие, а если (timer > 80 && timer < 120) второе действие, куда здесь выпадет промежуток 40 - 80???
Переменные не меняюстя, первое действие продолжается до 81.
В моем случае, (timer > 20 && timer < 40) процесс длится 20 секунд, как мне и нужно, а не 19...
if(times == 1) { AS = false; PD = false; KS = false; CN = true; VN = false; } if(times == 40) { AS = false; PD = false; KS = true; CN = false; VN = false; } if(times ==80) { AS = false; PD = true; KS = false; CN = false; VN = false; }В данномслучае по событию присвоится значение и будет выполняться до следующего события. Или я не прав?
В моем случае, (timer > 20 && timer < 40) процесс длится 20 секунд, как мне и нужно, а не 19...
А посчитать пальцев не хватает? Ваш процесс состоит из
21, 22, ... 29, 30 ... привлекаем пальцы ног ... 31, ..., 39 ой!!! всего 19 получилось :((((
Может я не программист и не все знаю
int v; int timer; boolean led; void setup() { pinMode(9, OUTPUT); } void loop() { if(timer > 5 && timer < 7) led = true; if(timer > 15 && timer < 17) led = false; if(timer > 25 && timer < 27) led = true; if(timer > 35 && timer < 37) led = false; if(timer > 45 && timer < 47) led = true; if(timer > 50) timer = 0; digitalWrite(9, led); delay(1000); timer=timer+1; }Почему этот код работает так как я хотел:
timer = 6 - светодиод загорается
timer = 26 - светодиод гаснет
timer = 36 - светодиод загорается
timer = 46 - светодиод гаснет
и почему-то здесь между зажиганием и угасание светодиода 26 - 6 = 20 секунд...
Почему это неправильно?
И горит с 6 по 16 секунды
int v; int timer; boolean led; void setup() { pinMode(9, OUTPUT); } void loop() { if(timer == 6) led = true; if(timer == 16) led = false; if(timer == 26) led = true; if(timer == 36) led = false; if(timer == 46) led = true; if(timer > 50) timer = 0; digitalWrite(9, led); delay(1000); timer=timer+1; }И может это тоже самое?
ВладиславНово, а теперь тоже самое но через millis() без delay()
Просто сравнение
можно пропустить, а вот
программа полюбому прочитает
ВладиславНово, а теперь тоже самое но через millis() без delay()
Нафига? У ТС и так всё работает :)
int v; int timer; int times; boolean led; void setup() { pinMode(9, OUTPUT); } void loop() { timer = millis() - times; if(timer > 5000 && timer < 7000) led = true; if(timer > 15000 && timer < 17000) led = false; if(timer > 25000 && timer < 27000) led = true; if(timer > 35000 && timer < 37000) led = false; if(timer > 45000 && timer < 47000) led = true; if(timer > 50000) times = millis(); digitalWrite(9, led); }Так что было то?
Типы переменных в уравнениях и сравнениях не совпадали и в кодировке после набора воды F12 -F13 ошибка была, таймеру присваивальсь значение F5 вместо F13.
https://www.youtube.com/watch?v=T3y10inc4ks
Хаха
Люди. Я не хочу показать, что я супер программист и мне пофиг на Ваше мнение. Я бы не написал бы сюда... Если вы не можете или не хотите объяснить, прошу, пожалуйста скиньте ссылку на умные книжки по программированию.
А пока я вижу кучу умников в коронах.
ВладиславНово, зачем вам ссылки на умные книги. Их надо не только периодически читать, но и понимать что в них написано. И блин на каждую надо потритить не меньше недели. Опять же книги делятся на Синтаксис языка Си и на умение правильно организовывать программу. А у вас F5 вместо F13, а дальше что E2 на E4 и потом прикрыться конем , мат на 10 шагу. Ведь Си это язык высокого уровня, так почему вы на нем пишете как на ассемблере .
Потому что я программирую 4 месяца.
Если не считать года в шараге на Pascal.
И то это было 8 лет назад. А душа рвется... Вот посудомойке мозг приделал... Работает... Как надо работает. Но согласно подсказкам выше, это не правильно, потому что ВЫСОКАЯ ЛОГИКА и мое низкое знание сделали кое-как работающую говнопрограмму.
Если вы не можете или не хотите объяснить, прошу, пожалуйста скиньте ссылку на умные книжки по программированию.
Дорогой, Вот ты написал, что оказывается перепутал переменные.
в кодировке после набора воды F12 -F13 ошибка была, таймеру присваивальсь значение F5 вместо F13.
А разве я тебе не писал вчера, что так бывает всегда, когда у переменных похожие имена, что их крайне трудно не перепутать? Не в одном месте, так в другом обязательно будет ошибка и толком такие программы не работают. Не писал я тебе вот этого?
Потому что в них очень легко запутаться. Но дело даже не в этом. Человек, который пишет так, обязательно напишет "что-нибудь ещё".
Опыт показывает, что программы с такими закидонами нормально не работают.
Писал.
Но ты не слушаешь, что тебе говорят специалисты, ты послал меня "на" и сказал, что тебе так удобнее.
Ну, удобнее, так удобнее, только нахрена потом заявлять, что
А пока я вижу кучу умников в коронах.
Т.е. я тратил на тебя время, писал тебе как правилльно делать, и как нельзя делать, ты посчитал себя умнее всех, послал меня, а теперь, когда получил прямое подтверждение моих слов в собственном коде, заявлешь, что видишь тут кучу умников, которые не хотят тебе помогать?
Давай я не буду писать тебе кого вижу я, а то роскомнадзор сайт закроет.
Вот посудомойке мозг приделал... Работает... Как надо работает. Но согласно подсказкам выше, это не правильно, потому что ВЫСОКАЯ ЛОГИКА и мое низкое знание сделали кое-как работающую говнопрограмму.
Вы совешенно правы. Вы умнее всех. Собравшиеся здесь придурки только и могут, что щёки надувать и неостроумно стебаться. Молодец. А теперь успокойтесь и продолжайте с этим жить. Кстати, почитайте пост #46, внимательно. А теперь окончательно успокойтесь и продолжайте с этим жить.
Я был не прав... Соглашусь не совсем, что писали вы. Но что за чушь пишут другие?
Я ошибся в том, что скопировал код условия
if(times > F4 && times < F5) { tempBrake = 1; if(s < 750) { AS = true; PD = false; KS = false; CN = false; VN = false; } if(s > 750) { AS = false; PD = false; KS = false; CN = false; VN = false; timer = F5; }В условие
{ tempBrake = 1; if(s < 750) { AS = true; PD = false; KS = false; CN = false; VN = false; } if(s > 750) { AS = false; PD = false; KS = false; CN = false; VN = false; timer = F5; } }Поэтому программа возвращалась к циклу 4.
Некоторые переменные (temp и T1(T0) имели разные типы данных.
После этих исправлений все лаги пропали. Посудомойска отработала 10 циклов из 10 без нареканий согласно кода.
Никого на*** я не посылал, а если все сообщения принимать только на себя, то это нужно быть очень толерантным.
Я не считаю здесь идиотами никого - ни Вас, ни себя.
А если в переменных проблема, то тут черт ногу сломит
http://arduino.ru/forum/proekty/sistema-kontrolya-grouboksa-stolknulsya-...
Я не считаю здесь идиотами никого - ни Вас, ни себя.
А если в переменных проблема, то тут черт ногу сломит
http://arduino.ru/forum/proekty/sistema-kontrolya-grouboksa-stolknulsya-s-problemoi
ПС: Если вам хочется увидеть как писать код чуть получше то отсюда #25