Преобразования аналогового значения в интервал для millis.

mag155
Offline
Зарегистрирован: 21.12.2017

Всем привет!!! Разобрался ноконец с millis и возник вопрос, как с помощью переменного резистора изменять интервал? Пример скетча ниже подтолкните на мысль как измненять интервал резистором?

if (digitalRead(button1Pin) == 0)
if (ledState == LOW)
led1OnTime = millis();
if(millis() - led1OnTime > 1000) {
digitalWrite(led1Pin, 1);
led1On = 1
Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015
Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

есть хорошая функция map()

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

int interval;//переменная которую будет менять резистором
interval=map(analogRead(pin),0,1023,0,1000);
if(millis()-ledOnTime>=interval){\\действие}

mag155
Offline
Зарегистрирован: 21.12.2017

Я совсем не долго в ардуино, общий смысл понял но еще трудно с граматикой ардуино если не сложно напишите примерчик .

mag155
Offline
Зарегистрирован: 21.12.2017

Хотябы до 

interval=map(analogRead(pin),0,1023,0,1000);

Буду очень благодарен,

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

"граматика" Arduino прекрасно описана Керниганом и Ритчи в 60-х годах прошлого века.  Осталось только почитать. 

mag155
Offline
Зарегистрирован: 21.12.2017
int interval = analogRead(0);
  interval=map(analogRead(pin),0,1023,0, 1000);

Типа такого ?

mag155
Offline
Зарегистрирован: 21.12.2017

Тоесть пишем setup что 

int interval = analogRead(0);

?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

видима, чукча не читатель...

mag155
Offline
Зарегистрирован: 21.12.2017

Получилось вот так но диод горит не ярко 

int interval  = analogRead(0);
  

if (digitalRead(button1Pin) == 0)
if (ledState == LOW)
led1OnTime = millis();

if(millis() - led1OnTime >  interval) {
digitalWrite(led1Pin, 1);
led1On = 1;

 

mag155
Offline
Зарегистрирован: 21.12.2017

Просто подсказать нелзя ?

b707
Offline
Зарегистрирован: 26.05.2017

mag155 пишет:

Просто подсказать нелзя ?

пример из #3 чем не устраивает?

mag155
Offline
Зарегистрирован: 21.12.2017

Без сарказма?

mag155
Offline
Зарегистрирован: 21.12.2017
interval=map(analogRead(pin),0,1023,0,1000);

Не могу вписать выбивает ошибку.

mag155
Offline
Зарегистрирован: 21.12.2017
int interval  = analogRead(0);

Не пойму почему диод горит тускло ? interval привязал к резистору но что то не так где ошибка ?

b707
Offline
Зарегистрирован: 26.05.2017

mag155 пишет:

interval=map(analogRead(pin),0,1023,0,1000);

Не могу вписать выбивает ошибку.

какую?

mag155 - вы на форуме 2 месяца. За два месяца вы открыли несколько новичковых тем с  элементарными вопросами, но так и не удосужились прочитать хоть что-то про язык программирования, на котором пишете

Какого вы отношения к себе ждете?

sadman41
Offline
Зарегистрирован: 19.10.2016

Варианта два я вижу: резистор неправильный или Си нечестный.

b707
Offline
Зарегистрирован: 26.05.2017

mag155 пишет:

int interval  = analogRead(0);

Не пойму почему диод горит тускло ?

где вы видите такую строку в сообщении #3? - если сами ничего не смыслите, так хотя бы копируйте правильно.

mag155
Offline
Зарегистрирован: 21.12.2017
С ошибкой разобрался не вписал номер пина все работает но диод горит тускло.
 
 
b707
Offline
Зарегистрирован: 26.05.2017

mag155 пишет:

С ошибкой разобрался не вписал номер пина все работает но диод горит тускло.
 
если хотите, чтоб кто-то глянкл - выкладывайте код. Только законченный скетч, а не тот обрывок. что в сообщении 10
mag155
Offline
Зарегистрирован: 21.12.2017
const int button1Pin = 2;
const int led1Pin = 4;
unsigned long led1OnTime;
int ledState = 0;
bool led1On;


void setup() {
   
pinMode(led1Pin, OUTPUT);
pinMode(button1Pin, INPUT);
led1On = false;
}

void loop() {
int interval;
 interval=map(analogRead (0),0,1023,0,1000);
if (digitalRead(button1Pin) == 0)
if (ledState == LOW)
led1OnTime = millis();
if(millis() - led1OnTime >  interval) {
digitalWrite(led1Pin, 1);
led1On = 1;
}
if (digitalRead(button1Pin) == 1)
digitalWrite(led1Pin, 0);


}

 

mag155
Offline
Зарегистрирован: 21.12.2017

Вот код.

b707
Offline
Зарегистрирован: 26.05.2017

А светодиод как подключен? - почему вы его зажигаете низким уровнем, а тушите высоким

sadman41
Offline
Зарегистрирован: 19.10.2016

Это не код, это пес...ц.

bwn
Offline
Зарегистрирован: 25.08.2014

Теперь русским языком рассказывайте, что вы хотите получить. По шагам, плиз.

mag155
Offline
Зарегистрирован: 21.12.2017

25 строка ошибка уровней спасибо всем за советы.

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

А светодиод как подключен? - почему вы его зажигаете низким уровнем, а тушите высоким

Вы еще про это спросите:


led1OnTime = millis();
if(millis() - led1OnTime >  interval) {

Я всё смотрел в телевизоре передачи про зомби и думал, что это выдумка. Но теперь всё больше убеждаюсь, что нет - они есть и зохватывают мир.

b707
Offline
Зарегистрирован: 26.05.2017

mag155 пишет:

25 строка ошибка уровней спасибо всем за советы.

ошибок там не одна и не две.

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Вы еще про это спросите:


led1OnTime = millis();
if(millis() - led1OnTime >  interval) {

 

я собирался :) Просто с этим скетчем светодиод вообще не должен гореть - а у ТС он "горит тускло" - вот я и заинтересовался.

А сам скетч меня не удивил - это автор такой :) я ник ТС уже запомнил про прошлым его темам.

 

mag155
Offline
Зарегистрирован: 21.12.2017

Эстрада клоунов в вас много потеряла. 

mag155
Offline
Зарегистрирован: 21.12.2017

К стати все четко работает

b707
Offline
Зарегистрирован: 26.05.2017

mag155 пишет:

Эстрада клоунов в вас много потеряла. 

Маг, неужели до вас не доходит, что главный клоун в этой ветке - вы. Вы звезда! Мы в ваши ветки как на представленье ходим.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

А зачем там вообще кнопка ? Что она делает ? Нажимаем и начинает мигать, нажимаем ещё раз перестает ?

b707
Offline
Зарегистрирован: 26.05.2017

mag155 пишет:

К стати все четко работает

попробуйте поменять интервал резистором :)

mag155
Offline
Зарегистрирован: 21.12.2017

Четко работает интервал меняется.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

mag155 пишет:

Получилось вот так но диод горит не ярко 

int interval  = analogRead(0);
  

if (digitalRead(button1Pin) == 0)
if (ledState == LOW)
led1OnTime = millis();

if(millis() - led1OnTime >  interval) {
digitalWrite(led1Pin, 1);
led1On = 1;

 


Никто же вам не писал, что это просто можно взять и вставить в код.
Вам объяснили как написать отдельные фрагменты кода.
int interval; в сетапе, тьфу в каком нахер сетапе, выше сетапе , где все переменные, хотя пофиг объявляйте где хотите. В вашем случае и так будет работать.
В лупе значения считать и заремапить,
А строку с интервалом надо вообще вставлять в свое условие, и не забывать обновлять значение интервала.
Вроде пишите, что с миллисом разобрались.

b707
Offline
Зарегистрирован: 26.05.2017

Kakmyc пишет:
А зачем там вообще кнопка ? Что она делает ? Нажимаем и начинает мигать, нажимаем ещё раз перестает ?

правильный вопрос "Зачем там вообще ВСЕ?"  - ибо интервал, заданный резистором - не используется, условие с миллис никогда не выполняется, переменная led1on задается. но никде не читается...

И это через 2 месяца чтения форума.

bwn
Offline
Зарегистрирован: 25.08.2014

mag155 пишет:

Эстрада клоунов в вас много потеряла. 

Вот ей богу, вы препираться приходите или поучиться? Если второе, то наступаем на собственное самомнение и начинаем работать. Выбросьте свое сочинение и ответьте на ранее заданный мною вопрос. Если поп-ть, то без меня.

b707
Offline
Зарегистрирован: 26.05.2017

mag155 пишет:

Четко работает интервал меняется.

врете.

Или код в ардуине совсем другой

mag155
Offline
Зарегистрирован: 21.12.2017

Нужно менять интервал резистором

 

b707
Offline
Зарегистрирован: 26.05.2017

короче. ставлю на то, что скоро Маг придет и скажет, что при переносе кода в форум сделал несколько описок, а на самом деле код совсем другой - белый и пушистый :)

Продолжайте без меня, пойду работать, всем удачно повеселиться  :)

