女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣在C#中檢測手勢(shì)并控制IoT

454398 ? 來源:wv ? 2019-10-13 17:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

步驟1:您需要的內(nèi)容:

怎樣在C#中檢測手勢(shì)并控制IoT

硬件:

LattePanda(您可以

屏幕和觸摸面板

軟件

Arduino IDE

Visual Studio

步驟2:演示1:檢測鼠標(biāo)位置并單擊事件

讓我們執(zhí)行項(xiàng)目步驟一步一步首先,請(qǐng)嘗試檢測是否按下了鼠標(biāo)。因此,我們可以根據(jù)間隔來檢測雙擊和三次單擊。

這是一個(gè)簡單的Windows Form應(yīng)用程序。文本框?qū)@示鼠標(biāo)的X軸和Y軸。 您可以在PC上播放此演示。

操作方法播放演示1:

運(yùn)行.exe并移動(dòng)鼠標(biāo),軟件將自動(dòng)檢測鼠標(biāo)的位置。如果按下鼠標(biāo)左鍵,文本框?qū)@示該事件。

您可以在下面查看代碼或在此處下載演示。如果要自己制作此演示,則需要在此處下載Visual Studio。 Open.sln文件,然后可以將其設(shè)置為自己的文件。

演示1代碼:

using System;

using System.Drawing;

using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace Demo_mousehook_csdn

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

MouseHook mh;

private void Form1_Load(object sender, EventArgs e)

{

mh = new MouseHook();

mh.SetHook();

mh.MouseMoveEvent += mh_MouseMoveEvent;

mh.MouseClickEvent += mh_MouseClickEvent;

mh.MouseDownEvent += mh_MouseDownEvent;

mh.MouseUpEvent += mh_MouseUpEvent;

}

private void mh_MouseDownEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

richTextBox1.AppendText(“Left Button Press ”);

}

if (e.Button == MouseButtons.Right)

{

richTextBox1.AppendText(“Right Button Press ”);

}

}

private void mh_MouseUpEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

richTextBox1.AppendText(“Left Button Release ”);

}

if (e.Button == MouseButtons.Right)

{

richTextBox1.AppendText(“Right Button Release ”);

}

}

private void mh_MouseClickEvent(object sender, MouseEventArgs e)

{

//MessageBox.Show(e.X + “-” + e.Y);

if (e.Button == MouseButtons.Left)

{

string sText = “(” + e.X.ToString() + “,” + e.Y.ToString() + “)”;

label1.Text = sText;

}

}

private void mh_MouseMoveEvent(object sender, MouseEventArgs e)

{

int x = e.Location.X;

int y = e.Location.Y;

textBox1.Text = x + “”;

textBox2.Text = y + “”;

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

mh.UnHook();

}

private void Form1_FormClosed_1(object sender, FormClosedEventArgs e)

{

mh.UnHook();

}

private void richTextBox1_TextChanged(object sender, EventArgs e)

{

}

}

public class Win32Api

{

[StructLayout(LayoutKind.Sequential)]

public class POINT

{

public int x;

public int y;

}

[StructLayout(LayoutKind.Sequential)]

public class MouseHookStruct

{

public POINT pt;

public int hwnd;

public int wHitTestCode;

public int dwExtraInfo;

}

public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern bool UnhookWindowsHookEx(int idHook);

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);

}

public class MouseHook

{

private Point point;

private Point Point

{

get { return point; }

set

{

if (point != value)

{

point = value;

if (MouseMoveEvent != null)

{

var e = new MouseEventArgs(MouseButtons.None, 0, point.X, point.Y, 0);

MouseMoveEvent(this, e);

}

}

}

}

private int hHook;

private const int WM_MOUSEMOVE = 0x200;

private const int WM_LBUTTONDOWN = 0x201;

private const int WM_RBUTTONDOWN = 0x204;

private const int WM_MBUTTONDOWN = 0x207;

private const int WM_LBUTTONUP = 0x202;

private const int WM_RBUTTONUP = 0x205;

private const int WM_MBUTTONUP = 0x208;

private const int WM_LBUTTONDBLCLK = 0x203;

private const int WM_RBUTTONDBLCLK = 0x206;

private const int WM_MBUTTONDBLCLK = 0x209;

public const int WH_MOUSE_LL = 14;

public Win32Api.HookProc hProc;

public MouseHook()

{

this.Point = new Point();

}

public int SetHook()

{

hProc = new Win32Api.HookProc(MouseHookProc);

hHook = Win32Api.SetWindowsHookEx(WH_MOUSE_LL, hProc, IntPtr.Zero, 0);

return hHook;

}

public void UnHook()

{

Win32Api.UnhookWindowsHookEx(hHook);

}

private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)

{

Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));

if (nCode 《 0)

{

return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

else

{

if (MouseClickEvent != null)

{

MouseButtons button = MouseButtons.None;

int clickCount = 0;

switch ((Int32)wParam)

{

case WM_LBUTTONDOWN:

button = MouseButtons.Left;

clickCount = 1;

MouseDownEvent(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));

break;

case WM_RBUTTONDOWN:

button = MouseButtons.Right;

clickCount = 1;

MouseDownEvent(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));

break;

case WM_MBUTTONDOWN:

button = MouseButtons.Middle;

clickCount = 1;

MouseDownEvent(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));

break;

case WM_LBUTTONUP:

button = MouseButtons.Left;

clickCount = 1;

MouseUpEvent(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));

break;

case WM_RBUTTONUP:

button = MouseButtons.Right;

clickCount = 1;

MouseUpEvent(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));

break;

case WM_MBUTTONUP:

button = MouseButtons.Middle;

clickCount = 1;

MouseUpEvent(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));

break;

}

var e = new MouseEventArgs(button, clickCount, point.X, point.Y, 0);

MouseClickEvent(this, e);

}

this.Point = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y);

return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

}

