Помогите разобраться с отображением символов на LCD

brus_o
Offline
Зарегистрирован: 11.10.2016

Здравствуйте, подскажите куда смотреть и что сделал не так.

На LCD 16x2  в конце строк выдает непонятные символы.

Исходники апаратные: Nano ATMega328

LCD 1602A, подключен через I2C PCF 8574A

Скетч:

 */
 
// Эти константы не изменится. Они используются, чтобы дать имена
// К штырям, используемых:
const int analogIn1 = A0;  // Аналоговый входной контакт, что потенциометр подключен к
const int analogIn2 = A1;
const int analogOut1 = 10; // Выходной вывод аналогового что светодиод подключен к
const int analogOut2 = 9;
 
int sensor1 = 0;        // Значение, считанное из порта
int output1 = 0;        // Выводится значение ШИМ (аналоговый выход)
 
int sensor2 = 0;        // Значение, считанное из порта
int output2 = 0;        // Выводится значение ШИМ (аналоговый выход)
 
//вставка библиотеки LCD I2C и инициализация дисплея
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2); // инициализация дисплея 16х2 (двухстрочный)
 
void setup() {
  
  // Инициализация последовательной передачи данных со скоростью 9600 бит:
  Serial.begin(9600); 
    
  
}
 
void loop() {
  
  sensor1 = analogRead(analogIn1);   // Прочитать аналоговое значение:         
  sensor2 = analogRead(analogIn2);
  
  output1 = map(sensor1, 50, 130, 0, 250); // Отобразить его в диапазоне от аналогового выхода: 
  output2 = map(sensor2, 50, 130, 0, 250);
  
  analogWrite(analogOut1, output1); // Изменяет аналоговое значение из:          
  analogWrite(analogOut2, output2);
  
  // Распечатать результаты последовательного монитора:
  Serial.print("Sensor 1 = " );                       
  Serial.print(sensor1);      
    
  Serial.print("\t out1 = ");      
  Serial.println(output1); 
  
  Serial.print("\t\t\t\t Sensor 2 = " );                       
  Serial.print(sensor2); 
  
  Serial.print("\t out2 = ");      
  Serial.println(output2);
 
  lcd.begin(); 
  lcd.setCursor(0, 0); // 1 строка 
  lcd.print("Sensor1 = "); 
  lcd.println(output1);
  lcd.setCursor(0, 1); // 2 строка 
  lcd.print("Sensor2 = "); 
  lcd.println(output2);
 
 
  // Подождать 1000 миллисекунды до следующего цикла
  // Для аналого-цифрового преобразователя обосноваться
  // После последнего чтения:
  delay(100);                     
}
 
монитор порта отображает все четко:
Подскажите как избавиться от "неприличных" символов на экране
Logik
Offline
Зарегистрирован: 05.08.2014

из  lcd.println уберите ln. При выводе на экран на натуральный логарифм не умножают.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну это легко  

  lcd.println(output1);
  lcd.setCursor(0, 1); // 2 строка 
  lcd.print("Sensor2 = "); 
  lcd.println(output2);

заменить на это

  lcd.print(output1); //<------- вот здесь
  lcd.setCursor(0, 1); // 2 строка 
  lcd.print("Sensor2 = "); 
  lcd.print(output2);   //<-------вот здесь

 

brus_o
Offline
Зарегистрирован: 11.10.2016

СПАСИБО!!!

помогло

brus_o
Offline
Зарегистрирован: 11.10.2016

Еще вопрос,

Как мне получить на выходе LCD те же цифры, но с запятой (грубо говоря разделить на 100)

дабы получить не 175  а 1,75       и       не 187 а 1,87

изменения в строках:
output1 = map(sensor1, 50, 130, 0, 250);  
output2 = map(sensor2, 50, 130, 0, 250);
 
250 на 0.25   ни к чему не приводит, на мониторе отображает только целые числа без запятых
 
Выход есть???
James
Offline
Зарегистрирован: 26.02.2016

float  вместо int

brus_o
Offline
Зарегистрирован: 11.10.2016

Спасибо