Что то с деленением в Меге2560

ppi
Offline
Зарегистрирован: 15.04.2022

Странный баг то ли контроллера то ли компилятора Привожу листинг:

 

 

Выводится все на двустрочник жк(работает без нареканий), а вот простое преобразование аналоговых данных с датчика влажности почвы (в листинге переменная SENSOR) выводит значение приблизительно от 200 до 900, но стоит для наглядности уменьшить величину в 10 раз (sensor2) получается значение которое при увелечении до 900 первой переменной (опускание в стакан с водой) приводит к тому, что вторая величина наоборот уменьшается и уходит в минус... вот такой баг... Может кто сталкивался с подобным либо знает решение проблемы, был признателен за помощь. Всего доброго.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018
ppi
Offline
Зарегистрирован: 15.04.2022

Странный баг то ли контроллера то ли компилятора
Привожу листинг:

#include
#define SENSOR A0
#define VCC A1
#define GND A2
#define MIN 200
#define MAX 945
uint16_t sensor;
float sensor2;
int buf;

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup() {
lcd.begin(16, 2); // Инициализирует LCD 16x2
pinMode (VCC, OUTPUT);
pinMode (GND, OUTPUT);
digitalWrite(VCC, LOW);
digitalWrite(GND, LOW);
}

void loop() {
digitalWrite(VCC, HIGH);
delay(55);
buf = analogRead(SENSOR);
lcd.setCursor(0,0);
lcd.print("Test soil:");lcd.print(buf);
lcd.setCursor(0,1);
sensor2 = buf/10;
lcd.print(sensor2);
delay(500);
}

Выводится все на двустрочник жк(работает без нареканий), а вот простое преобразование аналоговых данных с
датчика влажности почвы (в листинге переменная SENSOR) выводит значение приблизительно от 200 до 900, но стоит для наглядности уменьшить величину в 10 раз (sensor2) получается значение которое при увелечении до 900 первой переменной (опускание в стакан с водой) приводит к тому, что вторая величина наоборот уменьшается и уходит в минус... вот такой баг... Может кто сталкивался с подобным либо знает решение проблемы, был признателен за помощь. Всего доброго.

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Так у вас там с типами бяда прям. Из каких соображений sensor типа uint16_t, а sensor2 типа float? А buf вообще int (!)

А первая строка должна быть такой:

#include <LiquidCrystal.h>

 

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

BOOM пишет:

Так у вас там с типами бяда прям. Из каких соображений sensor типа uint16_t, а sensor2 типа float? А buf вообще int (!)

Да, нормально там всё. sensor  - не используется нигде. buf - ну а почему бы и не int, если это результат analogRead? sensor2 он сделал флоат, чтобы не терять точность при делении на 10. Не вижу проблемы.

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

ppi пишет:
простое преобразование аналоговых данных с датчика влажности почвы (в листинге переменная SENSOR) выводит значение приблизительно от 200 до 900, но стоит для наглядности уменьшить величину в 10 раз (sensor2) получается значение которое при увелечении до 900 первой переменной (опускание в стакан с водой) приводит к тому, что вторая величина наоборот уменьшается и уходит в минус...

ppi, прочтите это "со стороны" и скажите честно, Вы что-нибудь поняли? Я вот ни хрена не понял.

Давайте ка, Вы продублируете вывод в монитор порта и выложите листинг (из монитора порта) и в нём пометите, что Вам не нравится.

ppi
Offline
Зарегистрирован: 15.04.2022

Первая строка такая и была при копировании как то потярялось (несколько раз взламывали комп хакеры и сервера моего проекта, видимо и здесь пошутили...)
uint16_t из примера где функция map подгоняет под проценты, но и тот пример не сработал... да изменил переменную buf на float  а переменная  sensor не тождественна SENSOR надо смотреть на sensor2 так как строку с map и той переменной удалил чтобы пока не мешала, так как в том примере не сработало видимо что то не то с типом uint16_t . Сейчас проверил все работает теперь переменные синхронно уменьшаются. Спасибо за подсказку хотя она тривиальна, просто последнее время работал много с php и привык к нему, но это не оправдывает. Огромное спасибо за помощь

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Блин... хакеры знают что такое "include".... Жесть, как страшно жить !  

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

ppi пишет:
видимо что то не то с типом uint16_t . Сейчас проверил все работает
Всё с ним то, Вы бредите. Если хотите разобраться, делайте, что я Вам сказал и выкладывайте.