мигание светодиодами с разной частотой

ivan2020uk
Offline
Зарегистрирован: 11.05.2020

Написать программу включения-выключения

светодиодов на выходах микроконтроллера в зависимости от количества

нажатий кнопки на входе. Всего нажатий должно быть три. при включении

светодиоды начинают мигать с заданной частотой по очереди. После первого нажатия кнопки частота

увеличивается вдвое, после второго еще вдвое. После третьего возвращается к

начального значения.



Вопрос, как установить частоту мигания?И как сделать чтобы после 2 нажатия кнопки она менялась?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ivan2020uk пишет:



Вопрос, как установить частоту мигания?

Ответ - открыть САМЫЙ ПЕРВЫЙ, САМЫЙ ТРИВИАЛЬНЫЙ, САМЫЙ "ДЛЯ БЕРЕМЕННЫХ ДОЯРОК" пример "blink", который поставляется с IDE и есть прямо в меню IDE. Посмотреть как там установлена частота с делать также.

ivan2020uk пишет:



И как сделать чтобы после 2 нажатия кнопки она менялась?

1. сделать чтобы мигало хоть с какой-то частотой.

2. Посмотреть на код, подумать и сделать изменение частоты.

3. Если Вы нездоровы, и с п.2 возникнут трудности, то выложить здесь СВОЙ скетч и задать по нему вопрос(ы).

ivan2020uk
Offline
Зарегистрирован: 11.05.2020

Сделал такой код:

void setup() {

// Инициализируем цифровой вход/выход в режиме выхода.

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

}

void loop() {

digitalWrite(2, HIGH); // зажигаем светодиод

delay(1000); // ждем 1 секунды

digitalWrite(2, LOW); // выключаем светодиод

delay(1000); // ждем секунду

 

digitalWrite(3, HIGH); // зажигаем светодиод

delay(500); // ждем 0,5 секунды

digitalWrite(3, LOW); // выключаем светодиод

delay(500); // ждем секунду

 

digitalWrite(4, HIGH); // зажигаем светодиод

delay(1000); // ждем 1 секунды

digitalWrite(4, LOW); // выключаем светодиод

delay(1000); // ждем секунду

 

}

 

 

 

все что мог перерыл, хз как подключить кнопку, и как сделать чтобы мигание продолжалось до тех пор пока кнопка не включена.

 

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

ivan2020uk пишет:

как подключить кнопку, и как сделать чтобы мигание продолжалось до тех пор пока кнопка не включена.

Прочитать правила форума и вставить программу правильно и, наверное, добавить кнопку

