Итак, я запускаю DS18S20 с ЖК-дисплеем.
Я измеряю свою комнатную температуру и показываю ее на ЖК-дисплее.
В этом бесконечном l oop я получая Сегментацию после 5-6 раз. Я читал, что это должна быть переменная, и у меня есть подозрение, что она есть в моей функции getTmp (), но я не знаю, как это исправить.
Я изучаю C ++ уже две недели и мне нужно Ваша помощь.
Заранее спасибо.
Мой код:
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <wiringPi.h>
#include <lcd.h>
#include <unistd.h>
using namespace std;
#define ever (;;)
//USE WIRINGPI PIN NUMBERS
#define LCD_RS 25 //Register select pin
#define LCD_E 24 //Enable Pin
#define LCD_D4 23 //Data pin 4
#define LCD_D5 22 //Data pin 5
#define LCD_D6 21 //Data pin 6
#define LCD_D7 14 //Data pin 7
void getTmp(string *y)
{
ifstream file("/sys/bus/w1/devices/10-00080366745a/w1_slave");
string f[2];
if (file.is_open())
{
for (int i = 0; i < 2; ++i)
{
getline(file, f[i]);
}
}
string s = f[1];
bool x = true;
int i3 = 0, i2 = 0;
while (x)
{
if (i2 <= 4 && i2 > 0)
{
y[i2 - 1] = s[i3];
++i2;
}
if (i2 > 4)
{
x = false;
}
if (s[i3] == '=')
{
i2 = 1;
}
++i3;
}
}
int main()
{
unsigned int microseconds = 5000;
string b[4];
string *y = b;
int lcd;
wiringPiSetup();
const char *tmp;
for ever
{
getTmp(y);
string t = "Temp = "+b[0]+b[1]+"."+b[2]+b[3]+"°C";
tmp=t.c_str();
lcd = lcdInit (2, 16, 4, LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7, 0, 0, 0, 0);
lcdPuts(lcd, tmp);
cout << tmp << endl;
usleep(microseconds);
}
return 0;
}