Потенциометр и мигание светодиода

dennnissska
Offline
Зарегистрирован: 22.02.2015

Всем привет, возникла такая проблемка, с ардуино я знаком совсем не давно по этому скорее всего по этому и проблема. 

Хочу сделать чтоб ардуина работала следующим образом.

Подключаем потенциометр (далее ПЦ) и при его регулировании сдетодиод мигал, но мигал таким образом, когда ПЦ выставлен в нулевое положение светодиод мигает один раз, не много сдвигаем ПЦ и светодиод мигает два раза, и т.д. до 12 миганий при полностью вывернутом ПЦ.

Реально ли это сделать?

Сам скетч не осилю, если кто знает как хотя бы подскажите пожалуйста.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Я сам не спец но вот набросал и проверил в Протеусе, работает. Единственное я не понял, он должен мигнуть 5 или н раз в секунду, или просто мигнуть. Я поставил просто мигнуть с периодом 0,5 секунды и ждать следующего изменения потенциометра

//Primer1.ino

int led = 13;
int analogPin = 0;
int val = 1;

void setup() {
  // put your setup code here, to run once:
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

int potensiom ()
{
int v;
v = analogRead(analogPin);
v /= 80;
//Serial.println (v);
return v;
}

void loop() 
{
	//Serial.println (potensiom ());

if(val != potensiom())
{
    val = potensiom();

switch (potensiom ())
  {
  	case 1:
    digitalWrite(led, HIGH);  
    delay(500);               
    digitalWrite(led, LOW);   
    delay(500);               
	break;
	case 2:
	for (int i = 0; i < 2; i++)
	{
	digitalWrite(led, HIGH);  
    delay(500);               
    digitalWrite(led, LOW);   
    delay(500);  
	}
	break;
	case 3:
	for (int i = 0; i < 3; i++)
	{
	digitalWrite(led, HIGH);  
    delay(500);               
    digitalWrite(led, LOW);   
    delay(500);  
	}
	break;
	case 4:
	for (int i = 0; i < 4; i++)
	{
	digitalWrite(led, HIGH);  
    delay(500);               
    digitalWrite(led, LOW);   
    delay(500);  
	}
	break;
	case 5:
	for (int i = 0; i < 5; i++)
	{
	digitalWrite(led, HIGH);  
    delay(500);               
    digitalWrite(led, LOW);   
    delay(500);  
	}
	break;
	//И так дальше до case 12:
  }
 }
}

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

А можно сократить код до такого

//Primer1.ino

int led = 13;
int analogPin = 0;
int val = 1;

void setup() {
  // put your setup code here, to run once:
  pinMode(led, OUTPUT);
  //Serial.begin(9600);
}

int potensiom ()
{
int v;
v = analogRead(analogPin);
v /= 80;
//Serial.println (v);
return v;
}

void loop() 
{
	//Serial.println (potensiom ());

if(val != potensiom())
{
	delay(100); 
    val = potensiom();
    for (int i = 0; i < val; i++)
	{
	digitalWrite(led, HIGH);  
    delay(500);               
    digitalWrite(led, LOW);   
    delay(500);  
	}

 }
}

 

dennnissska
Offline
Зарегистрирован: 22.02.2015

Здравствуйте vosara. Вы правельно меня поняли по поводу просто мигнуть, второй скетч работает отлично. Я Вам очень благодарен!!!

danyobil
Offline
Зарегистрирован: 24.11.2015

Добрый день . С ардуино снаком совсем недавно.(буквально 2 неделе) Подскажите как сделать так что бы светодиод мигал с упровлением потенциометром, но так что бы потенциметр будет разница от мин до макс 1 вольт,  а мегание  было скадем а пределе 1000

dennnissska
Offline
Зарегистрирован: 22.02.2015

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

danyobil
Offline
Зарегистрирован: 24.11.2015

Спасибо что ответили, идея не совчем светодиодная . Светодиод это как пример . ардуина есть микро и уно. на нем хочу сделать простой контролер для подачи воды в двигатель.Данные будет сниматься с МАП датчика с 2.5 до 3.5 вольт и подаваться на ардуино а он дплжен выдавать импульсы которые будут управлять форсункой , с увеличением вольтажа должно увеличиваться и частота . Все что косаетс железа это не проблемно, а вот программно...

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013
danyobil
Offline
Зарегистрирован: 24.11.2015

Я с адруино совсем недавно для меня это сложно

danyobil
Offline
Зарегистрирован: 24.11.2015

За готовый рабочий код могу немного заплатить

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

danyobil пишет:

Спасибо что ответили, идея не совчем светодиодная . Светодиод это как пример . ардуина есть микро и уно. на нем хочу сделать простой контролер для подачи воды в двигатель.Данные будет сниматься с МАП датчика с 2.5 до 3.5 вольт и подаваться на ардуино а он дплжен выдавать импульсы которые будут управлять форсункой , с увеличением вольтажа должно увеличиваться и частота . Все что косаетс железа это не проблемно, а вот программно...

А импульсы какой частоты (диапозон)?

danyobil
Offline
Зарегистрирован: 24.11.2015

Этот диапазон надо подбирать на месте в зависимости от производительности форсунки

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
Можно попробовать с помощью ШИМ.
Для ШИМ регулировки необходимо использовать цифровые PWM выводы Ардуино — 3,5,6,9,10,11
 
Подключаем потенциометр к Ардуино, крайние ноги на +5 и gnd, центральную ногу на аналоговый вход Ардуино А0
 
Скетч регулировки:
const int lPin = 3; // пин подключения светодиода
const int PPin = A0; // пин подключения потенциометра
void setup() {
 
pinMode(lPin, OUTPUT);// инициализируем наш пин как выход
}
 
void loop(){
analogWrite(lPin,map(analogRead(PPin),512,717,0,255)); //преобразуем аналоговое значение в яркость светодиода
}
analogWrite(lPin,map(analogRead(PPin),512,717,0,255)); //512~2,5v; 717~3,5v; 0,255-можно поменять местами 255,0 в зависимости от того что Вам нужно- при увеличении напряжения увеличивать или уменьшать частоту.

Если же ШИМ не подходит а Ардуино больше ничего не будет делать можно попробовать по другому

const int lPin = 3; // пин подключения светодиода
const int PPin = A0; // пин подключения потенциометра

void setup() {
 
pinMode(lPin, OUTPUT);// инициализируем наш пин как выход
}
 
void loop(){
 int val = analogRead(0);
  val = map(val, 512,717, 0, 255);
  digitalWrite(lPin, HIGH);   // включает светодиод
  delay(val);                  
  digitalWrite(lPin, LOW);    // выключает светодиод
  delay(val);                  

}

Большой частоты не добиться потому что на analogRead уходит много времени. 

 

 

danyobil
Offline
Зарегистрирован: 24.11.2015

Спасибо за код