Подскажите, почему не работает вычитание.

Mohawk_96
Offline
Зарегистрирован: 20.08.2017
Хотел, что-бы счетчик обнулялся при достижении 60 секунд. Но этого, почему-то, не происходит.
 
 
void loop()
 
int Sec = millis()/1000;
 
{
  lcd.setCursor(13, 1);
  lcd.print(Sec);
 
   if (Sec >= 60)
{
Sec - 60;
}
 
}
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вычитание работает нормально, не работает что-то другое.

1. http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

2. Вы когда из десяти два вычитаете, само число 10 как-то меняетеся от этого? Ну так и здесь. Вычли Вы из Sec - 60, с какого перепугу сама Sec должна поменяться? Вот, с чего? Результат операции вычитания Вы просто выбросили за ненадобностью и ждёте, что поменяется операнд? Вот Вам простейшая книга для полных идиотов. Пока не прочитаете полность, даже не подходите к компьютеру.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

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

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

по утрам я добрый, потому, что трезвый

Изучай, родной, оператор присваивания.

Не получится баловаться Ардуинкой, не зная программирования.

Sec = Sec - 60;

//или

Sec -= 60;

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

wdrakula пишет:

по утрам я добрый, потому, что трезвый

Ну и естествено невнимательный. Посмотрите где ТС написал

int Sec = millis()/1000;