public delegate void MouseMoveHandler(object sender, MouseEventArgs e);

public event MouseMoveHandler MouseMoveEvent;

public delegate void MouseClickHandler(object sender, MouseEventArgs e);

public event MouseClickHandler MouseClickEvent;

public delegate void MouseDownHandler(object sender, MouseEventArgs e);

public event MouseDownHandler MouseDownEvent;

public delegate void MouseUpHandler(object sender, MouseEventArgs e);

public event MouseUpHandler MouseUpEvent;

}

}

如果有任何疑問,請(qǐng)讓我知道!

步驟3:演示2:檢測雙擊并控制LED

請(qǐng)參見上圖。為了防止錯(cuò)誤觸發(fā),我在屏幕區(qū)域的右1/5處設(shè)置了檢測鼠標(biāo)雙擊的功能。

在此演示中,您將知道如何檢測雙擊(只需計(jì)算兩次單擊的間隔)并通過Arduino Leonardo控制LED。

此演示涉及C#和Arduino串行通信(PC與Arduino之間的通信)。如果您想了解這部分知識(shí),請(qǐng)參見此處的教程

如何播放演示2:

雙擊右側(cè)1/5側(cè)面屏幕上的,然后您將進(jìn)入GPIO控制模式,LED將會(huì)點(diǎn)亮。單擊屏幕左側(cè)的4/5側(cè),LED將關(guān)閉。

您可以在附件中查看代碼或在此處下載演示。如果最小化窗口,則該功能仍然有效。很酷,不是嗎?

演示2代碼:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

using System.Globalization;

using LattePanda.Firmata;

namespace Demo_mousehook_csdn

{

public partial class Form1 : Form

{

static Arduino arduino = new Arduino();

static DateTime localDate = DateTime.Now;

double click_time;

int click_count = 0;

bool tri_click_flag = false;

public Form1()

{

InitializeComponent();

arduino.pinMode(13, Arduino.OUTPUT);//

}

MouseHook mh;

private void Form1_Load(object sender, EventArgs e)

{

mh = new MouseHook();

mh.SetHook();

mh.MouseMoveEvent += mh_MouseMoveEvent;

mh.MouseClickEvent += mh_MouseClickEvent;

}

private void mh_MouseClickEvent(object sender, MouseEventArgs e)

{

//MessageBox.Show(e.X + “-” + e.Y);

if (e.Button == MouseButtons.Left)

{

string sText = “(” + e.X.ToString() + “,” + e.Y.ToString() + “)”;

label1.Text = sText;

click_time = (DateTime.Now - localDate).TotalSeconds;

localDate = DateTime.Now;

if (e.X 》 (Screen.PrimaryScreen.Bounds.Width / 5 * 4))

{

if (click_time 《= 0.5)

{

click_count += 1;

if (click_count 》 0)

{

click_count = 1;

tri_click_flag = true;

}

else

{

tri_click_flag = false;

}

}

else

{

}

if (click_count 《=1 && click_time 》 0.5)

click_count = 0;

}

else

{

click_count = 0;

tri_click_flag = false;

}

if (tri_click_flag == true)

{

textBox6.Text = “1”;

arduino.digitalWrite(13, Arduino.HIGH);

}

else

{

textBox6.Text = “0”;

arduino.digitalWrite(13, Arduino.LOW);

}

}

}

private void mh_MouseMoveEvent(object sender, MouseEventArgs e)

{

int x = e.Location.X;

int y = e.Location.Y;

textBox1.Text = x + “”;

textBox2.Text = y + “”;

textBox3.Text = Screen.PrimaryScreen.Bounds.Height.ToString();

textBox4.Text = Screen.PrimaryScreen.Bounds.Width.ToString();

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

mh.UnHook();

}

private void Form1_FormClosed_1(object sender, FormClosedEventArgs e)

{

mh.UnHook();

}

private void textBox1_TextChanged(object sender, EventArgs e)

{

}

private void textBox2_TextChanged(object sender, EventArgs e)

{

}

private void label1_Click(object sender, EventArgs e)

{

}

private void textBox3_TextChanged(object sender, EventArgs e)

{

}

private void textBox4_TextChanged(object sender, EventArgs e)

{

}

private void label2_Click(object sender, EventArgs e)

{

}

private void label3_Click(object sender, EventArgs e)

{

}

private void textBox5_TextChanged(object sender, EventArgs e)

{

}

private void textBox6_TextChanged(object sender, EventArgs e)

{

}

}

public class Win32Api

{

[StructLayout(LayoutKind.Sequential)]

public class POINT

{

public int x;

public int y;

}

[StructLayout(LayoutKind.Sequential)]

public class MouseHookStruct

{

public POINT pt;

public int hwnd;

public int wHitTestCode;

public int dwExtraInfo;

}

public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

//安裝鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

//卸載鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern bool UnhookWindowsHookEx(int idHook);

//調(diào)用下一個(gè)鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);

}

public class MouseHook

{

private Point point;

private Point Point

{

get { return point; }

set

{

if (point != value)

{

point = value;

if (MouseMoveEvent != null)

{

var e = new MouseEventArgs(MouseButtons.None, 0, point.X, point.Y, 0);

MouseMoveEvent(this, e);

}

}

}

}

private int hHook;

private const int WM_LBUTTONDOWN = 0x201;

public const int WH_MOUSE_LL = 14;

public Win32Api.HookProc hProc;

public MouseHook()

{

this.Point = new Point();

}

public int SetHook()

{

hProc = new Win32Api.HookProc(MouseHookProc);

hHook = Win32Api.SetWindowsHookEx(WH_MOUSE_LL, hProc, IntPtr.Zero, 0);

return hHook;

}

public void UnHook()

{

Win32Api.UnhookWindowsHookEx(hHook);

}

private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)

{

Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));

if (nCode 《 0)

