millis

PolitePeople
Offline
Зарегистрирован: 01.12.2018

Всем привет!

Как начинающий пользователь пытаюсь разобраться с millis.

Есть активный бузер https://aliexpress.ru/item/32910314751.html?spm=a2g0o.productlist.0.0.19394162FZZfgN&algo_pvid=c4846f9d-2025-4486-91cb-db1ad3c1367d&algo_expid=c4846f9d-2025-4486-91cb-db1ad3c1367d-20&btsid=c386f313-1e6f-491d-b02c-3d7e019b1e08&ws_ab_test=searchweb0_0,searchweb201602_4,searchweb201603_53

Есть кусок кода где при изменение значения директивы #define SENSOR ниже 100 бузер должен пищать с интервалом в одну секунду. Три часа уже бьюсь, но понять никак не могу. То ли я тугой, то ли это настолько сложно.)

Скорее первое. Самокритично.) Спасибо за любую помощь.)

PolitePeople
Offline
Зарегистрирован: 01.12.2018
#define BUZZER 10
#define SENSOR 99
 
unsigned long Timing; //Переменная для хранения
void setup()
{
pinMode(BUZZER,  OUTPUT  );  
digitalWrite( BUZZER,LOW);
Serial.begin(9600);
}
 
void loop()
{
   if (millis() - Timing > 1000)
 { Timing = millis(); 
  
 }
 
 if (SENSOR > 100){digitalWrite(BUZZER,HIGH); } //не понимаю условие при котором бузер будет пищать с                                                                                       //интервалом в 1 секунду
 
sadman41
Offline
Зарегистрирован: 19.10.2016

Только просветленные умы, годами практикующие медитацию и тантрическое программирование, могут услышать хлопок одной ладонью и увидеть условие, которого нет. 

PolitePeople
Offline
Зарегистрирован: 01.12.2018

Так его и нет т.к. великим и могучим пояснено, что я не понимаю условие при котором бузер будет пищать.) 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ну если вы не понимаете условия - то нам сия загадка точно не по зубам. Вдруг вам нужно, чтобы баззер пищал, когда Луна в третьей четверти, и находится в Козероге? Такое вот хитрое условие для писка, паанимаишь.

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

DIYMan пишет:
когда Луна в третьей четверти, и находится в Козероге?
Лучше, когда Дева Раком на Весы станет.

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

PolitePeople,

если Вы действительно polite, то будьте так добры, прочитайте первую тему в песочнице и вставляйте код и всё остальное правильно. На Вашей картинке ни хрена не видно, а в Вашем коде нет номеров строк, чтобы его обсуждать.

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

напишы 

#define SENSOR 101

и буззер запищит.  Если он активный, канеш. 

Zummer
Offline
Зарегистрирован: 25.11.2019

PolitePeople пишет:

#define SENSOR 99
 
..................
 if (SENSOR > 100){digitalWrite(BUZZER,HIGH); } //не понимаю условие при котором бузер будет пищать с                                                                                       //интервалом в 1 секунду
 

когда 99 станет больше 100 тогда и запищит 

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

Zummer пишет:

когда 99 станет больше 100 тогда и запищит 

когда рак на горе свистнет?

Zummer
Offline
Зарегистрирован: 25.11.2019

При таком условии он вообще никогда не свистнет...

PolitePeople
Offline
Зарегистрирован: 01.12.2018

Друзи, в данной теме была запрошена помощь. Цели замера пиписек я не преследую.) Если Вам есть, чем помочь, помогите. Нечем помочь, проходите мимо.)

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

Уважаемый друг, вам было сказано вставить код по правилам. Вы это сделали?

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

PolitePeople пишет:

Друзи, в данной теме была запрошена помощь. Цели замера пиписек я не преследую.) Если Вам есть, чем помочь, помогите. Нечем помочь, проходите мимо.)

Друг, Вас попросили вставить код и схему по правилам этого форума. Если Вы не готовы уважать здешние правила, проходите мимо.

PolitePeople
Offline
Зарегистрирован: 01.12.2018
#define BUZZER 10
#define SENSOR 99
 
unsigned long Timing; //Переменная для хранения
void setup()
{
pinMode(BUZZER,  OUTPUT  );  
digitalWrite( BUZZER,LOW);
Serial.begin(9600);
}
 
void loop()
{
   if (millis() - Timing > 1000)
 { Timing = millis(); 
  
 }
 
 if (SENSOR > 100){digitalWrite(BUZZER,HIGH); } 
//не понимаю условие при котором бузер будет пищать с                                                                                       
//интервалом в 1 секунду
 

 

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

Ок, вам уже сказали - в строке 19 SENSOR НИКОГДА не станет больше 100, поэтому условие никогда не сработает и бузер вообще не запищит.

Сначала разберитесь с этим, потом займемся временем.

PolitePeople
Offline
Зарегистрирован: 01.12.2018

Почему на станет? Для этого есть строка 02. Это все работает

Цель моей темы понять как работает millis вместо delay.

Вот код который работает и где я хочу использовать millis и не использовать delay.

#define BUZZER 10
#define SENSOR 99
unsigned long last_time; //Переменная для хранения
void setup()
{
pinMode(BUZZER,  OUTPUT  );  
digitalWrite( BUZZER,HIGH);
Serial.begin(9600);
}

void loop()
{
   if (millis() - last_time > 1000)
 { 
   last_time = millis(); 
   Serial.println ( "1 second" ); 
 }

 if (SENSOR < 100)
 { 
 digitalWrite(BUZZER,LOW);
 delay(1000); 
 digitalWrite(BUZZER,HIGH);
 delay(1000);
 }
  
  
}

 

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

Смотрите пример "блинк без delay() и повторяйте, у вас в коде сейчас условия по времени нет

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

Теперь Ваш println() печатает раз в секунду? Видимо и команду на писк надо где-то рядом пристроить?

PolitePeople
Offline
Зарегистрирован: 01.12.2018

Именно так.

 

PolitePeople
Offline
Зарегистрирован: 01.12.2018

Самой простое это скопировать нужный пример не поняв как это работает.)  

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

PolitePeople пишет:

Самой простое это скопировать нужный пример не поняв как это работает.)  

копируйте с пониманием

Zummer
Offline
Зарегистрирован: 25.11.2019