просьба помощи

Azat_Satdarov
Offline
Зарегистрирован: 15.07.2019

Ребят не подскажете, что не так? При выводе информации на дисплей, только функция (float) выводит 3 символа. остальные только первый!((( 

Вот код программы!:

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

Всё не так. 

1. Код вставлен неправильно, смотреть его никто не будет. Читай правила

Azat_Satdarov
Offline
Зарегистрирован: 15.07.2019

#include <LiquidCrystal_I2C.h>

int analogPin = 0;
int chargePin = 13;
int dischargePin = 11; //speeds up discharging process, not necessary though
int Value = 0;
int resistorValue = 9900;
unsigned long startTime;
unsigned long elapsedTime;
float microFarads;
float nanoFarads;                                    
float  Value_volt = 0;
LiquidCrystal_I2C lcd(0x3F, 20, 4);
void setup()
  {
   lcd.begin();
   lcd.backlight();
   pinMode(chargePin, OUTPUT);
   digitalWrite(chargePin, LOW);
   Serial.begin(9600); // Necessary to print data to serial monitor over USB
      
  }
void loop()
  { 
    {   
      delay(9600);
    }

  digitalWrite(chargePin, HIGH); // Begins charging the capacitor
  startTime = millis(); // Begins the timer
  while (analogRead(analogPin) < 648)
    {    
    }
      elapsedTime = millis() - startTime; // Determines how much time it took to charge capacitor
      microFarads = ((float)elapsedTime / resistorValue)*1000;
      Serial.print(elapsedTime);
      Serial.print(" mS    ");
      if (microFarads > 1) // Determines if units should be micro or nano and prints accordingly
    {
    Serial.print((float)microFarads);
    Serial.println(" microFarads");
    }
  else
      {
        nanoFarads = microFarads * 1000.0;
        Serial.print((float)nanoFarads);
        Serial.println(" nanoFarads");    
        delay(500);
      }
        digitalWrite(chargePin, LOW); // Stops charging capacitor
        pinMode(dischargePin, OUTPUT);
        digitalWrite(dischargePin, LOW); // Allows capacitor to discharge
        while (analogRead(analogPin) > 0)
      {
      }
      pinMode(dischargePin, INPUT); // Prevents capacitor from discharging   
      lcd.clear(); 
      lcd.setCursor(0,0);
      lcd.print("m");
      lcd.setCursor(1,0);
      lcd.print("F");    
      lcd.setCursor(3,0);
      lcd.print("="); 
      lcd.setCursor(7, 1);
      lcd.print((float)microFarads);   
  }

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Теперь подробно.
Про какие "три символа" речь ?

Azat_Satdarov
Offline
Зарегистрирован: 15.07.2019

12 строчку я уже удалил за ненадобностью!

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ясно.... Понятно....

Azat_Satdarov
Offline
Зарегистрирован: 15.07.2019

В общем, я мерю емкость конденсатора!  В мониторе порта все правильно показывает! Но при выводе информации на дисплей I2C 2004 A высвечивается только первый символ из многозначного числа, пробовал менять вес переменной. с функцией float выводит полученное значение но через запятую и только 3 первых знака из многозначного числа! Я просто уже не понимаю как вывести число на дисплей полностью!

Azat_Satdarov
Offline
Зарегистрирован: 15.07.2019

конденсатор 470 мFr он покажет как 4,70 с весом переменной float. Пробовал менять вес переменной показывает только цифру 4. 

Upper
Offline
Зарегистрирован: 23.06.2020

Из описания Serial.print - по умолчанию выводятся два знака после запятой

Serial.print(1.23456) gives "1.23"
Serial.print(1.23456, 0) gives "1"
Serial.print(1.23456, 2) gives "1.23"
Serial.print(1.23456, 4) gives "1.2345"
 
Или я не понял ваш вопрос.
Azat_Satdarov
Offline
Зарегистрирован: 15.07.2019

В программе через USB порт все отлично показывает! у меня проблема с выводом на I2C 2004A!

lcd.clear(); 
      lcd.setCursor(0,0);
      lcd.print("m");
      lcd.setCursor(1,0);
      lcd.print("F");    
      lcd.setCursor(3,0);
      lcd.print("="); 
      lcd.setCursor(7, 1);
      lcd.print((float)microFarads);   

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Мошт библиотека ликвидкристалл кривой версии?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ну а что он должен выводить по твоему ?
И чего ты хочешь добиться ?

Upper
Offline
Зарегистрирован: 23.06.2020
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 20, 4);


void setup()
 { // initialize the lcd for 20chars 4 lines, turn on backlight
   lcd.begin(20,4);
   
 float microFarads = 24.4587;
   
      lcd.setCursor(0,0);
      lcd.print("m");
      lcd.setCursor(1,0);
      lcd.print("F");    
      lcd.setCursor(3,0);
      lcd.print("="); 
      lcd.setCursor(7, 1);
      lcd.print((float)microFarads,3);
 }

void loop()
 { // put your main code here, to run repeatedly:
 }

Данный код выводит 24,458

Можете на этом примере пояснить -В чем проблема у вас.

Azat_Satdarov
Offline
Зарегистрирован: 15.07.2019

На мониторе порта в программе ардуино выводит  24,4587 ,  а на дисплей 2004А I2C  выводит только цифру 4. То есть первую до запятой цифру! я пробовал менять тип переменной: тип переменной Float выводит на дисплей  4,4587.

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

Azat_Satdarov пишет:

На мониторе порта в программе ардуино выводит  24,4587 

Вы запускали код из #15

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Azat_Satdarov, посмотрите тему:

http://arduino.ru/forum/apparatnye-voprosy/problemy-s-lcd-ekranom-16x2-i2c

там обсуждалась проблема похожая на Вашу.

Azat_Satdarov
Offline
Зарегистрирован: 15.07.2019

Спасибо, я уже вышел из положения!))

lcd.setCursor(0,0);
                  lcd.print("m");
                  lcd.setCursor(1,0);
                  lcd.print("F");      
                  lcd.setCursor(2, 0);
                  lcd.print((float )microFarads,5);  
                  lcd.setCursor(2,0);
                  lcd.print("_");
                  lcd.setCursor(3,0);
                  lcd.print("_"); 

вот таким вот способом!