apiotics_factory 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7be8d86dd12c2a47ffdd5dfdf6ecb87d208a71c8
4
- data.tar.gz: 7dd9f09c891b12493f70913fef9afcaa0c3fd70c
3
+ metadata.gz: 81f137425415fd6512e90917aca6c4194f1fc5dd
4
+ data.tar.gz: e3523a68a0fe694390f1b41b38f54dd0270e66b9
5
5
  SHA512:
6
- metadata.gz: a1790c50417d1011a4d24389ec65b4ba3c3caafbfbc07547c492f2be8b96b605c34b5279fcef02ba82c225869b1d2772747df73ce6e4193bda38a481cd34f3cc
7
- data.tar.gz: 4abcf55d5f1de90c85a63974f5f6d2158e003f8b9b177079a004063843fa6a8742f9e969c4fac9c0698ab2e8a679e8d471c384b4a3c768595b7ddaec5cd8c721
6
+ metadata.gz: 9409c26df76ea46c9f33d120a381a474669ec1d299f9e488a47e1d41e5cda5b7aed469543a4bd491a4b8f171eadc903b781661827aa62720ac56b20f18b9f062
7
+ data.tar.gz: 2b8d0848116dc2593743637288658eb9bd47cb5ae6056994674d9391a00b4e513f69e395ee97573fe0a1dee9fbde6d718e20fe5e771bbae02d3169ca989daa2c
@@ -1,3 +1,3 @@
1
1
  module ApioticsFactory
2
- VERSION = '1.0.6'
2
+ VERSION = '1.0.7'
3
3
  end
@@ -10,8 +10,22 @@ module GrovePi
10
10
  CMD_READ_ANALOG = 3
11
11
  CMD_WRITE_ANALOG = 4
12
12
  CMD_PIN_MODE = 5
13
+
14
+ CMD_ULTRASONIC_READ = 7
13
15
  CMD_READ_FIRMWARE_VERSION = 8
14
16
 
17
+ CMD_READ_TEMP_HUM = 40
18
+
19
+ CMD_4DIG_INIT = 70
20
+ CMD_4DIG_BRIGHTNESS = 71
21
+ CMD_4DIG_VALUE = 72
22
+ CMD_4DIG_VALUE_ZEROS = 73
23
+ CMD_4DIG_DIGIT = 74
24
+ CMD_4DIG_LEDS = 75
25
+ CMD_4DIG_CLOCK = 76
26
+ CMD_4DIG_ON = 78
27
+
28
+
15
29
  # Arduino pin mappings.
16
30
  A0 = 14
17
31
  A1 = 15
@@ -37,6 +51,11 @@ module GrovePi
37
51
  CONFIG_RETRIES = 10
38
52
  GROVE_PI_I2C_SLAVE_ADDRESS = 4
39
53
 
54
+ # LCD RGB display - I2C addresses
55
+ DISPLAY_TEXT_ADDRESS = 0x3e #0x3e
56
+ DISPLAY_RGB_ADDRESS = 0x62 #0x62
57
+
58
+
40
59
  # The initialized I2C object.
41
60
  @_i2c_grove_pi = nil
42
61
 
@@ -266,5 +285,207 @@ module GrovePi
266
285
  end
267
286
  end
268
287
 
