
DED
06.05.2018
14:29:45
Всем привет, подскажите плз.
Делаю цикл без delay с использованием millis, управляю двумя релюшками. Требуется вместе со вторым реле включать первое и так же вместе их отключать. Ну дак вот, они включаются вместе, но первое реле отключается в первом конечном автомате после своего отработанного времени.
Не пройдите мимо, расскажите плз как исправить
Это все делаю на ардуино уно

Dolphin
06.05.2018
14:32:52
шоу ми код

Google

DED
06.05.2018
14:35:27

Dolphin
06.05.2018
14:35:41
на пастебин лучше

Динар
06.05.2018
14:36:22
Ты ж в атмел студии работал что пошло не так?)

Dolphin
06.05.2018
14:36:43

Maksim
06.05.2018
14:36:48

Andrey
06.05.2018
14:36:50
В текстовичке boards.txt появилось много новых записей

Dolphin
06.05.2018
14:37:05
и для некоторых тестов

DED
06.05.2018
14:37:37

Dolphin
06.05.2018
14:40:18
а все зашел

Динар
06.05.2018
14:41:06
61
Строка

Google

Динар
06.05.2018
14:41:12
Перепроверь

Dolphin
06.05.2018
14:42:21
unsigned long currentMillis = millis();
объяви глобально, и сделай инициализацию в setup
то же самое для previousMillis1
а вторая и так глобально
но инициализацию ей сделай начальную

DED
06.05.2018
14:43:41
Ща буду разбираться с этим, спасибо большое

Dolphin
06.05.2018
14:43:56
(ledState1 == LOW)
можно просто писать: (!ledState1)
(ledState1 == HIGH)
можно просто писать: (ledState1)
хотя скорей от платформы зависит, стоит проверить

Andrey
06.05.2018
14:44:48
То бишь инвертировать

Dolphin
06.05.2018
14:45:06
нет
проверка в условии

Andrey
06.05.2018
14:45:35
а, равно и не равно
надо идти спать, я уже туплю

DED
06.05.2018
14:45:58
! Пока не буду использовать, надо вникнуть получше во все

Andrey
06.05.2018
14:46:15
у тебя состояние светодиодов - их всего два?

DED
06.05.2018
14:46:36
А таки видел сегодня, что инвертирование это и знаю, что не равно

Dolphin
06.05.2018
14:47:03
Arduino.h
#define HIGH 0x1
#define LOW 0x0

DED
06.05.2018
14:47:18

Dolphin
06.05.2018
14:47:49
!0 = TRUE
!1= FALSE
0 = FALSE
1 = TRUE

DED
06.05.2018
14:48:32
Пара реле вчера и сегодня через делей работала нормально, но ничего допом тогда не получится прикрутить

Google

DED
06.05.2018
14:48:41
Параллельно

Dolphin
06.05.2018
14:48:56
if (ledState1 == LOW)
то же самое
if (ledState1 == 0)
или
if (!ledState1)
или
if (!0)
if (ledState1 == HIGH)
то же самое
if (ledState1 == 1)
или
if (ledState1)
или
if (1)

DED
06.05.2018
14:50:46
Ну это на будущее, чтоб знать)

Dolphin
06.05.2018
14:51:12
ладн это между делом )
но лучше пиши как пишешь, наглядней для новичка ;)
вот еще смотри
if((ledState2 == HIGH) && (currentMillis - previousMillis2 >= OffTime2))
{
}
else if ((ledState2 == LOW) && (currentMillis - previousMillis2 >= OnTime2))
зачем ты одно и то же условие проверяешь дважды?
if (currentMillis - previousMillis2 >= OffTime2) {
if (ledState2 == HIGH) {
}
else {
}
}
красифшей?

Artem
06.05.2018
14:54:25

Динар
06.05.2018
14:54:38
Нет скобки не везде красиво

Dolphin
06.05.2018
14:54:41

Динар
06.05.2018
14:55:02
int main(){
}
Так не красиво

DED
06.05.2018
14:55:14

Dolphin
06.05.2018
14:55:28

Динар
06.05.2018
14:55:40
int main()
{
}

DED
06.05.2018
14:55:51

Google

Динар
06.05.2018
14:55:54
а вот так красиво)

Dolphin
06.05.2018
14:56:00

Artem
06.05.2018
14:56:52