ivan2020uk
Offline
Зарегистрирован: 11.05.2020
void setup() {               
	// Инициализируем цифровой вход/выход в режиме выхода.
	pinMode(2, OUTPUT);   
	pinMode(3, OUTPUT);   
	pinMode(4, OUTPUT);   
}
void loop() {
	digitalWrite(2, HIGH);   // зажигаем светодиод
	delay(1000);              // ждем 3 секунды
	digitalWrite(2, LOW);    // выключаем светодиод
	delay(1000);              // ждем секунду
	digitalWrite(2, HIGH);   // зажигаем светодиод
	delay(1000);              // ждем 3 секунды
	digitalWrite(2, LOW);    // выключаем светодиод
	delay(1000);              // ждем секунду
	digitalWrite(2, HIGH);   // зажигаем светодиод
	delay(1000);              // ждем 3 секунды
	digitalWrite(2, LOW);    // выключаем светодиод
	delay(1000);              // ждем секунду
	digitalWrite(2, HIGH);   // зажигаем светодиод
	delay(1000);              // ждем 3 секунды
	digitalWrite(2, LOW);    // выключаем светодиод
	delay(1000);              // ждем секунду
	
	
	
	
	
	
	
	digitalWrite(3, HIGH);   // зажигаем светодиод
	delay(500);              // ждем 3 секунды
	digitalWrite(3, LOW);    // выключаем светодиод
	delay(500);              // ждем секунду
	digitalWrite(3, HIGH);   // зажигаем светодиод
	delay(500);              // ждем 3 секунды
	digitalWrite(3, LOW);    // выключаем светодиод
	delay(500);              // ждем секунду
	digitalWrite(3, HIGH);   // зажигаем светодиод
	delay(500);              // ждем 3 секунды
	digitalWrite(3, LOW);    // выключаем светодиод
	delay(500);              // ждем секунду
	digitalWrite(3, HIGH);   // зажигаем светодиод
	delay(500);              // ждем 3 секунды
	digitalWrite(3, LOW);    // выключаем светодиод
	delay(500);              // ждем секунду
	
	
	
	
	
	
	
	digitalWrite(4, HIGH);   // зажигаем светодиод
	delay(1000);              // ждем 3 секунды
	digitalWrite(4, LOW);    // выключаем светодиод
	delay(1000);              // ждем секунду
	digitalWrite(4, HIGH);   // зажигаем светодиод
	delay(1000);              // ждем 3 секунды
	digitalWrite(4, LOW);    // выключаем светодиод
	delay(1000);              // ждем секунду
	digitalWrite(4, HIGH);   // зажигаем светодиод
	delay(1000);              // ждем 3 секунды
	digitalWrite(4, LOW);    // выключаем светодиод
	delay(1000);              // ждем секунду
	digitalWrite(4, HIGH);   // зажигаем светодиод
	delay(1000);              // ждем 3 секунды
	digitalWrite(4, LOW);    // выключаем светодиод
	delay(1000);              // ждем секунду
	
}

 

ivan2020uk
Offline
Зарегистрирован: 11.05.2020

 ну добавлю я кнопку, а как сделать чтоб ардуино запоминал сколько раз она уже была нажата?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
В строках №№9, 13, 17 и вообще во всех с номерами "9+4n" написанное не соответствует комментарию.
 
Зачем столько раз переписывать одно и тоже? С какой целью? Почему одного раза не достаточно?
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы, простите по какой специальности "учитесь"?

ivan2020uk
Offline
Зарегистрирован: 11.05.2020

да изменил время, а коментарии нет. микро и наносистемная техника 1 курс

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

ivan2020uk пишет:

 ну добавлю я кнопку, а как сделать чтоб ардуино запоминал сколько раз она уже была нажата?

Добавить переменную и менять её значение при каждом нажатии кнопки.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

И прочитайте про условные операторы си. И, вообще, чего Вы в программирование полезли - Вам явно в песочницу.

nik182
Offline
Зарегистрирован: 04.05.2015

Обратите внимание на первый пост. Как построена первая фраза.Как по мне ТС даже не удосужился задание своими словами передать. Как препод выдал, так сюда и вбухал.    

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ivan2020uk пишет:

микро и наносистемная техника

Т.е. Вы хотите сказать, что Вы будущий инженер? И пришли сюда с таким тривиальным вопросом? Вы даже не осознаёте степени его тривиальности! Моя 10-летняя внучка уже спит, а то я её бы спросил, не хочет ли она Вас проконсультировать.

Идите ка Вы изучать язык программирования. Обойтись без этого инженеру всё равно не получится, а  сейчас Вы просто дебилом выглядите с такими заходами, уж простите мой французский. 

ivan2020uk
Offline
Зарегистрирован: 11.05.2020
int ledPin1 = 13;
int ledPin2 = 12;
int ledPin3 = 11;
int ledPin4 = 10;
int switchPin = 2;

int val;
int state;
int c;

#define TIME 2000 // 2 сек
unsigned long  time;

void setup()
{
	pinMode(ledPin1, OUTPUT);
	pinMode(ledPin2, OUTPUT);
	pinMode(ledPin3, OUTPUT);
	pinMode(ledPin4, OUTPUT);
	pinMode(switchPin, INPUT);
	digitalWrite(ledPin1, LOW);
	digitalWrite(ledPin2, LOW);
	digitalWrite(ledPin3, LOW);
	digitalWrite(ledPin4, LOW);
}