{

return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

else

{

if (MouseClickEvent != null)

{

MouseButtons button = MouseButtons.None;

int clickCount = 0;

switch ((Int32)wParam)

{

case WM_LBUTTONDOWN:

button = MouseButtons.Left;

clickCount = 1;

break;

}

var e = new MouseEventArgs(button, clickCount, point.X, point.Y, 0);

MouseClickEvent(this, e);

}

this.Point = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y);

return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

}

public delegate void MouseMoveHandler(object sender, MouseEventArgs e);

public event MouseMoveHandler MouseMoveEvent;

public delegate void MouseClickHandler(object sender, MouseEventArgs e);

public event MouseClickHandler MouseClickEvent;

}

}

這是一種進(jìn)行交互項(xiàng)目的新方法。它也可以用于家庭自動(dòng)化控制系統(tǒng)。使用PC來控制空調(diào),燈光,電視等。

步驟4:演示3:檢測三次單擊并控制屏幕背景光

在此演示中,您將獲得鼠標(biāo)的位置并將實(shí)時(shí)值發(fā)送到PC。然后,您的PC可以根據(jù)該值更改背景光。 您還可以在PC上播放此演示。

此演示涉及使用C#來控制屏幕的背景光。如果您想了解這一部分知識(shí),可以在這里查看教程。

如何播放演示3:

在右側(cè)1/3上單擊三次。屏幕的5側(cè),然后您將進(jìn)入GPIO控制模式,向上或向下移動(dòng)手指,屏幕的背景光會(huì)變暗或變暗。

此功能與您的iPhone有點(diǎn)相似。您可以在附件中查看代碼或在此處下載演示。

方法1:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

using System.Globalization;

namespace Demo_mousehook_csdn

{

public partial class Form1 : Form

{

[DllImport(“gdi32.dll”)]

private unsafe static extern bool SetDeviceGammaRamp(Int32 hdc, void* ramp);

private static bool initialized = false;

private static Int32 hdc;

private static int a;

static DateTime localDate = DateTime.Now;

double click_time;

int click_count = 0;

bool tri_click_flag = false;

static string sText=“”;

static int IncreaseData = 0;

static int ClickPositionY = 0;

public Form1()

{

InitializeComponent();

}

MouseHook mh;

// protected override void SetVisibleCore(bool value)

// {

// base.SetVisibleCore(false);

// }

private void Form1_Load(object sender, EventArgs e)

{

mh = new MouseHook();

mh.SetHook();

mh.MouseMoveEvent += mh_MouseMoveEvent;

mh.MouseClickEvent += mh_MouseClickEvent;

mh.MouseDownEvent += mh_MouseDownEvent;

mh.MouseUpEvent += mh_MouseUpEvent;

}

private static void InitializeClass()

{

if (initialized)

return;

//Get the hardware device context of the screen, we can do

//this by getting the graphics object of null (IntPtr.Zero)

//then getting the HDC and converting that to an Int32.

hdc = Graphics.FromHwnd(IntPtr.Zero).GetHdc().ToInt32();

initialized = false;

}

public static unsafe bool SetBrightness(int brightness)

{

InitializeClass();

if (brightness 》 255)

brightness = 255;

if (brightness 《 0)

brightness = 0;

short* gArray = stackalloc short[3 * 256];

short* idx = gArray;

for (int j = 0; j 《 3; j++)

{

for (int i = 0; i 《 256; i++)

{

int arrayVal = i * (brightness + 128);

if (arrayVal 》 65535)

arrayVal = 65535;

*idx = (short)arrayVal;

idx++;

}

}

//For some reason, this always returns false?

bool retVal = SetDeviceGammaRamp(hdc, gArray);

//Memory allocated through stackalloc is automatically free‘d

//by the CLR.

return retVal;

}

private void mh_MouseClickEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

ClickPositionY = e.X;

sText = “(” + e.X.ToString() + “,” + e.Y.ToString() + “)”;

label1.Text = sText;

click_time = (DateTime.Now - localDate).TotalSeconds;

localDate = DateTime.Now;

if (e.X 》 (Screen.PrimaryScreen.Bounds.Width / 5 * 4))

{

if (click_time 《= 0.5)

{

click_count += 1;

label3.Text = “1”;

if (click_count 》 1)

{

click_count = 2;

label2.Text = “1”;

tri_click_flag = true;

}

else

{

label2.Text = “0”;

tri_click_flag = false;

}

textBox5.Text = click_count.ToString();

}

else

{

textBox5.Text = click_count.ToString();

}

if (click_count 《=1 && click_time 》 0.5)

click_count = 0;

}

else

{

label3.Text = “0”;

click_count = 0;

textBox5.Text = click_count.ToString();

label2.Text = “0”;

tri_click_flag = false;

}

}

}

private void mh_MouseMoveEvent(object sender, MouseEventArgs e)

{

int x = e.Location.X;

int y = e.Location.Y;

int LedData = 0;

LedData = (Screen.PrimaryScreen.Bounds.Height - y)*140/ Screen.PrimaryScreen.Bounds.Height;

if (LedData 《= 0)

LedData = 0;

if (e.X 》 (Screen.PrimaryScreen.Bounds.Width / 5 * 4))

{

if (tri_click_flag == true)

{

textBox6.Text = “1”;

SetBrightness(LedData);

label15.Text = LedData.ToString();

}

else

{

textBox6.Text = “0”;

}

}

textBox1.Text = x + “”;

textBox2.Text = y + “”;

textBox3.Text = Screen.PrimaryScreen.Bounds.Height.ToString();

textBox4.Text = Screen.PrimaryScreen.Bounds.Width.ToString();

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

mh.UnHook();

}

private void Form1_FormClosed_1(object sender, FormClosedEventArgs e)

{

mh.UnHook();

}

private void textBox1_TextChanged(object sender, EventArgs e)

{

}

private void textBox2_TextChanged(object sender, EventArgs e)

{

}

private void label1_Click(object sender, EventArgs e)

