Я немного новичок в 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);
}