0

我目前正在使用 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;
    }
  }
}
        }}
4

0 回答 0