Сохраненение предыдущего значения датчика в переменную.

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Добрый день. Запутался немного.  Значение меняется руками энкодером. Смысл, запомнить последннее значение энкодера. Если 

текущее 0: прошлое 0: крутим энкодер

текущее 200:прошлое 0: крутим энкодер

текущее 400:прошлое 200: крутим энкодер

и т..д.  Поправьте ошибку пожалуйста.

int value = 0;// с энкодера получает значение с шагом 200.
int prew=0;
int last=0;
int sensorValue =0;

void loop() {
 last=sensorValue;
 // sensorValue = analogRead(A0);// в этом случае все работает идеально
 sensorValue = value;// в этом случае нет, или один раз. 
if (prew!=last)
  {
    prew=last;
  }

 
  SerialUSB.println(" sensor " + String(sensorValue) + ", last " + String(last)+ ", prew " + String(prew));
  delay(500);        // delay in between reads for stability
}

 

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

откуда берется новое значение value ? - в вашем коде обновления значения нет

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Значение берется когда я кручу энкодер. Он опрашивается по таймеру. Если вместо энкодера подставить analogRead(A0) то все работает.  

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

И в чем вопрос?

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Код работает неправильно. Не сохраняет последнее значение которое пришло с энкодера. Оно равно текущему.

 

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

Hayabusa пишет:

Код работает неправильно. Не сохраняет последнее значение которое пришло с энкодера. Оно равно текущему.

а как вы это установили? По печати в Сериал-мониторе?

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Конечно. 

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Прошу перенести тему в "Ищу исполнителя". Оплата картой, можно по предоплате. Я полагаю, это сильно ускорит понимаение проблемы.

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

Hayabusa пишет:

Код работает неправильно. Не сохраняет последнее значение которое пришло с энкодера. Оно равно текущему.

а чего вы ожидали, если вы печатаете свои значения prev и last ПОСЛЕ ТОГО, как в строчке 12 приравняли одно другому? - конечно они всегда будут одинаковые

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Не хочу думать. Сутки не спал. Закончу с этим говном, заплачу денег и забуду. 

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

Hayabusa пишет:

Не хочу думать. Сутки не спал. Закончу с этим говном, заплачу денег и забуду. 

если честно, так и не понял в чем вопрос....

Если хотите заказать решение задачки за деньги - продумайте для начала четкое описание проблемы.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

МК необычный какой-то? Опять, поди, из обработчика прерывания без атомарности читаем.

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

Hayabusa пишет:

Не хочу думать. Сутки не спал. Закончу с этим говном, заплачу денег и забуду. 

С таким настроением ты слона не продашь

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

Hayabusa пишет:

Не хочу думать. Сутки не спал. Закончу с этим говном, заплачу денег и забуду. 

перенесите строку 16 на строку 11. если проблема решится - с вас 100 рублей

Hayabusa
Offline
Зарегистрирован: 29.03.2012

ТЗ.

Сегодня на улице -2. Это текущее. 

Завтра +5. Это тоже текущее будет. А я хочу знать, что вчера было -2. Это прошлое.  и так до тех пор пока не изменится температура. 

Если послезавтра будет +40, то мне жутко любопытно знать что вчера-то было +5! И вот у нас неделю +40. И насрать. Я хочу знать что последняя температура была +5. Примерно так. Если вы админ, перекиньте пожалуйста в Исполнители. Лег бы уже поспал, но дело принципа. 

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

Наябуся, утро вечера мудреннее. Лучше поспать, мозг уже информацию не воспринимает.

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Проблема не решилась. Код отработал один раз. При следующей итерации все значения снвоа равны. А я мне нужно неделю хранить а не сотые секунды. 

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Не могу. С часу дня как с самолета вылез решаю МЕГА задачу. Как оказывается, даже обьяснить не могу толком чего хочу. Что весьма и весьма странно. 

sadman41
Онлайн
Зарегистрирован: 19.10.2016
int sensorValue = 0;
int previousSensorValue = 0;
int currentSensorValue = 0;

void loop() {
 sensorValue = analogRead(A0);
 ...
 currentSensorValue = sensorValue;
 if (currentSensorValue != previousSensorValue) {
    previousSensorValue = currentSensorValue;
 }
 //SerialUSB.println("sensorValue: " + String(sensorValue) + ", currentSensorValue: " + String(currentSensorValue)+ ", previousSensorValue:" + String(previousSensorValue));
 delay(500); 
}

 

