Обнуление переменной
- Войдите на сайт для отправки комментариев
Вс, 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 а отпускаешь - возвращает предыдущее значение.
//-------------------------основной tft.setTextColor(WHITE, BLACK); tft.setTextSize(3); tft.setCursor(200,210); float odom1 = m; tft.print(odom1); //--------------------------суточник odoPos = digitalRead(odoPin); float odom2 = odom1; if (odoState == HIGH) { // кнопка сброса float odom2 = 0; tft.setTextColor(RED, BLACK); tft.setCursor(200,180); tft.print(odom2); } else if (odoState == LOW){ tft.setTextColor(WHITE, BLACK); tft.print(odom2); }Так не присваивайте odom2 значение odom1 (9-я строка) на каждой итерации, тогда будет обнуляться ))
W42 - ваша проблема в почти полном отсуствии знаний в программировании. Я уже несколько раз вам написал. например. что строчка tft.print(m = 0); - это несусветная чушь. Обнуление переменной делается просто присвоением ее значения нулю, вот так n = 0. зачем вы запихиваете это внутрь оператора принт??
далее, относительно кода в последнем сообщении - #8. Переменные odom2 в строке 9 и 12 - это две совершенно разные переменные, когда вы обнуляеете переменную в строке 12 - переменная в строке 9 не меняется. Чтобы понять. почему так просиходит. почитайте что-енибудь на тему "Область видимости переменных в языке С++"