Hallo Daniela,
hier habe ich mal den Quelltext so abgeändert soweit ich deine Frage verstanden habe.
mfg brosal
using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using GHIElectronics.NETMF.FEZ;
using GHIElectronics.NETMF.Hardware;
using System.IO.Ports;
using System.Text;
namespace MFConsoleApplication1
{
public class Program
{
public static class GlobalVar
{
static int _globalValue;
public static int GlobalValue
{
get { return _globalValue; }
set { _globalValue = value; }
}
}
// SerialPort ist nur dann dauerhaft erreichbar wenn als >>>static Globale Variable<<< deklariert ist
// Das selbe gilt für den Buffer
// Wenn der Buffer und der Serialport lokal in einer Methode deklariert ist und die Methode verlassen wird
// wird der Serialport und der Buffer aus dem Speicher gelöscht und ist nicht mehr ansprechbar
static byte[] Buffer;
static SerialPort UART = new SerialPort("COM1", 115200);
public static void Main()
{
GlobalVar.GlobalValue = 0;
//Serialport
UART.Open();
//Delegat Interrupt Empfang setzen
UART.DataReceived += new SerialDataReceivedEventHandler(UART_DataReceived);
// the pin will generate interrupt on high and low edges
InterruptPort IntButton =
new InterruptPort((Cpu.Pin)FEZ_Pin.Interrupt.LDR, true,
Port.ResistorMode.PullUp,
Port.InterruptMode.InterruptEdgeLow);
// add an interrupt handler to the pin
IntButton.OnInterrupt += new NativeEventHandler(IntButton_OnInterrupt);
//do anything you like here
// Thread.Sleep(Timeout.Infinite);
AnalogIn voltagePort = new AnalogIn((AnalogIn.Pin)FEZ_Pin.AnalogIn.An3);
OutputPort lowPort = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.An0, false);//???
OutputPort highPort = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.An2, true);//???
const double maxVoltage = 3.3;
const int maxAdcValue = 1023;
InterruptPort RX =
new InterruptPort((Cpu.Pin)FEZ_Pin.Interrupt.Di0, true,
Port.ResistorMode.PullUp,
Port.InterruptMode.InterruptEdgeLow);
RX.OnInterrupt += new NativeEventHandler(RX_OnInterrupt);
while (true)
{
double mess = 0;
int sample = 10000;
for (int i = 0; i <= (sample - 1); i++)
{
mess += (double)voltagePort.Read();
}
double valueRaw = mess / sample;
double valueVoltage = (valueRaw * maxVoltage) / maxAdcValue;
double valuePercent = (valueVoltage / maxVoltage) * 100;
Debug.Print("Voltage: " + valueVoltage + "V");
Debug.Print("Percent: " + valuePercent + "%");
//Thread.Sleep(1000);
}
}
/// <summary>
/// Interrupt Routine DataReceived
/// </summary>
/// <param name="sender">SerialPort als Object</param>
/// <param name="e">Daten und </param>
static void UART_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort SP = (SerialPort)sender; //Zeiger auf den Serialport der den IRQ gesendet hat setzten
//somit sind mit SP alle Methoden Eigenschaften und Ereignisse des UART erreichbar
Buffer = new byte[SP.BytesToRead];
SP.Read(Buffer, 0, SP.BytesToRead);
String IN = new string(UTF8Encoding.UTF8.GetChars(Buffer)); //Empfangene Zeichen in String wandeln
//Bricht ab bei einem nicht Druckbaren zeiche
if (IN == "1")
{
//Wandelt GlobalVar.GlobalValue zuerst in einen String toString() dann in Bytes
byte[] TempBuff = UTF8Encoding.UTF8.GetBytes(GlobalVar.GlobalValue.T oString());
SP.Write(TempBuff, 0, TempBuff.Length); //und Absenden
SP.DiscardInBuffer();// InBuffer löschen
}
}
static void IntButton_OnInterrupt(uint port, uint state,
DateTime time)
{
GlobalVar.GlobalValue++;
//string zaehler_string = GlobalVar.GlobalValue.ToString(); //Kannst du dir sparen
//Jede Variable kann man mit .toString() in einen String Wandeln >Achtung Klammern nicht vergessen<
Debug.Print(GlobalVar.GlobalValue.ToString());
}
static void RX_OnInterrupt(uint port, uint state,
DateTime time)
{
/*
* Du brauchst keinen extra interupt an der Com RX Leitung
* da der SerialPort DataReceived interrupt sowiso ausgelöst wird wenn
* Daten hereingekommen sind
*
SerialPort UART = new SerialPort("COM3", 115200);
// Initial Daten
int read_count = 0;
byte[] tx_data;
byte[] rx_data = new byte[10];
UART.ReadTimeout = 0;
read_count = UART.Read(rx_data, 0, rx_data.Length);
string empfangen = rx_data.ToString();
string zaehler_string = GlobalVar.GlobalValue.ToString();
if (empfangen == "1")
{
tx_data = Encoding.UTF8.GetBytes(zaehler_string);
UART.Write(tx_data, 0, tx_data.Length);
}
*/
}
}
}
Lesezeichen