Hayabusa
Offline
Зарегистрирован: 29.03.2012

200 рублей, пайпал, на телефон, на карту. 

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Уважаемы Сэдман, не работает. Все значений одинаковы. 

Hayabusa
Offline
Зарегистрирован: 29.03.2012

300 рублей. 

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Я придумал. Можно взять в массив, только на одно значение а не на 10 последних. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
if(SensorValue!=last){pre=last;last=SensorValue;}

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Заставили в коробку таки лезть за переменником :(

int sensorValue = 0;
int previousSensorValue = 0;
int currentSensorValue = 0;
int lastDifferentValue = 0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  sensorValue = analogRead(A0) / 8 ;
  currentSensorValue = sensorValue;
  if (currentSensorValue != previousSensorValue) {
    lastDifferentValue = previousSensorValue;
    previousSensorValue = currentSensorValue;
  }
  Serial.println("lastDifferentValue : " + String(lastDifferentValue) + ", currentSensorValue: " + String(currentSensorValue) + ", previousSensorValue:" + String(previousSensorValue));

  delay(2000);
}
lastDifferentValue : 0, currentSensorValue: 23, previousSensorValue:23
lastDifferentValue : 0, currentSensorValue: 23, previousSensorValue:23
lastDifferentValue : 23, currentSensorValue: 27, previousSensorValue:27
lastDifferentValue : 23, currentSensorValue: 27, previousSensorValue:27
lastDifferentValue : 23, currentSensorValue: 27, previousSensorValue:27
lastDifferentValue : 27, currentSensorValue: 33, previousSensorValue:33
lastDifferentValue : 27, currentSensorValue: 33, previousSensorValue:33
lastDifferentValue : 33, currentSensorValue: 39, previousSensorValue:39
lastDifferentValue : 33, currentSensorValue: 39, previousSensorValue:39

 

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Вариант ua6em работает. Только что проверил.  Сейчас проверю алгоритм sadman14.

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

sadman41 пишет:
Заставили в коробку таки лезть за переменником :(

lastDifferentValue : 0, currentSensorValue: 23, previousSensorValue:23
lastDifferentValue : 0, currentSensorValue: 23, previousSensorValue:23
lastDifferentValue : 23, currentSensorValue: 27, previousSensorValue:27
lastDifferentValue : 23, currentSensorValue: 27, previousSensorValue:27
lastDifferentValue : 23, currentSensorValue: 27, previousSensorValue:27
lastDifferentValue : 27, currentSensorValue: 33, previousSensorValue:33
lastDifferentValue : 27, currentSensorValue: 33, previousSensorValue:33
lastDifferentValue : 33, currentSensorValue: 39, previousSensorValue:39
lastDifferentValue : 33, currentSensorValue: 39, previousSensorValue:39

 

если я его правильно понял в pre и last всегда должны быть отличающиеся значения )))

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Оба варианта работают. Предлагаю по 150 каждому. 

 

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

Hayabusa пишет:

Оба варианта работают. Предлагаю по 150 каждому. 

я только за )))

Hayabusa
Offline
Зарегистрирован: 29.03.2012

В личку сбросьте подробнее инструкции по оплате. Я что-то туплю если честно. 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

ua6em пишет:

если я его правильно понял в pre и last всегда должны быть отличающиеся значения )))

У нас одно и то же решение. Токо я пример с погодой позже прочёл и пока нашёл переменник, пока проверил - проваландался.

Hayabusa
Offline
Зарегистрирован: 29.03.2012

а тут нет наверно лички. Пишите сюда. Оба. Дело принципа, знаете ли. 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Пенсионеру отправь, может перестанет людей баком терзать.

Мне этого даже на обед не хватит, да ещё и ужин пропущу, пока буду переписываться.

Хотя, по пэйпалу судя - он бизнесмен скорее, чем пенсионер... Прикидывается ветошью...

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Отправлено "пенсионеру" Отпишитесь в теме, что бы не думали что я п###бол. Сэдману большое Спасибо. 

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Чушь какая-то. Я не делал рефанд. Сейчас попробую еще раз. 

Hayabusa
Offline
Зарегистрирован: 29.03.2012

Проверьте еще раз. с карты у меня списались средства.