Обнуление переменной
- Войдите на сайт для отправки комментариев
Вс, 17/05/2020 - 21:04
Товарищи, подскажите пожалуйста как правильно обнулить переменную. Нужно использовать в 2х отдельных случаях (odom1 и odom2) параметры из одной переменной float m. Но при нажатии на кнопку должно сбрасывать odom2 на 0, а odom1 будет считать дальше. Добился только того что стирается оба показателя если tft.print(m = 0); . Можно ли сделать еще одну переменную с такими же параметрами как и float m ? и обнулять её.
unsigned long cur = 0; unsigned long prev = 0; unsigned long m_t = 0; float m; int speed = 0; int ms = 0; int doPin = 20; int doPos = 0; void con() { m++; } void setup() { Serial.begin(9600); uint16_t identifier = tft.readID(); Serial.print("ID = 0x"); Serial.println(identifier, HEX); if (identifier == 0xEFEF) identifier = 0x9486; tft.begin(identifier); pinMode(doPin, INPUT); attachInterrupt(2, con, RISING); m = EEPROM_ulong_read(0); } // чтение unsigned long EEPROM_ulong_read(int addr) { byte raw[4]; for(byte i = 0; i < 4; i++) raw[i] = EEPROM.read(addr+i); unsigned long &num = (unsigned long&)raw; return num; } // запись void EEPROM_ulong_write(int addr, unsigned long num) { byte raw[4]; (unsigned long&)raw = num; for(byte i = 0; i < 4; i++) EEPROM.write(addr+i, raw[i]); } void loop() { cur = millis(); ms = cur - prev; if (ms > 500) { prev = cur; speed = (m - m_t) * 3600 / ms; m_t = m; ms=0; } tft.setTextColor(GREEN, BLACK); tft.setTextSize(3); tft.setCursor(200,210); float odom1 = m; tft.print(odom1); //////////////////////////// doPos = digitalRead(doPin); float odom2 = odom1; if (doState == LOW) { tft.setTextSize(3); tft.setCursor(200,180); tft.setTextColor(WHITE, BLACK); tft.print(odom2); } else if (doPos == HIGH){ //обнуление tft.setTextColor(RED, BLACK); //tft.print(m = 0); tft.print(odom1 = 0); } delay(1000); EEPROM_ulong_write(0,m); } }
можете обьяснить, что делает строчка
можете обьяснить, что делает строчка
Обнуляет переменную.
У Вас там скобка лишняя. Кроме того, а неужто Вам так необходимо дергать EEPROM каждый цикл? Так его и засадить недолго. И последнее - 67 строка потрясла. Она же не дает Вашей программе работать.
Да, и прокомментируйте Вашу программу - многое станет понятно. Вы, как я вижу, сами не понимаете, а что она в каждой операции делает. Отсюда и вопросы. Прокомментируйте - не ленитесь.
Товарищи, подскажите пожалуйста как правильно обнулить
Прстите! Не смог удержаться! Это к В. Терешковой!!! ;))))))))))))) (можно удалить, как неуместную реплику! ;))) )
можете обьяснить, что делает строчка
Обнуляет переменную.
вы уверены? :) Вот не знал, что для обнуления нужен обьект tft. А если у меня нет в программе экрана - я уже и переменную занулить не могу? :)))
Интересно, вы в этом коде хоть одну строчку понимаете?
можете обьяснить, что делает строчка
Обнуляет переменную.
вы уверены? :) Вот не знал, что для обнуления нужен обьект tft. А если у меня нет в программе экрана - я уже и переменную занулить не могу? :)))
Интересно, вы в этом коде хоть одну строчку понимаете?
Ну а то, что из пушки по воробьям, так это вообще характерно для новичков. Ну а что делать, если они по-другому не умеют?
PS. Да, кстати, я в этом коде больше половины строк тоже не понимаю.
PS. Да, кстати, я в этом коде больше половины строк тоже не понимаю.
код достаточно прозрачный. Это спидометр и два одометра - odom1 odom2. Автору нужно, чтобы один одометр считал постоянно, а второй можно было обнулять.
Но в чем у него проблемы при обнулении - я так и не понял.
PS. Да, кстати, я в этом коде больше половины строк тоже не понимаю.
код достаточно прозрачный. Это спидометр и два одометра - odom1 odom2. Автору нужно, чтобы один одометр считал постоянно, а второй можно было обнулять.
Но в чем у него проблемы при обнулении - я так и не понял.
Проблема в обнулении odom2, я не знаю как это правильно сделать. Если вместо 15 строки вставить tft.print(m = 0); - то обнулит оба одометра а нужно только суточник. А в таком случае по нажатию кнопки показывает 0 а отпускаешь - возвращает предыдущее значение.
Так не присваивайте odom2 значение odom1 (9-я строка) на каждой итерации, тогда будет обнуляться ))
W42 - ваша проблема в почти полном отсуствии знаний в программировании. Я уже несколько раз вам написал. например. что строчка tft.print(m = 0); - это несусветная чушь. Обнуление переменной делается просто присвоением ее значения нулю, вот так n = 0. зачем вы запихиваете это внутрь оператора принт??
далее, относительно кода в последнем сообщении - #8. Переменные odom2 в строке 9 и 12 - это две совершенно разные переменные, когда вы обнуляеете переменную в строке 12 - переменная в строке 9 не меняется. Чтобы понять. почему так просиходит. почитайте что-енибудь на тему "Область видимости переменных в языке С++"