Dolphin
06.05.2018
14:57:16
с портянками кода в которых охуеешь читать
блядь пиздец

Artem
06.05.2018
14:59:17
меня на стиль олмана студия подсадила

Admin
ERROR: S client not available

Artem
06.05.2018
14:59:21
больше никак не хочу

Динар
06.05.2018
15:00:52
Вот ты тоже зомби))

Petr
06.05.2018
15:01:22
https://youtu.be/uyBePpPyd5c?t=16m9s

Artem
06.05.2018
15:01:29
в ассемблере скобки не нужны

Dolphin
06.05.2018
15:01:48
// конечный автомат для 1-го светодиода
if (currentMillis - previousMillis1 >= OffTime1) {
if (ledState1 == HIGH) ledState1 = LOW; // выключаем
else ledState1 = HIGH; // выключаем
previousMillis1 = currentMillis; // зап. время
digitalWrite(ledPin1, ledState1); // реализ. сост.
}
// конечный автомат для 2-го светодиода
if (currentMillis - previousMillis2 >= OffTime2) {
if (ledState2 == HIGH) ledState2 = LOW; // выключаем
else ledState2 = HIGH; // выключаем
previousMillis2 = currentMillis ; // зап. время
previousMillis1 = currentMillis ;
digitalWrite(ledPin2, ledState2); // реализ. сост.
digitalWrite(ledPin1, ledState2);
}
Вот ты тоже зомби))
ты просто не писал пока сложных условий, которые не оптимизируются Жегалкиным и дискреткой
у тебя previousMillis2 не инициализирована
ты во второе условие никогда не попадешь

Google

Dolphin
06.05.2018
15:05:59
а не попадешь
ох блеадь

DED
06.05.2018
15:07:06
Вот как было изначально, все работало почти правильно, единственное когда оба реле включались, первое отключалось раньше, чем второе
А надо, чтоб оно вместе с ним отключалось

Dolphin
06.05.2018
15:07:40

DED
06.05.2018
15:08:02
Сек

Dolphin
06.05.2018
15:09:38
// конечный автомат для 1-го светодиода
if (currentMillis - previousMillis1 >= OffTime1) {
ledState1 ^= HIGH; // переключаем
previousMillis1 = currentMillis; // зап. время
digitalWrite(ledPin1, ledState1); // реализ. сост.
}
// конечный автомат для 2-го светодиода
if (currentMillis - previousMillis2 >= OffTime2) {
ledState2 ^= HIGH; // переключаем
// зап. время
previousMillis1 = previousMillis2 = currentMillis;
digitalWrite(ledPin2, ledState2); // реализ. сост.
digitalWrite(ledPin1, ledState2);
}
setup(){
previousMillis1=previousMillis2=currentMillis=millis();
}


DED
06.05.2018
15:14:47
Arduino: 1.8.5 (Windows 10), Плата:"Arduino/Genuino Uno"
C:\Users\MS\Desktop\ARD\sketch_may06c\sketch_may06c.ino: In function 'void setup()':
sketch_may06c:25: error: 'currentMillis' was not declared in this scope
previousMillis1=previousMillis2=currentMillis=millis();
^
exit status 1
'currentMillis' was not declared in this scope
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

Dolphin
06.05.2018
15:15:22
unsigned long currentMillis;
вверху перед setup()

DED
06.05.2018
15:16:42
Я запутался просто где и что менял, дописал уже

Dolphin
06.05.2018
15:17:01
из loop() убери

DED
06.05.2018
15:17:16
Уже

Dolphin
06.05.2018
15:18:15

DED
06.05.2018
15:18:47
Да, выключается после определенного промежутка времени

Dolphin
06.05.2018
15:19:03
а не
состояние же не меняется

DED
06.05.2018
15:19:40
Теперь вообще ничего не включается

Dolphin
06.05.2018
15:19:47
Вот так сделай
// конечный автомат для 1-го светодиода
if (currentMillis - previousMillis1 >= OffTime1) {
ledState1 ^= HIGH; // переключаем
previousMillis1 = currentMillis; // зап. время
digitalWrite(ledPin1, ledState1); // реализ. сост.
}
// конечный автомат для 2-го светодиода
if (currentMillis - previousMillis2 >= OffTime2) {
ledState2 ^= HIGH; // переключаем
// зап. время
previousMillis2 = currentMillis;
digitalWrite(ledPin2, ledState2); // реализ. сост.
}