{

}

private void textBox3_TextChanged(object sender, EventArgs e)

{

}

private void textBox4_TextChanged(object sender, EventArgs e)

{

}

private void label2_Click(object sender, EventArgs e)

{

}

private void label3_Click(object sender, EventArgs e)

{

}

private void textBox5_TextChanged(object sender, EventArgs e)

{

}

private void textBox6_TextChanged(object sender, EventArgs e)

{

}

private void mh_MouseDownEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

richTextBox1.AppendText(“按下了左鍵 ”);

}

}

private void mh_MouseUpEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

richTextBox1.AppendText(“松開了左鍵 ”);

}

}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)

{

}

private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)

{

}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)

{

Application.ExitThread();

Environment.Exit(0);

}

private void label13_Click(object sender, EventArgs e)

{

}

private void label14_Click(object sender, EventArgs e)

{

}

private void label15_Click(object sender, EventArgs e)

{

}

private void richTextBox1_TextChanged(object sender, EventArgs e)

{

}

}

public class Win32Api

{

[StructLayout(LayoutKind.Sequential)]

public class POINT

{

public int x;

public int y;

}

[StructLayout(LayoutKind.Sequential)]

public class MouseHookStruct

{

public POINT pt;

public int hwnd;

public int wHitTestCode;

public int dwExtraInfo;

}

public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

//安裝鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

//卸載鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern bool UnhookWindowsHookEx(int idHook);

//調(diào)用下一個(gè)鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);

}

public class MouseHook

{

private Point point;

private Point Point

{

get { return point; }

set

{

if (point != value)

{

point = value;

if (MouseMoveEvent != null)

{

var e = new MouseEventArgs(MouseButtons.None, 0, point.X, point.Y, 0);

MouseMoveEvent(this, e);

}

}

}

}

private int hHook;

private const int WM_LBUTTONDOWN = 0x201;

private const int WM_LBUTTONUP = 0x202;

public const int WH_MOUSE_LL = 14;

public Win32Api.HookProc hProc;

public MouseHook()

{

this.Point = new Point();

}

public int SetHook()

{

hProc = new Win32Api.HookProc(MouseHookProc);

hHook = Win32Api.SetWindowsHookEx(WH_MOUSE_LL, hProc, IntPtr.Zero, 0);

return hHook;

}

public void UnHook()

{

Win32Api.UnhookWindowsHookEx(hHook);

}

private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)

{

Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));

if (nCode 《 0)

{

return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

else

{

if (MouseClickEvent != null)

{

MouseButtons button = MouseButtons.None;

int clickCount = 0;

switch ((Int32)wParam)

{

case WM_LBUTTONDOWN:

button = MouseButtons.Left;

clickCount = 1;

break;

case WM_LBUTTONUP:

button = MouseButtons.Left;

clickCount = 1;

break;

}

var e = new MouseEventArgs(button, clickCount, point.X, point.Y, 0);

MouseClickEvent(this, e);

}

this.Point = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y);

return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

}

public delegate void MouseMoveHandler(object sender, MouseEventArgs e);

public event MouseMoveHandler MouseMoveEvent;

public delegate void MouseClickHandler(object sender, MouseEventArgs e);

public event MouseClickHandler MouseClickEvent;

public delegate void MouseDownHandler(object sender, MouseEventArgs e);

public event MouseDownHandler MouseDownEvent;

public delegate void MouseUpHandler(object sender, MouseEventArgs e);

public event MouseUpHandler MouseUpEvent;

}

}

方法2:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

using System.Globalization;

//using LattePanda.Firmata;

namespace Demo_mousehook_csdn

{

public partial class Form1 : Form

{

//static Arduino arduino = new Arduino();

static DateTime localDate = DateTime.Now;

double click_time;

int click_count = 0;

bool tri_click_flag = false;

bool mouse_down_flag = false;

static string sText=“”;

static int ClickPositionY = 0;

static int LedData = 0;//需要發(fā)送的LED亮度值

static int LedIncreaseData = 0; //Data增量

static int LedLastData = 0;//Led的最后一次亮度

static int LedStoreData = 0;//Led需要儲(chǔ)藏的數(shù)值,備用

[DllImport(“gdi32.dll”)]

private unsafe static extern bool SetDeviceGammaRamp(Int32 hdc, void* ramp);

private static bool initialized = false;

private static Int32 hdc;

private static void InitializeClass()

{

if (initialized)

return;

//Get the hardware device context of the screen, we can do

//this by getting the graphics object of null (IntPtr.Zero)

//then getting the HDC and converting that to an Int32.

hdc = Graphics.FromHwnd(IntPtr.Zero).GetHdc().ToInt32();

initialized = false;

}

public static unsafe bool SetBrightness(int brightness)

{

InitializeClass();

if (brightness 》 255)

brightness = 255;

if (brightness 《 0)

brightness = 0;

short* gArray = stackalloc short[3 * 256];

short* idx = gArray;

for (int j = 0; j 《 3; j++)

{

for (int i = 0; i 《 256; i++)

{

int arrayVal = i * (brightness + 128);

if (arrayVal 》 65535)

arrayVal = 65535;

*idx = (short)arrayVal;

idx++;

}

}

//For some reason, this always returns false?

bool retVal = SetDeviceGammaRamp(hdc, gArray);

//Memory allocated through stackalloc is automatically free’d

//by the CLR.

return retVal;

}

public Form1()

{

InitializeComponent();

// arduino.pinMode(13, Arduino.OUTPUT);//

}

MouseHook mh;

// protected override void SetVisibleCore(bool value)

// {

// base.SetVisibleCore(false);

// }

private void Form1_Load(object sender, EventArgs e)

{

mh = new MouseHook();

mh.SetHook();

mh.MouseMoveEvent += mh_MouseMoveEvent;

mh.MouseClickEvent += mh_MouseClickEvent;

mh.MouseUpEvent += mh_MouseUpEvent;

mh.MouseDownEvent += mh_MouseDownEvent;

}

private void mh_MouseUpEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

LedLastData = LedData;

mouse_down_flag = false;

richTextBox1.AppendText(“Released ”);

}

}