void loop()
{
	state = digitalRead(switchPin);
	
	if (state == HIGH && c == 0) // нажали кнопку
	{
		c = 1;
	}
	if (state == LOW && c == 1) // отпустили кнопку
	{
		val = ++val;
		if (val == 6)
		{
			val = 0;
		}
		c = 0;
		time = millis(); // обнуляем счетчик
	}
	
	if (val == 0) // выключаем светодиоды
	{
		digitalWrite(ledPin1, LOW);
		digitalWrite(ledPin2, LOW);
		digitalWrite(ledPin3, LOW);
		digitalWrite(ledPin4, LOW);
	}
	if (val == 1) // Если мы кнопку 1 раз нажали и отпустили
	{
		
		
		digitalWrite(ledPin1, HIGH);
		delay(500); 
		digitalWrite(ledPin1, LOW);
		delay(500); 
		digitalWrite(ledPin2, HIGH);
		delay(500); 
		digitalWrite(ledPin2, LOW);
		delay(500); 
		digitalWrite(ledPin3, HIGH);
		delay(500); 
		digitalWrite(ledPin3, LOW);
		delay(500); 
		digitalWrite(ledPin4, HIGH);
		delay(500); 
		digitalWrite(ledPin4, LOW);
		delay(1000);
	}
	if (val == 2) // Если мы кнопку 2 раз нажали и отпустили
	{
		digitalWrite(ledPin1, HIGH);
		delay(250); 
		digitalWrite(ledPin1, LOW);
		delay(250); 
		digitalWrite(ledPin2, HIGH);
		delay(250); 
		digitalWrite(ledPin2, LOW);
		delay(250); 
		digitalWrite(ledPin3, HIGH);
		delay(250); 
		digitalWrite(ledPin3, LOW);
		delay(250); 
		digitalWrite(ledPin4, HIGH);
		delay(250); 
		digitalWrite(ledPin4, LOW);
		delay(1000);
	}
	if (val == 3) // Если мы кнопку 3 раз нажали и отпустили
	{
		digitalWrite(ledPin1, HIGH);
		delay(125); 
		digitalWrite(ledPin1, LOW);
		delay(125); 
		digitalWrite(ledPin2, HIGH);
		delay(125); 
		digitalWrite(ledPin2, LOW);
		delay(125); 
		digitalWrite(ledPin3, HIGH);
		delay(125); 
		digitalWrite(ledPin3, LOW);
		delay(125); 
		digitalWrite(ledPin4, HIGH);
		delay(125); 
		digitalWrite(ledPin4, LOW);
		delay(1000);
	}
}
if (val == 4) // Если мы кнопку 4 раз нажали и отпустили
{
	digitalWrite(ledPin1, HIGH);
	delay(500); 
	digitalWrite(ledPin1, LOW);
	delay(500); 
	digitalWrite(ledPin2, HIGH);
	delay(500); 
	digitalWrite(ledPin2, LOW);
	delay(500); 
	digitalWrite(ledPin3, HIGH);
	delay(500); 
	digitalWrite(ledPin3, LOW);
	delay(500); 
	digitalWrite(ledPin4, HIGH);
	delay(500); 
	digitalWrite(ledPin4, LOW);
	delay(1000);
}

Решил, все работает.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

TIME и time плюс последний if для чего ?

ivan2020uk
Offline
Зарегистрирован: 11.05.2020

TIME случайно скопировал со старых робот, а time для обнуления счетчика.

Последний if нужен для последнего условия, чтобы частота стала как была в 1.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

if выпал вообще за функцию - проверьте скобки

раз тело такое же как в первом, то надо условие первого поменять

time присваивается и НИГДЕ больше не используется