Arduino останавливает мой код, если я ставлю коды LCD l oop - PullRequest
1 голос
/ 31 марта 2020

Я немного новичок в Arduino, и Engli sh - не мой первый язык, поэтому могут быть некоторые ошибки.

Я просто работаю над проектом как хобби, чтобы поддерживать время. Я пытаюсь получить температуру воздуха, температуру воды и расход воды. Для этих данных я использую

LM35DZ, DS18B20, YF-S201

, и они отлично работают, хотя я получил некоторые коды из других проектов. Я получаю эти данные с последовательного монитора, и у меня есть ЖК-дисплей для просмотра этих данных.

После того, как я вставил ЖК-коды, часть настройки void работает отлично. Я получаю A: H: S: / где они должны быть (вы поймете, о чем я говорю, когда посмотрите на часть моего кода на ЖК-дисплее при настройке). Для части l oop она не работает, когда я ставлю жк-коды в конец, а на последовательном мониторе она останавливается при расчете расхода воды (последовательный монитор работает хорошо, если я удаляю эти коды).

https://imgur.com/a/zqUDfw5

Я поместил весь код, если вам нужно его увидеть. Вы можете просто перейти к проблеме.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4
DeviceAddress thermometerAddress;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature tempSensor(&oneWire);

//havasicaklik
int lm35Pin = A0;
int okunan_deger = 0;
float sicaklik_gerilim = 0;
float sicaklik = 0;
float susicakligi = 0;

//suakis
volatile int NbTopsFan; //measuring the rising edges of the signal
int Calc;                              
#define hallsensor 2    //The pin location of the sensor

//potansiyometre
#define pts A1
float ptsck = 30;

//lcd
LiquidCrystal_I2C lcd(0x27, 16, 2);

void rpm () {    //This is the function that the interupt calls
NbTopsFan++;  //This function measures the rising and falling edge of the
}

void setup() {
  Serial.begin(9600);

  //susicaklik
  tempSensor.begin();
  tempSensor.setResolution(thermometerAddress, 9);

  //suakis
  pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
  attachInterrupt(0, rpm, RISING); //and the interrupt is attached

  //lcd
  lcd.begin();
  //yükleme ekranı
  lcd.home();
  lcd.print(" Berke  Karasah");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("Yukleniyor"); //This is just to make it look like it's loading
  for (int k = 0;k < 2; k++) {
    for (int i = 0;i < 7; i++) {
    delay(75);
    lcd.print(".");
    }
  lcd.setCursor(10,1);
  lcd.print("      ");
  lcd.setCursor(10,1);
  }
  lcd.clear();
  lcd.home();        // This part where the datas should be*******
  lcd.print("A: ");     //Calc: Water flow
  lcd.setCursor(7,0);
  lcd.print("H:");     //sicaklik: Air temp
  lcd.setCursor(0,1);
  lcd.print("S: ");    //susicakligi: Water temp
  lcd.setCursor(9,1);
  lcd.print("/");      //ptsck: Potentiometer value
}

void loop() {

  delay(1000);

  //havasicaklik
  okunan_deger = analogRead(lm35Pin);
  sicaklik_gerilim = (5000.0 / 1023.0) * okunan_deger;
  sicaklik = sicaklik_gerilim / 10.0;
  Serial.print("Hava sicakligi: ");
  Serial.print(sicaklik);

  Serial.print("\t");

  //susicaklik
  tempSensor.requestTemperatures();
  Serial.print("Su sicakligi: ");
  susicakligi = tempSensor.getTempCByIndex(0);
  Serial.print(susicakligi);

  Serial.print("\t");

  //potansiyometre
  ptsck = analogRead(pts);
  ptsck = map(ptsck, 0,1023,0,50);
  Serial.print("Hedef sicaklik: ");
  Serial.print(ptsck);

  Serial.print("\t");

  //suakis
  NbTopsFan = 0;    //Set NbTops to 0 ready for calculations
  sei();            //Enables interrupts
  delay(1000);      //Wait 1 second
  cli();            //Disable interrupts
  Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate
  Serial.print("Akis hizi: ");
  Serial.print(Calc, DEC); //Prints the number calculated above
  Serial.print(" L/s"); //Prints "L/hour" and returns a  new line

  Serial.print("\n");

  //lcd        !!!!!!!!!!!!!!!!!!!THIS IS THE PROBLEM!!!!!!!!!!!!!!!!!!!!!!!!!!!
  lcd.setCursor(3,0);
  lcd.print(Calc);
  lcd.setCursor(10,0);
  lcd.print(sicaklik);
  lcd.setCursor(3,1);
  lcd.print(susicakligi);
  lcd.setCursor(11,1);
  lcd.print(ptsck);


}

1 Ответ

0 голосов
/ 31 марта 2020

Попробуйте поставить lcd.clear() до следующего;

  lcd.setCursor(3,0);
  lcd.print(Calc);
  lcd.setCursor(10,0);
  lcd.print(sicaklik);
  lcd.setCursor(3,1);
  lcd.print(susicakligi);
  lcd.setCursor(11,1);
  lcd.print(ptsck);

и delay(100); после.

...