Похоже это последнее "достижение"  "ардуинщиков" Воткнуть строку между ) и {

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

qwone пишет:

wdrakula пишет:

по утрам я добрый, потому, что трезвый

Ну и естествено невнимательный. Посмотрите где ТС написал

int Sec = millis()/1000;

Похоже это последнее "достижение"  "ардуинщиков" Воткнуть строку между ) и {

Не заметил! Это 5!  Мне нравится... стильно, модно, молодежно!

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

Самое ценное в этом посте – заголовок. 

Вот помнится во времена моей юности, когда я работал сменным системщиком на ВЦ коллективного пользования (какой был спирт у электронщиков, и какие девочки работали операторами!!! :-))) и, стало быть, принимал на себя весь праведный гнев юзеров, у которых что-то не работало (обычно – голова), тогда главным мемом было «У вас фортран не работает!». Но то всё же целый фортран! Теперь уже не работает вычитание :(

Помнится с месяц назад, здесь на форуме, какой-то орёл выдал: «Подключил всё, кроме питания – не работает, подскажите куда копать».

Однако, во всём этом я вижу некоторый повод для оптимизма. Если уж не работают вычитание и конструкция без питания, то, перефразируя наших бравых теле-экономистов, можно сказать: уровень невежества и идиотизма достиг дна, дальше некуда – теперь неминуемо начнётся подъём!

Mohawk_96
Offline
Зарегистрирован: 20.08.2017

Критика оправдана, однако, менее обидней от этого не становится. Я програмированию, вообще-то, не обучен. Весь мой опыт в програмировании - это несколько просмотренных уроков Джереми по ардуино.

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

На Ваш вопрос Вам ответили, причём несколько раз, по-разному (но техническая суть одна). Благодарности пока заметно не было. У Вас есть ещё вопросы? Задавайте.

И имейте в виду, то, что я Вам сказал:

ЕвгенийП пишет:

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

есть реально едиственный действительно хороший совет, который Вам можно дать. Если Вы ему не последуете - сами себе злобный буратино.

Ну, что до ёрничанья, ну а чего Вы ожидали с такими вопросами? Это нормально. Обижаются только дураки и на них воду возят.

Mohawk_96
Offline
Зарегистрирован: 20.08.2017

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

Mohawk_96
Offline
Зарегистрирован: 20.08.2017

Я сделал, как мне посоветовали выше. Секунды все так-же не сбрасываются. Однако, если я поставлю часть кода с вычитанием во вторую позицию (до этого он был в первой позиции), то отсчет секунд вообще перестает происходить.

int sensePin = 0;
int Relay = 4;
 
void setup()
{
  // Screen
  lcd.init();                     
  lcd.backlight();// Включаем подсветку дисплея           
  lcd.print("Light       Time");
  // Screen
  
  // Ligt_Res
analogReference(DEFAULT);
  // Ligt_Res
 
  // Relay
 pinMode(Relay, OUTPUT);
  // Relay
 
}
 
 
void loop()
{
int Sense = analogRead(sensePin);  
int Sec = millis()/1000;
int Min = millis()/60000;
int Hour = millis()/600000;
 
 
 
if (Sec = 60) // вторая позиция
{
Sec = Sec - 60;
}  
 
 
 
// Screen
  lcd.setCursor(0, 1);
  lcd.print(Sense);
  delay(500);
// Screen
 
// Time_Hour
  lcd.setCursor(9, 1);
  lcd.print(Hour);
// Time_Hour
 
// Time_Min
  lcd.setCursor(11, 1);
  lcd.print(Min);
// Time_Min
 
// Time_Sec
  lcd.setCursor(13, 1);
  lcd.print(Sec);
 
// Time_Sec
 
if (Sec = 60) // первая позиция
{
Sec = Sec - 60;
}  
 
 
 
 // Relay
if(Sense < 900) digitalWrite(Relay, HIGH);
else digitalWrite(Relay, LOW); 
 
if ( Min >= 1) digitalWrite(Relay, LOW);
 // Relay  
 
 
}
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Так для того что бы написать рабочую программу надо знать алгоритм. А гадание по использованой туалетной бумаге никчему не приведет. ПС: Первое условие написания рабочей программы это знать что вы хотите. А просто хотеть и не знать к успеху точно не приведет.

Mohawk_96
Offline
Зарегистрирован: 20.08.2017

И я вот думаю, имеет ли смысл написать что-то, и добавить это в виде "else". Или, быть может, вообще нужно ввести доп. переменную.

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

Mohawk_96 пишет:

Я сделал, как мне посоветовали выше.

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

Если Вы думаете, что это блажь - отнюдь. Вот, допустим, я решил сказать Вам где у Вас ошибка, а у Вас в коде даже номеров строк нет. И что мне говорить? "В строке № ХЗ замените то на это?"

Mohawk_96 пишет:

Я сделал, как мне посоветовали выше. 

Выше Вам было сказано, "Вот Вам простейшая книга для полных идиотов. Пока не прочитаете полность, даже не подходите к компьютеру". Вы уже прочитали? Нет? Тогда какого чёрта пытаетесь что-то писать? Поймите, невозможно заниматься какой-то профессиональной деятельность не зная об этой деятельности ничего - а Ваш уровень знаний именно таков. За одно только "if (Sec = 60) " руки отрывать надо!

Читайте, учитесь и только потом пытайтесь что-то написать.

Mohawk_96
Offline
Зарегистрирован: 20.08.2017

Звучит разумно. Но учитывая, что у меня возникла проблема лишь с малой частью кода, ответственной за сброс отсчета секунд, то к чему нумерация строк?

И тем не менее, я благодарен за проявленную помощь. Буду искать решение своей проблемы дальше.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Mohawk_96 пишет:

Звучит разумно. Но учитывая, что у меня возникла проблема лишь с малой частью кода, ответственной за сброс отсчета секунд, то к чему нумерация строк?

хотя бы из элементарного уважения к отвечающим

 int sensePin = 0;
int Relay = 4;
 
void setup()
{
  // Screen
  lcd.init();                     
  lcd.backlight();// Включаем подсветку дисплея           
  lcd.print("Light       Time");
  // Screen
  
  // Ligt_Res
analogReference(DEFAULT);
  // Ligt_Res
 
  // Relay
 pinMode(Relay, OUTPUT);
  // Relay
 
}
 
 
void loop()
{
int Sense = analogRead(sensePin);  
int Sec = millis()/1000;
int Min = millis()/60000;
int Hour = millis()/600000;
 
 
 
if (Sec = 60) // вторая позиция
{
Sec = Sec - 60;
}  
 
 
 
// Screen
  lcd.setCursor(0, 1);
  lcd.print(Sense);
  delay(500);
// Screen
 
// Time_Hour
  lcd.setCursor(9, 1);
  lcd.print(Hour);
// Time_Hour
 
// Time_Min
  lcd.setCursor(11, 1);
  lcd.print(Min);
// Time_Min
 
// Time_Sec
  lcd.setCursor(13, 1);
  lcd.print(Sec);
 
// Time_Sec
 
if (Sec = 60) // первая позиция
{
Sec = Sec - 60;
}  
 
 
 
 // Relay
if(Sense < 900) digitalWrite(Relay, HIGH);
else digitalWrite(Relay, LOW); 
 
if ( Min >= 1) digitalWrite(Relay, LOW);
 // Relay  
 
 
}

 

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

Mohawk_96 пишет:

то к чему нумерация строк?

К тому, чтобы Вам могли сказать в какой строке у Вас ошибка. Вы этого ещё не поняли?

Mohawk_96 пишет:

Буду искать решение своей проблемы дальше.

Ищите, но поскольку Вы, похоже твёрдо решили ничему не учиться и ничего не читать, а только "искать решения проблем", могу предсказать что будет дальше: кто-нибудь подскажет Вам как решить проблему с вычитанием, а через некоторое время Вы опубликуете новый пост: "Сложение не работает". Так и будет, если не начнёте нормально изучать программирование, а будете считать фразу "я не обучен" оправданием.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

пойдёт туда не знает куда и найдёт то не знает что

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

ua6em, Вы в этом коде "решили проблему ТС"? Если так, то теперь точно ничерта не прочитает и точно будет пост: "Сложение не работает"

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em, Вы в этом коде "решили проблему ТС"? Если так, то теперь точно ничерта не прочитает и точно будет пост: "Сложение не работает"

я его даже не смотрел, выложил по правилам форума )))

посмотрел, чу д при тп

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

А, а я думал там уже представлено "решение проблемы" :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

А, а я думал там уже представлено "решение проблемы" :)

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

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

ua6em пишет:

проблема в том, что ТС не следует советам мудрых дядек )))

Да, нет, проблема в том, что "вычитание не работает" :)

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

ЕвгенийП пишет:

 Поймите, невозможно заниматься какой-то профессиональной деятельность не зная об этой деятельности ничего - а Ваш уровень знаний именно таков. За одно только "if (Sec = 60) " руки отрывать надо!

Читайте, учитесь и только потом пытайтесь что-то написать.

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

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Индеец,

не верь этим умникам! Они тебя троллят. Вычитание действительно не работает и сложение - тоже.

Запусти вот такой скетч


void setup() {
	Serial.begin(115200);
	int n = -16768;
	int zero = n + n;
	Serial.print(zero);
}
void loop() {
}

Посмотри на результат и убедись - ни хрена у них не работает, ни сложение, ни вычитание :)

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

Ворота пишет:
ни хрена у них не работает, ни сложение, ни вычитание :)
Так, що маємо, те й маємо :)