Выдержка времени без delay(pot1);
- Войдите на сайт для отправки комментариев
Вс, 03/12/2017 - 15:45
Здравствуйте, делаю штуку которая будет поднимаь из стакана пакетик с чаем через определенное время, работает до 25 сек, задержка выставляется потенциометром и выводися на Олед дисплей, задержка через delay(pot1);
Когда задержка меньше 25 сек, то все работет, а конгда больше то нет - ничего не происходит. Подскажите как сделать выдержку времени без делей. Перерыл и наши и иностранные сайты, ничего не нашел.
// Arduino Uno: // ---------------------- // Дисплей: SDA pin -> Arduino Analog 4 or the dedicated SDA pin // SCL pin -> Arduino Analog 5 or the dedicated SCL pin #include <OLED_I2C.h> #include <Servo.h> RBD::Timer timer; Servo servo1; int switchPin = 8; OLED myOLED(SDA, SCL, 8); extern uint8_t SmallFont[]; extern uint8_t MediumNumbers[]; extern uint8_t BigNumbers[]; const int in1 = 6; // управление двигателем const int in2 = 7; // управление двигателем int sensorValue = 0; void setup() { pinMode(switchPin, INPUT_PULLUP); pinMode(A0, INPUT); myOLED.begin(); myOLED.setFont(SmallFont); servo1.attach(3); servo1.write(230); pinMode(in1, OUTPUT); // драйверу двигателя pinMode(in2, OUTPUT); // драйверу двигателя digitalWrite(in1, LOW); digitalWrite(in2, HIGH); delay(5000); digitalWrite(in1, LOW); digitalWrite(in2, LOW); Serial.begin(9600); } void loop() { if(digitalRead(switchPin) == LOW) { int pot; int pot1; pot = pot/3; myOLED.clrScr(); myOLED.setFont(BigNumbers); myOLED.printNumI(pot, CENTER, 20); myOLED.update(); // digitalWrite(in1, LOW); // digitalWrite(in2, HIGH); // delay(1000); } else { servdvig(); } delay(10); } void servdvig() { int pot; int pot1; pot = analogRead(A0); pot = pot/3; pot1 = pot*1000; digitalWrite(in1, HIGH); digitalWrite(in2, LOW); delay(5000); digitalWrite(in1, LOW); digitalWrite(in2, LOW); servo1.write(70); delay(3600000); }
Миллис, пилять, МИЛЛИС!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Точно. Да поможет вам Святой millis().
Тыкните носом пожалуйста, вот сделал с миллис, но не работает:
Может вы напишете код по методичке #176
Тыкните носом пожалуйста, вот сделал с миллис, но не работает:
Зачот. 96 строка вообще вне конкуренции.
Тыкните носом пожалуйста, вот сделал с миллис, но не работает:
Зачот. 96 строка вообще вне конкуренции.
Ага, тоже поржал))
И надо ли городить такой огород только из-за пакетика с чаем? Он неплохо и в неподвижном состоянии заваривается. Хотя... Может не о пакетике речь?))
да, у меня есть трудности с програимрованием, но я учусь. так написал чтобы все заглохло на час. delay(3600000);
А на счет кода, вот это соблюдается, вроди как.
.......
Ну не может процессор уснуть вечным сном. А если уснет то не оживет. Вот вы закончили учебу(работу) и надо прийти завтра с утра. Вы что вышли за ворота и легли рядом спать до утра. Ну не живут сейчас так. Не работают по 16 часов в сутки. У людей есть часы. Часы в даном смысле это millis(). И вот человек едет домой спать, одтыхать, играть в онлайн игры. А утром едет на работу вовремя. Пользуясь этими часами.
Почитайте здесь. Простенько и доступно. Можете поштудировать qwone, но для неофитов у него слишком заумно. ИМХО.
UPD, поправил ссылку, криво вставилась.
Квон всем мозги заполоскал своими классами. Нужны они, не нужны - лепи их пачками.
hubll, что не так в работе вашего кода? Вы же написали контроллеру: ничего не делать 3600000 мсек, он ничего и не делает.
Сформулируйте для себя простыми словами и крайне подробно - какие действия МК должен совершить для получения результата таким, как вы его себе предствили.
выдержку времени в 3600000 он делает правильно, а вот тут delay(pot1);
Вот я и думаю как перети на миллис, или что-то другое.
Вот этот код весь
Для начала почитайте какие бывают типы данных, что то мне подсказывает, что проблемы начинаются после 32 секунд.
bwn прав, посмотрите, какую максимальную величину может хранить pot1:
---------------------
Тип данных int (от англ. integer - целое число) один их наиболее часто используемых типов данных для хранения чисел. int занимает 2 байта памяти, и может хранить числа от -32 768 до 32 767 (от -2^15 до 2^15-1)
---------------------
ООО. Спасибо большое, век живы век учись. проверил, там действительно 32 с, а дальше не работает.
да, у меня есть трудности с програимрованием, но я учусь.
Так потратьте часик и прочитайте пару раз весь раздел "Программирование", хоть будете представлять что можно, а что нельзя. ИМХО.
Согласен. Исправил int на long. Работает
Спасибо за помощь, туперь буду заравивать чай удобно, с уставкой от 0 до 341 с. Чуть позже скину фото того что получилось.