【发布时间】:2012-02-06 23:24:43
【问题描述】:
我有一些相当不错的东西可以交叉淡化 RGB LED 的颜色,但我无法获得所需的值。
我已将这个示例精简到最低限度,但 Start、End 和 Steps 都将是可变的...
这应该以 100 步线性递增 R (UInt) 从 0 到 255。我不太担心这里的精度,所以我真的不在乎它是否正确舍入或只是做一个Floor/Ceiling
Dim Start As UInteger = 0
Dim [End] As UInteger = 255
Dim Steps = 100
For x = 1 To Steps
Dim Temp = ([End] - Start) / Steps * x + Start
Dim R = CUInt(Temp)
Debug.Print(x.ToString & ": Temp: " & Temp.ToString & ", R:" & R.ToString)
LedR.SetPulse(255, R)
Threading.Thread.Sleep(20)
Next
这个输出:
1: Temp: 2.5500, R:196608
2: Temp: 5.1000, R:327680
3: Temp: 7.6500, R:524288
4: Temp: 10.2000, R:655360
5: Temp: 12.7499, R:851968
...
95: Temp: 242.2488, R:15859712
96: Temp: 244.7988, R:16056320
97: Temp: 247.3488, R:16187392
98: Temp: 249.8988, R:16384000
99: Temp: 252.4488, R:16515072
100: Temp: 254.9988, R:16711680
如您所见,Temp 变量非常正确,允许有一些不精确,但我看不出与 R 的相关性。
CUint 可能只是读取 Temp 位并将Double 视为UInt - 但如果是这样,我如何让它正确转换?
(顺便说一下,这是在netduino 上运行的),.Net Micro Framework 4.2
编辑:下面要求的测试:
Dim Test As Integer = 2
Debug.Print(Test.ToString)
Debug.Print(CInt(Test).ToString)
Debug.Print(CUInt(Test).ToString)
2
2
2
Dim Test As Double = 2.5
Debug.Print(Test.ToString)
Debug.Print(CInt(Test).ToString)
Debug.Print(CUInt(Test).ToString)
2.5000
131072
131072
使用下面的代码...
For x = 0 To Steps
Dim Temp As Long = ([End] - Start) \ Steps * x + Start
Dim R = CType(Temp, UInteger)
Debug.Print(x.ToString & ": Temp: " & Temp.ToString & ", R:" & R.ToString)
LedR.SetPulse(255, R)
Threading.Thread.Sleep(20)
Next
我得到(在Dim Temp 线上):
An unhandled exception of type 'System.Exception' occurred in Netduino_VBTest.exe
没有内部异常,但在输出的上方是第一次机会异常,我猜这是根本原因:
A first chance exception of type 'System.NotImplementedException' occurred in Microsoft.SPOT.Native.dll
【问题讨论】:
标签: .net types .net-micro-framework netduino