Помогите написать трудный код
- Войдите на сайт для отправки комментариев
Втр, 10/06/2014 - 22:46
Если значение на аналог 1 меньше 300 тогда горят светодиоды 2,3,4.
Если значение на аналог 1 больше 300 тогда работает следующий алгоритм
Если значение меньше чем 700 на аналог 2 => тогда включить светодиоды: 6,7,8,9
ЕСЛИ значение от 700 до 750 тогда выключить все светодиоды и влключить светодиоды 4,5,6
если значение от 750 до 800 тогда выключить все светодиоды и включить светодиоды 3,4,10
Если значение от 800 до 850 тогда выключить все светодиоды и включить светодиоды 2,5,6
но если вдруг значение на аналог 1 стало меньше 300 - тогда оставить гореть прошлое значение
НАПРИМЕР - ардуино подключается в питанию - горят светодиоды 2,3,4
вдруг стало знаение 350 на аналог 1, и на аналог 2 значение было от 770 - тогда погасли 2,3,4 и загорелись 3,4,10
со временем значение на аналог 2 стало 840 - погасли 3,4,10 - загорелись 2,5,6
вдруг значение на аналог 1 стало <300 - тогда все еще горят светодиоды 2,5,6 (значение как бы заморозилось)
#define ANALOG1 A1 #define ANALOG2 A2 #define LED2 2 #define LED3 3 #define LED4 4 #define LED5 5 #define LED6 6 #define LED7 7 #define LED8 8 #define LED9 9 #define LED10 10 const int sleepTime = 1000; // Задержка между проверками (1 сек) void setup() { pinMode(ANALOG1, INPUT); pinMode(ANALOG2, INPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT); pinMode(LED7, OUTPUT); pinMode(LED8, OUTPUT); pinMode(LED9, OUTPUT); pinMode(LED10, OUTPUT); // первичная проверка // Если значение на аналог 1 меньше 300 тогда горят светодиоды 2,3,4. if (analogRead(ANALOG1) < 300) { digitalWrite(LED2, HIGH); digitalWrite(LED3, HIGH); digitalWrite(LED4, HIGH); } } void ledOff() // Функция гашения всех светодиодов { digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); digitalWrite(LED5, LOW); digitalWrite(LED6, LOW); digitalWrite(LED7, LOW); digitalWrite(LED8, LOW); digitalWrite(LED9, LOW); digitalWrite(LED10, LOW); } void loop() // Основной цикл { // Если значение на аналог 1 меньше 300 тогда... if (analogRead(ANALOG1) < 300) { // ничего не делаем, сразу переходим к delay(sleepTime); } else // Если значение на аналог 1 больше [или равно] 300 тогда работает следующий алгоритм { // Если значение меньше чем 700 на аналог 2 => тогда включить светодиоды: 6,7,8,9 if (analogRead(ANALOG2) <= 700) { digitalWrite(LED6, HIGH); digitalWrite(LED7, HIGH); digitalWrite(LED8, HIGH); digitalWrite(LED9, HIGH); } // ЕСЛИ значение от 700 до 750 тогда выключить все и влключить светодиоды 4,5,6 if ((analogRead(ANALOG2) > 700) && (analogRead(ANALOG2) <= 750)) // Возможно, и такая конструкция корректная: // if (800 > analogRead(ANALOG2) <= 850) { ledOff(); digitalWrite(LED4, HIGH); digitalWrite(LED5, HIGH); digitalWrite(LED6, HIGH); } // если значение от 750 до 800 тогда выключить все и включить светодиоды 3,4,10 if ((analogRead(ANALOG2) > 750) && (analogRead(ANALOG2) <= 800)) { ledOff(); digitalWrite(LED3, HIGH); digitalWrite(LED4, HIGH); digitalWrite(LED10, HIGH); } // Если значение от 800 до 850 тогда выключить все и включить светодиоды 2,5,6 if ((800 >analogRead(ANALOG2) > 800) && (analogRead(ANALOG2) <= 850)) { ledOff(); digitalWrite(LED2, HIGH); digitalWrite(LED5, HIGH); digitalWrite(LED6, HIGH); } } // конец else delay(sleepTime); // Спим 1 сек }to Tomasina:
снимаю шляпу.
Но вспоминаю притчу про удочку и рыбу.
Да, первое значение выполняется только 1 раз при включении)Спасибо, сейчас попробую)
А можно как нибудь сделать чтобы значение 1-ое повторялосьнапример чтобы светодиоды моргали
а то оно так моргает один раз и все)