Skip to content

Commit d207bd1

Browse files
committed
Extend wind direction to 16 points of the compass, and improve the measurement accuracy
1 parent 9596708 commit d207bd1

File tree

2 files changed

+40
-14
lines changed

2 files changed

+40
-14
lines changed

tests.ts

+12-3
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ input.onButtonPressed(Button.B, () => {
2020
basic.showNumber(weatherbit.windSpeed())
2121
serial.writeValue("wind speed", weatherbit.windSpeed())
2222
basic.showNumber(dir)
23-
basic.showString(weatherbit.directionStringName(dir))
23+
basic.showString(weatherbit.directionString(dir))
2424
basic.showArrow(weatherbit.directionArrowName(dir))
2525
basic.pause(300)
2626
basic.showNumber(weatherbit.rain())
@@ -38,5 +38,14 @@ weatherbit.startRainMonitoring()
3838
weatherbit.startWindMonitoring()
3939
weatherbit.startWeatherMonitoring()
4040

41-
weatherbit.simWeather()
42-
basic.showNumber(0)
41+
if (weatherbit.windDirection() == 0) {
42+
serial.writeValue("Simulation started",0)
43+
weatherbit.simWeather()
44+
}
45+
basic.showNumber(0)
46+
loops.everyInterval(500, () => {
47+
let dir = weatherbit.windDirection()
48+
serial.writeValue("D", dir)
49+
serial.writeLine(weatherbit.directionString(dir))
50+
basic.showArrow(weatherbit.directionArrowName(dir))
51+
})

weatherbit.ts

+28-11
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ namespace weatherbit {
3535
let msWindTurnLast = 0
3636
let windMPH = 0
3737
let directionArrow = [ArrowNames.North,ArrowNames.NorthEast,ArrowNames.East,ArrowNames.SouthEast,ArrowNames.South,ArrowNames.SouthWest,ArrowNames.West,ArrowNames.NorthWest]
38-
let directionString = ["N","NE","E","SE","S","SW","W","NW"]
39-
let simDirection = 0 // North - but simulation will override
38+
let directionStringArray = ["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"]
39+
let simDirection = 180 // South - but simulation will override
4040

4141
// BME280 Addresses
4242
const bmeAddr = 0x76
@@ -195,8 +195,8 @@ namespace weatherbit {
195195
* returns the correct direction string for the index supplied
196196
*/
197197
//% weight=18
198-
export function directionStringName(direction: number): string {
199-
return directionString[Math.round(direction/45)]
198+
export function directionString(direction: number): string {
199+
return directionStringArray[Math.round(direction/22.5)]
200200
}
201201

202202
/**
@@ -263,22 +263,39 @@ namespace weatherbit {
263263

264264
let windDir = 0
265265
windDir = pins.analogReadPin(AnalogPin.P1)
266-
if (windDir < 906 && windDir > 886)
266+
267+
if (windDir < 911 && windDir > 894)
267268
return 0
268-
else if (windDir < 712 && windDir > 692)
269+
else if (windDir < 670 && windDir > 653)
270+
return 22.5
271+
else if (windDir < 709 && windDir > 692)
269272
return 45
270-
else if (windDir < 415 && windDir > 395)
273+
else if (windDir < 395 && windDir > 382)
274+
return 67.5
275+
else if (windDir < 408 && windDir > 394)
271276
return 90
272-
else if (windDir < 498 && windDir > 478)
277+
else if (windDir < 381 && windDir > 364)
278+
return 112.5
279+
else if (windDir < 492 && windDir > 475)
273280
return 135
281+
else if (windDir < 439 && windDir > 422)
282+
return 157.5
274283
else if (windDir < 584 && windDir > 564)
275284
return 180
276-
else if (windDir < 819 && windDir > 799)
285+
else if (windDir < 543 && windDir > 526)
286+
return 202.5
287+
else if (windDir < 820 && windDir > 803)
277288
return 225
278-
else if (windDir < 988 && windDir > 968)
289+
else if (windDir < 801 && windDir > 784)
290+
return 247.5
291+
else if (windDir < 994 && windDir > 977)
279292
return 270
280-
else if (windDir < 959 && windDir > 939)
293+
else if (windDir < 933 && windDir > 916)
294+
return 292.5
295+
else if (windDir < 964 && windDir > 947)
281296
return 315
297+
else if (windDir < 864 && windDir > 847)
298+
return 337.5
282299
else
283300
return simDirection
284301
}

0 commit comments

Comments
 (0)