private void mh_MouseDownEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

mouse_down_flag = true;

click_time = (DateTime.Now - localDate).TotalSeconds;

localDate = DateTime.Now;

label13.Text = click_time.ToString();

richTextBox1.AppendText(“Pressed ”);

if (e.X 》 (Screen.PrimaryScreen.Bounds.Width / 5 * 4))

{

ClickPositionY= e.Location.Y;

if (click_time 《= 0.5)

{

click_count += 1;

label3.Text = “1”;

if (click_count 》 1)

{

click_count = 2;

label2.Text = “1”;

tri_click_flag = true;

}

else

{

label2.Text = “0”;

tri_click_flag = false;

}

textBox5.Text = click_count.ToString();

}

else

{

textBox5.Text = click_count.ToString();

}

if (click_count 《= 1 && click_time 》 0.5)

click_count = 0;

}

else

{

label3.Text = “0”;

click_count = 0;

textBox5.Text = click_count.ToString();

label2.Text = “0”;

tri_click_flag = false;

}

}

}

private void mh_MouseClickEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

sText = “(” + e.X.ToString() + “,” + e.Y.ToString() + “)”;

label1.Text = sText;

}

}

private void mh_MouseMoveEvent(object sender, MouseEventArgs e)

{

int x = e.Location.X;

int y = e.Location.Y;

if (e.X 》 (Screen.PrimaryScreen.Bounds.Width / 5 * 4))

{

if (tri_click_flag == true)

{

textBox6.Text = “1”;

if(mouse_down_flag==true)

{

LedIncreaseData = (ClickPositionY - y) * 140 / 1080;

LedData = LedStoreData + LedIncreaseData;

if(LedData《0)

{

LedData = 0;

}

if (LedData 》 140)

{

LedData = 140;

}

SetBrightness(LedData);

}

if(mouse_down_flag==false)

{

LedStoreData = LedLastData;

}

}

else

{

textBox6.Text = “0”;

}

}

label19.Text = LedStoreData.ToString();

label20.Text = LedData.ToString();

label15.Text = LedIncreaseData.ToString();

textBox1.Text = x + “”;

textBox2.Text = y + “”;

textBox3.Text = Screen.PrimaryScreen.Bounds.Height.ToString();

textBox4.Text = Screen.PrimaryScreen.Bounds.Width.ToString();

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

mh.UnHook();

}

private void Form1_FormClosed_1(object sender, FormClosedEventArgs e)

{

mh.UnHook();

}

private void textBox1_TextChanged(object sender, EventArgs e)

{

}

private void textBox2_TextChanged(object sender, EventArgs e)

{

}

private void label1_Click(object sender, EventArgs e)

{

}

private void textBox3_TextChanged(object sender, EventArgs e)

{

}

private void textBox4_TextChanged(object sender, EventArgs e)

{

}

private void label2_Click(object sender, EventArgs e)

{

}

private void label3_Click(object sender, EventArgs e)

{

}

private void textBox5_TextChanged(object sender, EventArgs e)

{

}

private void textBox6_TextChanged(object sender, EventArgs e)

{

}

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

}

private void Form1_MouseUp(object sender, MouseEventArgs e)

{

}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)

{

}

private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)

{

}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)

{

Application.ExitThread();

Environment.Exit(0);

}

private void label13_Click(object sender, EventArgs e)

{

}

private void label14_Click(object sender, EventArgs e)

{

}

private void label15_Click(object sender, EventArgs e)

{

}

private void richTextBox1_TextChanged(object sender, EventArgs e)

{

}

private void label19_Click(object sender, EventArgs e)

{

}

private void label20_Click(object sender, EventArgs e)

{

}

}

public class Win32Api

{

[StructLayout(LayoutKind.Sequential)]

public class POINT

{

public int x;

public int y;

}

[StructLayout(LayoutKind.Sequential)]

public class MouseHookStruct

{

public POINT pt;

public int hwnd;

public int wHitTestCode;

public int dwExtraInfo;

}

public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

//安裝鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

//卸載鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern bool UnhookWindowsHookEx(int idHook);

//調(diào)用下一個(gè)鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);

}

public class MouseHook

{

private Point point;

private Point Point

{

get { return point; }

set

{

if (point != value)

{

point = value;

if (MouseMoveEvent != null)

{

var e = new MouseEventArgs(MouseButtons.None, 0, point.X, point.Y, 0);

MouseMoveEvent(this, e);

}

}

}

}

private int hHook;

private const int WM_LBUTTONDOWN = 0x201;

private const int WM_LBUTTONUP = 0x202;

public const int WH_MOUSE_LL = 14;

public Win32Api.HookProc hProc;

public MouseHook()

{

this.Point = new Point();

}

public int SetHook()

{

hProc = new Win32Api.HookProc(MouseHookProc);

hHook = Win32Api.SetWindowsHookEx(WH_MOUSE_LL, hProc, IntPtr.Zero, 0);

return hHook;

}

public void UnHook()

{

Win32Api.UnhookWindowsHookEx(hHook);

}

private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)

{

Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));

if (nCode 《 0)

{

return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

else

{

if (MouseClickEvent != null)

{

MouseButtons button = MouseButtons.None;

int clickCount = 0;

switch ((Int32)wParam)

{

case WM_LBUTTONDOWN:

button = MouseButtons.Left;

clickCount = 1;

MouseDownEvent(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));

break;

case WM_LBUTTONUP:

button = MouseButtons.Left;

clickCount = 1;

MouseUpEvent(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));

break;

}

var e = new MouseEventArgs(button, clickCount, point.X, point.Y, 0);

MouseClickEvent(this, e);

}

