我目前正在使用 Arduino 和 LM35 传感器编写温度监视器。第一部分已经完成,但在我的情况下,使用控制台应用程序是必要的。控制台应用程序将负责实时显示传感器接收到的数据,同时能够在温度升高过多时写入存储在计算机上的日志文件。在将数据记录到文件时,我设法从 Stack Overflow 和 MSDN 获得了一些关于在控制台窗口中显示数据的帮助,但我似乎无法让它只记录特定的数字。例如,任何超过 25 的数字都需要写入文件。
我查看了 Microsoft 的文档,但还没有发现任何对我有用的东西。这是针对一个项目的,除了 C# 之外,我不能使用其他任何我不太熟悉的东西,不幸的是,没有足够的时间来学习它。在我看来,解决方案似乎应该很简单,但可能并非如此。至少,我还没有找到任何可行的方法。
如果这里有人可以提供帮助,我会很高兴。这是我目前拥有的。明确的答案和解决方案会很棒。请记住,我只希望将 25 以上的数字记录到文件中。任何低于此值的内容只需按原样写入控制台,无需记录。
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace tempLog
{
class Program
{
static void Main(string[] args)
{
using (var cc = new ConsoleCopy("C:\\log.txt"))
{
string[] names = SerialPort.GetPortNames();
Console.WriteLine("Serial porte:");
foreach (string name in names)
Console.WriteLine(name);
Console.WriteLine("Skriv navnet på en port, du vil forbinde til:");
SerialPort p = new SerialPort(Console.ReadLine());
Console.Write("Skriv 'quit' for at afslutte programmet");
p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
p.Open();
string line;
do
{
line = Console.ReadLine();
p.Write(line);
} while (line != "quit");
p.Close();
}}
String DataBuffer = "";
static void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine(
(sender as SerialPort).ReadExisting());
}
class ConsoleCopy : IDisposable
{
FileStream fileStream;
StreamWriter fileWriter;
TextWriter doubleWriter;
TextWriter oldOut;
class DoubleWriter : TextWriter
{
TextWriter one;
TextWriter two;
public DoubleWriter(TextWriter one, TextWriter two)
{
this.one = one;
this.two = two;
}
public override Encoding Encoding
{
get { return one.Encoding; }
}
public override void Flush()
{
one.Flush();
two.Flush();
}
public override void Write(char value)
{
one.Write(value);
two.Write(value);
}
}
public ConsoleCopy(string path)
{
oldOut = Console.Out;
try
{
fileStream = File.Create(path);
fileWriter = new StreamWriter(fileStream);
fileWriter.AutoFlush = true;
doubleWriter = new DoubleWriter(fileWriter, oldOut);
}
catch (Exception e)
{
Console.WriteLine("Kan ikke oprette fil til skrivning");
Console.WriteLine(e.Message);
return;
}
Console.SetOut(doubleWriter);
}
public void Dispose()
{
Console.SetOut(oldOut);
if (fileWriter != null)
{
fileWriter.Flush();
fileWriter.Close();
fileWriter = null;
}
if (fileStream != null)
{
fileStream.Close();
fileStream = null;
}
}
}
}}