Помогите адаптировать скетч для использования LCD 16x2

lcd

Я нашел отличный инструктаж, в котором есть общий скетч. Я нуб, но я думаю, что понимаю его и как адаптировать его для моего использования, но он использовал другой дисплей, чем я.... и я просто не знаю, как получить вывод для отображения на нем.
В скетче он использует Oled-дисплей, а все, что у меня есть под рукой, - это жидкокристаллический дисплей I2c 16x2. Я пытался использовать библиотеки и другой код из других скетчей, которые работают на этом дисплее, но у меня просто есть знания, чтобы заставить его работать.

Кто-нибудь может мне помочь, пожалуйста?

Это та самая страница: https://www.instructables.com/Measure-Fuel-Level-With-Arduino/

Вот этот код:

#include "SSD1306Ascii.h"
#include "SSD1306AsciiAvrI2c.h"
SSD1306AsciiAvrI2c oled;
#define I2C_ADDRESS 0x3C

int TankValue0;
int TankValue1;

void setup() {
  Serial.begin(9600);
  oled.begin(&Adafruit128x64, I2C_ADDRESS);
  oled.setFont(System5x7);
  oled.clear();
}

void loop() {
  int sensorTankValue0 = analogRead(A1);
  int sensorTankValue1 = analogRead(A2);
  TankValue0 = map(sensorTankValue0, 295, 785, 0, 100);
  TankValue1 = map(sensorTankValue1, 295, 785, 0, 100);
  if (TankValue0 < 0) {
    TankValue0 = 0;
  }
  if (TankValue1 < 0) {
    TankValue1 = 0;
  }
  if (TankValue0 > 100) {
    TankValue0 = 100;
  }
  if (TankValue1 > 100) {
    TankValue1 = 100;
  }
  oled.print("T0=");
  oled.print(TankValue0);
  oled.println(" ");
  oled.print("T1=");
  oled.print(TankValue1);
  oled.println(" ");
  oled.setCursor(0, 0);
}

, 👍1

Обсуждение

Проверьте, например: https://www.arduino.cc/en/Tutorial/LibraryExamples/HelloWorld ... вместо " oled` измените его на функции в этом примере. Или сначала поиграйте с этим примером скетча, чтобы привыкнуть к тому, как он работает, прежде чем менять свой собственный скетч., @Michel Keijzers

Также используйте функцию "constrain` вместо операторов "if": https://www.arduino.cc/reference/en/language/functions/math/constrain/, @Michel Keijzers

Спасибо, я действительно пробовал это сделать, но у меня получаются ошибки, что бы я ни делал...., @SV Savannah

Наверное, лучше поставить тот скетч, который вы пробовали, чтобы мы могли посмотреть на ошибки вместо примера с использованием oled., @Michel Keijzers

Хорошо, пусть он работает хорошо, купите добавление кода с монитора батареи. Я просто колол его, пока он не застрял. Я хотел бы поделиться рабочим кодом, но нет места здесь?..?, @SV Savannah

Вы можете отредактировать свой вопрос и добавить свой код, для которого у вас есть вопрос., @Michel Keijzers


1 ответ


1

Хорошо, у меня все работает нормально, добавляя код с монитора батареи. Я вроде как просто колол его, пока он не застрял, меняя "oled" на "LCD" и несколько других вещей. Извините, я не могу быть более описательным..... Я не уверен, почему это сработало, но в конце концов он перестал бросать мне ошибки .

Это рабочий код:

#include <LiquidCrystal_I2C.h>


int TankValue0;
int TankValue1;

LiquidCrystal_I2C lcd(0x27, 16, 2);   // установите адрес ЖК-дисплея на 0x27 для 16 символов и 2-строчного дисплея
     
void setup() {
  lcd.init();                          // инициализация lcd
  lcd.init();
  lcd.backlight();
  lcd.setCursor(1, 0);
  lcd.clear();
  lcd.print("WORD");
  lcd.setCursor(0, 1);
  lcd.print("TO");
  delay(1500);
  lcd.clear();
  lcd.print("YO ");
  lcd.setCursor(0, 1);
  lcd.print("MOMMA");        
  delay(2000);
  lcd.clear();
  pinMode(A0, INPUT);
  Serial.begin(9600);               // запуск последовательного монитора
}

void loop() {
  int sensorTankValue0 = analogRead(A0);
  int sensorTankValue1 = analogRead(A1);
  TankValue0 = map(sensorTankValue0, 210, 695, 0, 100);// я просто изменил первые 2 набора значений пока они не стали правильными для полного и пустого
  TankValue1 = map(sensorTankValue1, 210, 695, 0, 100);
  if (TankValue0 < 0) {
    TankValue0 = 0;
  }
  if (TankValue1 < 0) {
    TankValue1 = 0;
  }
  if (TankValue0 > 100) {
    TankValue0 = 100;
  }
  if (TankValue1 > 100) {
    TankValue1 = 100;
  }
  lcd.print("Water Level is :");
  lcd.setCursor(0, 1);
  delay(100);
  lcd.print("WATER TANK = ");
  lcd.print(TankValue0);
  lcd.print("%");
  lcd.setCursor(0, 0);

  delay(10000);
  lcd.clear();
}
,

извините, я не понимаю "кодовое поле"....., @SV Savannah

Вы можете посмотреть на [историю редактирования](https://arduino.stackexchange.com/posts/81869/revisions), чтобы увидеть, какие изменения я внес, чтобы исправить это. В правом верхнем углу при редактировании есть значок справки (круг с вопросительным знаком), который объясняет некоторые из форматирования. [CommonMark](https://spec.commonmark.org/current/) - это система, используемая сейчас, насколько я понимаю. Существует несколько способов цитирования кода; использование тройного обратного тика, вероятно, является самым простым для большинства случаев здесь., @timemage