this.Point = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y);

return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

}

public delegate void MouseMoveHandler(object sender, MouseEventArgs e);

public event MouseMoveHandler MouseMoveEvent;

public delegate void MouseClickHandler(object sender, MouseEventArgs e);

public event MouseClickHandler MouseClickEvent;

public delegate void MouseUpHandler(object sender, MouseEventArgs e);

public event MouseUpHandler MouseUpEvent;

public delegate void MouseDownHandler(object sender, MouseEventArgs e);

public event MouseDownHandler MouseDownEvent;

}

}

玩得開心!

到目前為止還好嗎?如有任何疑問,請(qǐng)告訴我!

步驟5:演示4:檢測三次單擊并控制LED燈

在此演示中,您將獲得鼠標(biāo)的位置并將實(shí)時(shí)值發(fā)送到Arduino。然后您的Arduino可以根據(jù)該值控制LED。

播放DEMO 4的方法:

在屏幕右側(cè)的1/5上單擊三下,您將進(jìn)入GPIO控制模式,移動(dòng)您的GPIO手指向上或向下,LED(D13)會(huì)變亮或變暗。

此演示涉及PC與Arduino之間的通信(Arduino和C#通信)。如果您想了解這部分知識(shí),請(qǐng)參閱此處的教程。

您可以在附件中查看代碼,也可以在此處下載演示。

Demo 4代碼:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;

using System.Globalization;

using LattePanda.Firmata;

namespace Demo_mousehook_csdn

{

public partial class Form1 : Form

{

static Arduino arduino = new Arduino();

static DateTime localDate = DateTime.Now;

double click_time;

int click_count = 0;

bool tri_click_flag = false;

bool mouse_down_flag = false;

static string sText=“”;

static int ClickPositionY = 0;

static int LedData = 0;//需要發(fā)送的LED亮度值

static int LedIncreaseData = 0; //Data增量

static int LedLastData = 0;//Led的最后一次亮度

static int LedStoreData = 0;//Led需要儲(chǔ)藏的數(shù)值,備用

public Form1()

{

InitializeComponent();

arduino.pinMode(13, Arduino.PWM);//

}

MouseHook mh;

private void Form1_Load(object sender, EventArgs e)

{

mh = new MouseHook();

mh.SetHook();

mh.MouseMoveEvent += mh_MouseMoveEvent;

mh.MouseClickEvent += mh_MouseClickEvent;

mh.MouseUpEvent += mh_MouseUpEvent;

mh.MouseDownEvent += mh_MouseDownEvent;

}

private void mh_MouseUpEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

LedLastData = LedData;

mouse_down_flag = false;

richTextBox1.AppendText(“Released ”);

}

}

private void mh_MouseDownEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

mouse_down_flag = true;

click_time = (DateTime.Now - localDate).TotalSeconds;

localDate = DateTime.Now;

label13.Text = click_time.ToString();

richTextBox1.AppendText(“Pressed ”);

if (e.X 》 (Screen.PrimaryScreen.Bounds.Width / 5 * 4))

{

ClickPositionY= e.Location.Y;

if (click_time 《= 0.5)

{

click_count += 1;

label3.Text = “1”;

if (click_count 》 1)

{

click_count = 2;

label2.Text = “1”;

tri_click_flag = true;

}

else

{

label2.Text = “0”;

tri_click_flag = false;

}

textBox5.Text = click_count.ToString();

}

else

{

textBox5.Text = click_count.ToString();

}

if (click_count 《= 1 && click_time 》 0.5)

click_count = 0;

}

else

{

label3.Text = “0”;

click_count = 0;

textBox5.Text = click_count.ToString();

label2.Text = “0”;

tri_click_flag = false;

}

}

}

private void mh_MouseClickEvent(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

sText = “(” + e.X.ToString() + “,” + e.Y.ToString() + “)”;

label1.Text = sText;

}

}

private void mh_MouseMoveEvent(object sender, MouseEventArgs e)

{

int x = e.Location.X;

int y = e.Location.Y;

if (e.X 》 (Screen.PrimaryScreen.Bounds.Width / 5 * 4))

{

if (tri_click_flag == true)

{

textBox6.Text = “1”;

if(mouse_down_flag==true)

{

LedIncreaseData = (ClickPositionY - y) * 140 / 1080;

LedData = LedStoreData + LedIncreaseData;

if(LedData《0)

{

LedData = 0;

}

if (LedData 》 140)

{

LedData = 140;

}

arduino.analogWrite(13,LedData);

}

if(mouse_down_flag==false)

{

LedStoreData = LedLastData;

}

}

else

{

textBox6.Text = “0”;

}

}

label19.Text = LedStoreData.ToString();

label20.Text = LedData.ToString();

label15.Text = LedIncreaseData.ToString();

textBox1.Text = x + “”;

textBox2.Text = y + “”;

textBox3.Text = Screen.PrimaryScreen.Bounds.Height.ToString();

textBox4.Text = Screen.PrimaryScreen.Bounds.Width.ToString();

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

mh.UnHook();

}

private void Form1_FormClosed_1(object sender, FormClosedEventArgs e)

{

mh.UnHook();

}

private void textBox1_TextChanged(object sender, EventArgs e)

{

}

private void textBox2_TextChanged(object sender, EventArgs e)

{

}

private void label1_Click(object sender, EventArgs e)

{

}

private void textBox3_TextChanged(object sender, EventArgs e)

{

}

private void textBox4_TextChanged(object sender, EventArgs e)

{

}

private void label2_Click(object sender, EventArgs e)

{

}

private void label3_Click(object sender, EventArgs e)

{

}

private void textBox5_TextChanged(object sender, EventArgs e)

{

}

private void textBox6_TextChanged(object sender, EventArgs e)

{

}

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

}

private void Form1_MouseUp(object sender, MouseEventArgs e)

{

}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)

{

}