mag155
Offline
Зарегистрирован: 21.12.2017

я изначально так и сделал но не работает так как вы рекомендуете.

mag155
Offline
Зарегистрирован: 21.12.2017

Да и припиратся я вовсе не хочу

mag155
Offline
Зарегистрирован: 21.12.2017

Код чесно такой и все четко работает.

mag155
Offline
Зарегистрирован: 21.12.2017

Но правельней конечно будет так 

int interval;  
const int button1Pin = 2;
const int led1Pin = 4;
unsigned long led1OnTime;
int ledState = 0;
bool led1On;
void setup() {
 int interval; 
pinMode(led1Pin, OUTPUT);
pinMode(button1Pin, INPUT);
led1On = false;
}

void loop() {

 interval=map(analogRead (0),0,1023,0,1000);
if (digitalRead(button1Pin) == 0)
if (ledState == 0)
led1OnTime = millis();
if(millis() - led1OnTime > interval) {
digitalWrite(led1Pin, 1);
led1On = 1;
}
if (digitalRead(button1Pin) == 0)
digitalWrite(led1Pin, 0);


}

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Особенно interval  в сетапе.

bwn
Offline
Зарегистрирован: 25.08.2014

Маг, чем такой код лечить, проще новый написать. Я сейчас отъеду, а когда вернусь, если хотите, то напишете по шагам, что и как должен делать ваш код (просто русским языком, по пунктам). После можно начинать его писать в виде программы.

mag155
Offline
Зарегистрирован: 21.12.2017

Буду благодарен если поможете 

mag155
Offline
Зарегистрирован: 21.12.2017

Удалить забыл.

bwn
Offline
Зарегистрирован: 25.08.2014

bwn пишет:

 то напишете по шагам, что и как должен делать ваш код (просто русским языком, по пунктам). После можно начинать его писать в виде программы.