288
+ #
289
+ # Additional functions for Ultrasonic Ranger, Temperature and Humidity Sensor, Four-Digit Display,
290
+ # and LCD RGB display
291
+ #
292
+
293
+
294
+ # Ultrasonic Ranger
295
+
296
+ # Read distance from ultrasonic ranger
297
+ def self.ultrasonic_read(pin)
298
+ self._ensure_init
299
+ @_i2c_grove_pi.i2cset(@_i2c_grove_pi.address, CMD_ULTRASONIC_READ, pin, 0, 0)
300
+
301
+ sleep(0.06) #firmware has a time of 50ms so wait for more than that
302
+
303
+ @_i2c_grove_pi.i2cget(@_i2c_grove_pi.address, 1)
304
+ numbers = @_i2c_grove_pi.i2cget(@_i2c_grove_pi.address, 3).chars
305
+
306
+ return (numbers[1].ord) * 256 + (numbers[2].ord)
307
+ end
308
+
309
+
310
+ # Temperature and Humidity Sensor
311
+
312
+ # Read temperature and humidity values from sensor
313
+ def self.read_temp_humidity(pin)
314
+ self._ensure_init
315
+
316
+ module_type = 1 # if sensor is white: module_type = 1, if sensor is blue: module_type = 0
317
+ @_i2c_grove_pi.i2cset(@_i2c_grove_pi.address, CMD_READ_TEMP_HUM, pin, module_type, 0)
318
+
319
+ for i in 0..CONFIG_RETRIES - 1
320
+ begin
321
+ # read one byte
322
+ @_i2c_grove_pi.i2cget(@_i2c_grove_pi.address, 1)
323
+
324
+ # read 10 more bytes
325
+ number = @_i2c_grove_pi.i2cget(@_i2c_grove_pi.address, 9)
326
+
327
+ temp_value = number[1..4].unpack('f')[0].round(2) * 9/5 + 32 #convert to F
328
+ humidity_value = number[5..8].unpack('f')[0].round(2)
329
+
330
+ return temp_value, humidity_value
331
+ rescue Errno::EREMOTEIO
332
+ next
333
+ end
334
+ end
335
+ end
336
+
337
+
338
+
339
+ # Four-Digit Display
340
+
341
+
342
+ # Initialize four-digit display
343
+ def self.fourDigit_init(pin)
344
+ self._ensure_init
345
+ @_i2c_grove_pi.i2cset(@_i2c_grove_pi.address, CMD_4DIG_INIT, pin, 0, 0)
346
+ end
347
+
348
+
349
+ # Set individual digit
350
+ # segment = 0-3
351
+ # value = 0-15 or 0-F
352
+ def self.fourDigit_writeDigit(pin, segment, value)
353
+ self._ensure_init
354
+ @_i2c_grove_pi.i2cset(@_i2c_grove_pi.address, CMD_4DIG_DIGIT, pin, segment, value)
355
+ sleep(0.05)
356
+ end
357
+
358
+ # Turn on entire display (88:88)
359
+ def self.fourDigit_displayOn(pin)
360
+ self._ensure_init
361
+ @_i2c_grove_pi.i2cset(@_i2c_grove_pi.address, CMD_4DIG_ON, pin, 0, 0)
362
+ sleep(0.05)
363
+ end
364
+
365
+ # Display a decimal value without leading zeros
366
+ # value = 0 - 9999
367
+ def self.fourDigit_displayDec(pin, string)
368
+ self._ensure_init
369
+ value = string.to_i
370
+
371
+ # split into 2 bytes
372
+ byte1 = value & 255
373
+ byte2 = value >> 8
374
+
375
+ @_i2c_grove_pi.i2cset(@_i2c_grove_pi.address, CMD_4DIG_VALUE, pin, byte1, byte2)
376
+
377
+ sleep(0.05)
378
+ end
379
+
380
+ # Display a string
381
+ # string can consist of 0-9
382
+ def self.fourDigit_displayString(pin, string)
383
+ self._ensure_init
384
+
385
+ if string.include? ":"
386
+ string.delete ":"
387
+ end
388
+
389
+ digits = string.chars
390
+ i = 0
391
+
392
+ while (digits.length < 4)
393
+ digits.unshift(" ")
394
+ end
395
+
396
+ #for each space added or each unaccepted character, display an empty space
397
+ #otherwise display the character
398
+ digits.each do |digit|
399
+ if (digit == " ") | ((digit.to_i(16) == 0) & (digit != "0"))
400
+ @_i2c_grove_pi.i2cset(@_i2c_grove_pi.address, CMD_4DIG_LEDS, pin, i, 0)
401
+ else
402
+ @_i2c_grove_pi.i2cset(@_i2c_grove_pi.address, CMD_4DIG_DIGIT, pin, i, digit.to_i(16))
403
+ end
404
+ i += 1
405
+ sleep(0.05)
406
+ end
407
+ end
408
+
409
+ # Set brightness of display
410
+ # brightness = 0-7
411
+ def self.fourDigit_setBrightness(pin, brightness)
412
+ self._ensure_init
413
+ @_i2c_grove_pi.i2cset(@_i2c_grove_pi.address, CMD_4DIG_BRIGHTNESS, pin, brightness.to_i, 0)
414
+ sleep(0.05)
415
+ end
416
+
417
+
418
+ # Display digits and center colon
419
+ # string can contain digits (0-9)
420
+ def self.fourDigit_displayClock(pin, string)
421
+ self._ensure_init
422
+ string.delete! ":" # make sure there is no colon in the string
423
+ value = string.to_i
424
+ left = value/100
425
+ right = value % 100
426
+ @_i2c_grove_pi.i2cset(@_i2c_grove_pi.address, CMD_4DIG_CLOCK, pin, left, right)
427
+ return left, right
428
+ end
429
+
430
+
431
+ # LCD RGB Display
432
+
433
+
434
+ # Helper function for communicating with LCD RGB display
435
+ def self.write_lcd_rgb_i2c(i2c_slave_address, *data)
436
+ self._ensure_init
437
+
438
+ if !@_i2c_slave_addresses.key?(i2c_slave_address)
439
+ path =
440
+ @_i2c_grove_pi.instance_variable_get(:@driver)
441
+ .instance_variable_get(:@path)
442
+
443
+ @_i2c_slave_addresses[i2c_slave_address] = I2CDevice.new address: i2c_slave_address,
444
+ driver: I2CDevice::Driver::I2CDev.new(path)
445
+ end
446
+
447
+ @_i2c_slave_addresses[i2c_slave_address].i2cset *data
448
+ end
449
+
450
+ # Set the color of the LCD RGB display
451
+ # red = 0-255
452
+ # green = 0-255
453
+ # blue = 0-255
454
+ def self.setRGB(red,green,blue)
455
+ write_lcd_rgb_i2c(DISPLAY_RGB_ADDRESS, 0, 0)
456
+ write_lcd_rgb_i2c(DISPLAY_RGB_ADDRESS, 1, 0)
457
+ write_lcd_rgb_i2c(DISPLAY_RGB_ADDRESS, 0x08, 0xaa)
458
+ write_lcd_rgb_i2c(DISPLAY_RGB_ADDRESS, 4, red.to_i)
459
+ write_lcd_rgb_i2c(DISPLAY_RGB_ADDRESS, 3, green.to_i)
460
+ write_lcd_rgb_i2c(DISPLAY_RGB_ADDRESS, 2, blue.to_i)
461
+ end
462
+
463
+ # Set the text on the LCD RGB display
464
+ def self.setText(text)
465
+ write_lcd_rgb_i2c(DISPLAY_TEXT_ADDRESS, 0x80, 0x01)
466
+ sleep(0.05)
467
+ write_lcd_rgb_i2c(DISPLAY_TEXT_ADDRESS, 0x80, 0x08 | 0x04)
468
+ write_lcd_rgb_i2c(DISPLAY_TEXT_ADDRESS, 0x80, 0x28)
469
+ sleep(0.05)
470
+ count = 0
471
+ row = 0
472
+ text.chars.each do |c|
473
+ if c == '\n' or count == 16
474
+ count = 0
475
+ row += 1
476
+ if row == 2
477
+ break
478
+ end
479
+ write_lcd_rgb_i2c(DISPLAY_TEXT_ADDRESS, 0x80, 0xc0)
480
+ if c == '\n'
481
+ next
482
+ end
483
+ end
484
+ count += 1
485
+ write_lcd_rgb_i2c(DISPLAY_TEXT_ADDRESS, 0x40, c.ord)
486
+ end
487
+ end
488
+
269
489
  # TODO: Implement rest of the commands that are supported by the firmware.
490
+
270
491
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apiotics_factory
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Apiotics
@@ -107,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
107
  version: '0'
108
108
  requirements: []
109
109
  rubyforge_project:
110
- rubygems_version: 2.2.2
110
+ rubygems_version: 2.6.10
111
111
  signing_key:
112
112
  specification_version: 4
113
113
  summary: A Gem To Generate Apiotics Drivers