private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)

{

}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)

{

Application.ExitThread();

Environment.Exit(0);

}

private void label13_Click(object sender, EventArgs e)

{

}

private void label14_Click(object sender, EventArgs e)

{

}

private void label15_Click(object sender, EventArgs e)

{

}

private void richTextBox1_TextChanged(object sender, EventArgs e)

{

}

private void label19_Click(object sender, EventArgs e)

{

}

private void label20_Click(object sender, EventArgs e)

{

}

}

public class Win32Api

{

[StructLayout(LayoutKind.Sequential)]

public class POINT

{

public int x;

public int y;

}

[StructLayout(LayoutKind.Sequential)]

public class MouseHookStruct

{

public POINT pt;

public int hwnd;

public int wHitTestCode;

public int dwExtraInfo;

}

public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

//安裝鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

//卸載鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern bool UnhookWindowsHookEx(int idHook);

//調(diào)用下一個(gè)鉤子

[DllImport(“user32.dll”, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);

}

public class MouseHook

{

private Point point;

private Point Point

{

get { return point; }

set

{

if (point != value)

{

point = value;

if (MouseMoveEvent != null)

{

var e = new MouseEventArgs(MouseButtons.None, 0, point.X, point.Y, 0);

MouseMoveEvent(this, e);

}

}

}

}

private int hHook;

private const int WM_LBUTTONDOWN = 0x201;

private const int WM_LBUTTONUP = 0x202;

public const int WH_MOUSE_LL = 14;

public Win32Api.HookProc hProc;

public MouseHook()

{

this.Point = new Point();

}

public int SetHook()

{

hProc = new Win32Api.HookProc(MouseHookProc);

hHook = Win32Api.SetWindowsHookEx(WH_MOUSE_LL, hProc, IntPtr.Zero, 0);

return hHook;

}

public void UnHook()

{

Win32Api.UnhookWindowsHookEx(hHook);

}

private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)

{

Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));

if (nCode 《 0)

{

return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

else

{

if (MouseClickEvent != null)

{

MouseButtons button = MouseButtons.None;

int clickCount = 0;

switch ((Int32)wParam)

{

case WM_LBUTTONDOWN:

button = MouseButtons.Left;

clickCount = 1;

MouseDownEvent(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));

break;

case WM_LBUTTONUP:

button = MouseButtons.Left;

clickCount = 1;

MouseUpEvent(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));

break;

}

var e = new MouseEventArgs(button, clickCount, point.X, point.Y, 0);

MouseClickEvent(this, e);

}

this.Point = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y);

return Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam);

}

}

public delegate void MouseMoveHandler(object sender, MouseEventArgs e);

public event MouseMoveHandler MouseMoveEvent;

public delegate void MouseClickHandler(object sender, MouseEventArgs e);

public event MouseClickHandler MouseClickEvent;

public delegate void MouseUpHandler(object sender, MouseEventArgs e);

public event MouseUpHandler MouseUpEvent;

public delegate void MouseDownHandler(object sender, MouseEventArgs e);

public event MouseDownHandler MouseDownEvent;

}

}

如果您有任何疑問,請(qǐng)告訴我!

步驟6:摘要:

