1
+ using Meadow ;
2
+ using Meadow . Foundation . ICs . CAN ;
3
+ using Meadow . Foundation . Sensors . Atmospheric ;
4
+ using Meadow . Hardware ;
5
+ using Meadow . Units ;
6
+ using System . Threading . Tasks ;
7
+
8
+ namespace Validation ;
9
+
10
+ public class MeadowApp : App < BeagleBoneBlack >
11
+ {
12
+ public override async Task Run ( )
13
+ {
14
+ Resolver . Log . Info ( "Run..." ) ;
15
+
16
+ await ValidateSPI ( ) ;
17
+ }
18
+
19
+ public async Task ValidateSPI ( )
20
+ {
21
+ Resolver . Log . Info ( "BeagleBone SPI stuff..." ) ;
22
+
23
+ var transceiver = new Mcp2515 (
24
+ Device . CreateSpiBus ( 0 , 1_000_000 . Hertz ( ) ) ,
25
+ Device . Pins . GPIO_49 . CreateDigitalOutputPort ( ) ,
26
+ Mcp2515 . CanOscillator . Osc_8MHz ) ;
27
+
28
+ var bus = transceiver . CreateCanBus ( CanBitrate . Can_250kbps ) ;
29
+
30
+ while ( true )
31
+ {
32
+ Resolver . Log . Info ( "Checking bus..." ) ;
33
+
34
+ if ( bus . IsFrameAvailable ( ) )
35
+ {
36
+ var frame = bus . ReadFrame ( ) ;
37
+ if ( frame != null )
38
+ {
39
+ Resolver . Log . Info ( $ "Received a { frame ! . GetType ( ) . Name } ") ;
40
+ }
41
+ else
42
+ {
43
+ Resolver . Log . Info ( "Frame available but not readable?" ) ;
44
+ }
45
+ }
46
+ else
47
+ {
48
+ Resolver . Log . Info ( "No data" ) ;
49
+ }
50
+
51
+ await Task . Delay ( 1000 ) ;
52
+ }
53
+
54
+ }
55
+
56
+ public async Task ValidateI2C ( )
57
+ {
58
+ Resolver . Log . Info ( "BeagleBone reading BMP280 over I2C..." ) ;
59
+
60
+ var sensor = new Bmp280 ( Device . CreateI2cBus ( Device . Pins . I2C2_SCL , Device . Pins . I2C2_SDA , Meadow . Hardware . I2cBusSpeed . Standard ) ) ;
61
+ //var sensor = new Bmp280(Device.CreateI2cBus());
62
+
63
+ while ( true )
64
+ {
65
+ var reading = await sensor . Read ( ) ;
66
+ Resolver . Log . Info ( $ "Temp: { reading . Temperature ? . Fahrenheit : N1} F") ;
67
+ await Task . Delay ( 1000 ) ;
68
+ }
69
+
70
+ }
71
+
72
+ public async Task ValidatePWMs ( )
73
+ {
74
+ var ports = new [ ]
75
+ {
76
+ // sudo config-pin P9.22 pwm
77
+ Device . Pins . ECAPPWM0 . CreatePwmPort ( 50 . Hertz ( ) , 0.5f ) ,
78
+ // Device.Pins.ECAPPWM2.CreatePwmPort(50.Hertz(), 0.5f),
79
+ // Device.Pins.EHRPWM1A.CreatePwmPort(50.Hertz(), 0.5f),
80
+ // Device.Pins.EHRPWM1B.CreatePwmPort(50.Hertz(), 0.5f),
81
+ // Device.Pins.EHRPWM2A.CreatePwmPort(50.Hertz(), 0.5f),
82
+ // Device.Pins.EHRPWM2B.CreatePwmPort(50.Hertz(), 0.5f),
83
+ } ;
84
+
85
+ while ( true )
86
+ {
87
+ foreach ( var port in ports )
88
+ {
89
+ Resolver . Log . Info ( $ "Starting { port . Pin . Name } ") ;
90
+ port . Start ( ) ;
91
+
92
+ Resolver . Log . Info ( $ " { port . Pin . Key } { port . State } { port . Frequency . Hertz } Hz { port . DutyCycle : N1} ") ;
93
+ }
94
+
95
+ await Task . Delay ( 1000 ) ;
96
+
97
+ foreach ( var port in ports )
98
+ {
99
+ Resolver . Log . Info ( $ "Stopping { port . Pin . Name } ") ;
100
+ port . Stop ( ) ;
101
+
102
+ Resolver . Log . Info ( $ " { port . Pin . Key } { port . State } { port . Frequency . Hertz } Hz { port . DutyCycle : N1} ") ;
103
+ }
104
+
105
+ await Task . Delay ( 1000 ) ;
106
+ }
107
+ }
108
+
109
+ public async Task ValidateAnalogInputs ( )
110
+ {
111
+ var pins = new [ ]
112
+ {
113
+ Device . Pins . AIN0 . CreateAnalogInputPort ( 1 ) ,
114
+ Device . Pins . AIN1 . CreateAnalogInputPort ( 1 ) ,
115
+ Device . Pins . AIN2 . CreateAnalogInputPort ( 1 ) ,
116
+ Device . Pins . AIN3 . CreateAnalogInputPort ( 1 ) ,
117
+ Device . Pins . AIN4 . CreateAnalogInputPort ( 1 ) ,
118
+ Device . Pins . AIN5 . CreateAnalogInputPort ( 1 ) ,
119
+ Device . Pins . AIN6 . CreateAnalogInputPort ( 1 ) ,
120
+ } ;
121
+
122
+ while ( true )
123
+ {
124
+ foreach ( var pin in pins )
125
+ {
126
+ var voltage = await pin . Read ( ) ;
127
+
128
+ Resolver . Log . Info ( $ "{ pin . Pin . Name } = { voltage . Volts : N2} V") ;
129
+ }
130
+
131
+ await Task . Delay ( 1000 ) ;
132
+ }
133
+ }
134
+
135
+ public async Task ValidateDigitalOutputs ( )
136
+ {
137
+ var state = false ;
138
+
139
+ var pins = new [ ]
140
+ {
141
+ Device . Pins . GPIO_48 . CreateDigitalOutputPort ( state ) ,
142
+ Device . Pins . GPIO_60 . CreateDigitalOutputPort ( state ) ,
143
+ Device . Pins . GPIO_66 . CreateDigitalOutputPort ( state ) ,
144
+ Device . Pins . GPIO_67 . CreateDigitalOutputPort ( state ) ,
145
+ } ;
146
+
147
+ while ( true )
148
+ {
149
+ state = ! state ;
150
+
151
+ foreach ( var pin in pins )
152
+ {
153
+ Resolver . Log . Info ( $ "{ pin . Pin . Name } Set State = { state } ") ;
154
+ pin . State = state ;
155
+ Resolver . Log . Info ( $ "{ pin . Pin . Name } Read State = { pin . State } ") ;
156
+ }
157
+
158
+ await Task . Delay ( 1000 ) ;
159
+ }
160
+ }
161
+ }
0 commit comments