您得到的貨款!在Respberry Pi上運(yùn)行Win10時(shí),我不能忍受滯后。當(dāng)您需要在SBC及其基于x64的處理器上進(jìn)行大型項(xiàng)目時(shí),LattePanda是一個(gè)不錯(cuò)的選擇。 LattePanda的CPU可以完美地處理大型項(xiàng)目。它也可以完美地運(yùn)行Ubuntu。對(duì)我來說,LattePanda是一個(gè)訓(xùn)練我的編碼能力的好平臺(tái)。由于它運(yùn)行Win10系統(tǒng),因此我可以使用Visual Studio在C ++,C#,Python等中執(zhí)行許多項(xiàng)目。更重要的是,它還配備了Arduino Leonardo。我可以在PC上輕松控制物理世界。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C#
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    23948
  • IOT
    IOT
    +關(guān)注

    關(guān)注

    187

    文章

    4304

    瀏覽量

    201760
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C#上位機(jī)與運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的周期上報(bào)

    使用C#上位機(jī)編程實(shí)現(xiàn)運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的周期上報(bào)功能
    的頭像 發(fā)表于 06-26 13:59 ?128次閱讀
    <b class='flag-5'>C#</b>上位機(jī)與運(yùn)動(dòng)<b class='flag-5'>控制</b>卡網(wǎng)絡(luò)通訊的周期上報(bào)

    IOT平臺(tái)工業(yè)環(huán)境監(jiān)測系統(tǒng)的作用

    一、數(shù)據(jù)采集與整合方面 1.高效采集多種數(shù)據(jù) 工業(yè)環(huán)境監(jiān)測系統(tǒng),物聯(lián)網(wǎng)(IOT)平臺(tái)可以連接各種類型的傳感器。例如,溫度傳感器、濕度傳感器、氣體傳感器(用于檢測有害氣體如一氧化碳、
    的頭像 發(fā)表于 06-06 11:29 ?153次閱讀
    <b class='flag-5'>IOT</b>平臺(tái)<b class='flag-5'>在</b>工業(yè)環(huán)境監(jiān)測系統(tǒng)<b class='flag-5'>中</b>的作用

    基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制ADC外設(shè)

    /rk2206/samples/b17_iot_adc 2、基礎(chǔ)知識(shí) ADC日常設(shè)備中非常常見,以下我們將演示IoT庫的ADC接口如何進(jìn)行讀取按鍵的ADC值,打印到串口。 2.1、
    發(fā)表于 04-10 16:20

    玩轉(zhuǎn)C#/LABVIEW,斯撩

    **labview軟件開發(fā) C#軟件開發(fā) C#自定義控件Labview調(diào)用 labview和C#組合開發(fā)** 斯撩,斯撩
    發(fā)表于 04-02 22:44

    C#集成OpenVINO?:簡化AI模型部署

    開源測控、機(jī)器視覺、數(shù)采與分析三大領(lǐng)域中,如何快速將AI模型集成到應(yīng)用程序, 實(shí)現(xiàn)AI賦能和應(yīng)用增值? 最容易的方式是:C#,使用
    的頭像 發(fā)表于 02-17 10:03 ?1970次閱讀
    <b class='flag-5'>C#</b>集成OpenVINO?:簡化AI模型部署

    C#中使用OpenVINO?:輕松集成AI模型!

    作者:算力魔方創(chuàng)始人/英特爾創(chuàng)新大使劉力 C#不僅在PC游戲開發(fā)、大型商業(yè)系統(tǒng)領(lǐng)域應(yīng)用廣泛,還成為開源測控、機(jī)器視覺與運(yùn)動(dòng)控制,以及PC數(shù)集與分析領(lǐng)域中的主流開發(fā)語言! 開源測控、機(jī)器視覺、數(shù)采
    的頭像 發(fā)表于 02-07 14:05 ?846次閱讀
    <b class='flag-5'>C#</b>中使用OpenVINO?:輕松集成AI模型!

    C#通過Halcon實(shí)現(xiàn)3D點(diǎn)云重繪

    C# 通過 Halcon 實(shí)現(xiàn) 3D 點(diǎn)云重繪
    發(fā)表于 01-05 09:16 ?0次下載

    C#基于Halcon實(shí)現(xiàn)Basler相機(jī)采圖

    C#基于Halcon實(shí)現(xiàn)Basler相機(jī)采圖
    發(fā)表于 01-05 09:16 ?0次下載

    Flexus X 實(shí)例 C#/.Net Core 結(jié)合(git 代碼管理、docker 自定義鏡像)快速發(fā)布部署 - 讓你的項(xiàng)目飛起來~

    前言 ???云端部署新體驗(yàn),C# Web API 遇上 Git Docker,828 B2B 企業(yè)節(jié)特惠來襲!Flexus X 實(shí)例,為您的 C#應(yīng)用提供強(qiáng)大支撐,結(jié)合 Git 版本控制
    的頭像 發(fā)表于 12-25 21:15 ?588次閱讀
    Flexus X 實(shí)例 <b class='flag-5'>C#</b>/.Net Core 結(jié)合(git 代碼管理、docker 自定義鏡像)快速發(fā)布部署 - 讓你的項(xiàng)目飛起來~

    運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的心跳檢測C#上位機(jī)編程

    使用C#上位機(jī)編程實(shí)現(xiàn)運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的心跳檢測功能
    的頭像 發(fā)表于 12-24 10:54 ?1111次閱讀
    運(yùn)動(dòng)<b class='flag-5'>控制</b>卡網(wǎng)絡(luò)通訊的心跳<b class='flag-5'>檢測</b>之<b class='flag-5'>C#</b>上位機(jī)編程

    以太網(wǎng)IO控制卡:C#實(shí)時(shí)讀寫時(shí)間測試

    C#語言進(jìn)行ECI IO卡的項(xiàng)目開發(fā)和快速讀取多個(gè)IO狀態(tài)與上位機(jī)交互速度的測試結(jié)果
    的頭像 發(fā)表于 11-21 13:50 ?656次閱讀
    以太網(wǎng)IO<b class='flag-5'>控制</b>卡:<b class='flag-5'>C#</b>實(shí)時(shí)讀寫時(shí)間測試

    IoT平臺(tái)設(shè)備遠(yuǎn)程運(yùn)維的應(yīng)用

    IoT平臺(tái) 是物聯(lián)網(wǎng)技術(shù)的核心組成部分,實(shí)現(xiàn)了設(shè)備、數(shù)據(jù)、應(yīng)用之間的無縫連接與交互。通過提供統(tǒng)一的設(shè)備管理、數(shù)據(jù)處理、安全監(jiān)控等功能,IoT平臺(tái)為企業(yè)構(gòu)建了智能化、可擴(kuò)展的物聯(lián)網(wǎng)生態(tài)系統(tǒng)。設(shè)備遠(yuǎn)程
    的頭像 發(fā)表于 10-31 15:52 ?588次閱讀

    Cortex-A55國產(chǎn)處理器_教學(xué)實(shí)驗(yàn)箱_操作案例分享:5-21 手勢(shì)識(shí)別實(shí)驗(yàn)

    ,用戶可通過I2C接口總線采集信號(hào)迅速識(shí)別出UP、Down、Right、Left等9種常用手勢(shì)。另外PAJ7620U2還提供內(nèi)置的接近檢測功能,用于
    發(fā)表于 10-15 16:18

    使用OpenVINO C# API部署YOLO-World實(shí)現(xiàn)實(shí)時(shí)開放詞匯對(duì)象檢測

    的快速準(zhǔn)確識(shí)別,通過AR技術(shù)將虛擬元素與真實(shí)場景相結(jié)合,為用戶帶來沉浸式的交互體驗(yàn)。本文中,我們將結(jié)合OpenVINO C# API使用最新發(fā)布的OpenVINO 2024.0部署 YOLO-World實(shí)現(xiàn)實(shí)時(shí)開放詞匯對(duì)象
    的頭像 發(fā)表于 08-30 16:27 ?1691次閱讀
    使用OpenVINO <b class='flag-5'>C#</b> API部署YOLO-World實(shí)現(xiàn)實(shí)時(shí)開放詞匯對(duì)象<b class='flag-5'>檢測</b>

    請(qǐng)問如何使用esp_iot_sdkiot_demo例程查詢和設(shè)置燈的狀態(tài)?

    使用esp_iot_sdk_v1.4.0_15_09_18IOT_DEMO例子 已經(jīng)正確激活了Espressif Cloud 串口終端顯示 ping success
    發(fā)表于 07-22 07:50