Haptic motor works!
This commit is contained in:
parent
0511bfe96d
commit
ee3f857063
2 changed files with 328 additions and 0 deletions
119
Adafruit_DRV2605.py
Normal file
119
Adafruit_DRV2605.py
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
##################################################
|
||||||
|
# This is a library for the Adafruit DRV2605L Haptic Driver
|
||||||
|
#
|
||||||
|
# ----> http://www.adafruit.com/products/2305
|
||||||
|
#
|
||||||
|
# Check out the links above for our tutorials and wiring diagrams
|
||||||
|
# This motor/haptic driver uses I2C to communicate
|
||||||
|
#
|
||||||
|
# Adafruit invests time and resources providing this open source code,
|
||||||
|
# please support Adafruit and open-source hardware by purchasing
|
||||||
|
# products from Adafruit!
|
||||||
|
#
|
||||||
|
# Original Arduino library Written by Limor Fried/Ladyada for Adafruit Industries.
|
||||||
|
# Python module written by Sean Mealin
|
||||||
|
# MIT license, all text above must be included in any redistribution
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
import Adafruit_GPIO.I2C as I2C
|
||||||
|
|
||||||
|
DRV2605_ADDR = 0x5A
|
||||||
|
|
||||||
|
DRV2605_REG_STATUS = 0x00
|
||||||
|
DRV2605_REG_MODE = 0x01
|
||||||
|
DRV2605_MODE_INTTRIG = 0x00
|
||||||
|
DRV2605_MODE_EXTTRIGEDGE = 0x01
|
||||||
|
DRV2605_MODE_EXTTRIGLVL = 0x02
|
||||||
|
DRV2605_MODE_PWMANALOG = 0x03
|
||||||
|
DRV2605_MODE_AUDIOVIBE = 0x04
|
||||||
|
DRV2605_MODE_REALTIME = 0x05
|
||||||
|
DRV2605_MODE_DIAGNOS = 0x06
|
||||||
|
DRV2605_MODE_AUTOCAL = 0x07
|
||||||
|
|
||||||
|
DRV2605_REG_RTPIN = 0x02
|
||||||
|
DRV2605_REG_LIBRARY = 0x03
|
||||||
|
DRV2605_REG_WAVESEQ1 = 0x04
|
||||||
|
DRV2605_REG_WAVESEQ2 = 0x05
|
||||||
|
DRV2605_REG_WAVESEQ3 = 0x06
|
||||||
|
DRV2605_REG_WAVESEQ4 = 0x07
|
||||||
|
DRV2605_REG_WAVESEQ5 = 0x08
|
||||||
|
DRV2605_REG_WAVESEQ6 = 0x09
|
||||||
|
DRV2605_REG_WAVESEQ7 = 0x0A
|
||||||
|
DRV2605_REG_WAVESEQ8 = 0x0B
|
||||||
|
|
||||||
|
DRV2605_REG_GO = 0x0C
|
||||||
|
DRV2605_REG_OVERDRIVE = 0x0D
|
||||||
|
DRV2605_REG_SUSTAINPOS = 0x0E
|
||||||
|
DRV2605_REG_SUSTAINNEG = 0x0F
|
||||||
|
DRV2605_REG_BREAK = 0x10
|
||||||
|
DRV2605_REG_AUDIOCTRL = 0x11
|
||||||
|
DRV2605_REG_AUDIOLVL = 0x12
|
||||||
|
DRV2605_REG_AUDIOMAX = 0x13
|
||||||
|
DRV2605_REG_RATEDV = 0x16
|
||||||
|
DRV2605_REG_CLAMPV = 0x17
|
||||||
|
DRV2605_REG_AUTOCALCOMP = 0x18
|
||||||
|
DRV2605_REG_AUTOCALEMP = 0x19
|
||||||
|
DRV2605_REG_FEEDBACK = 0x1A
|
||||||
|
DRV2605_REG_CONTROL1 = 0x1B
|
||||||
|
DRV2605_REG_CONTROL2 = 0x1C
|
||||||
|
DRV2605_REG_CONTROL3 = 0x1D
|
||||||
|
DRV2605_REG_CONTROL4 = 0x1E
|
||||||
|
DRV2605_REG_VBAT = 0x21
|
||||||
|
DRV2605_REG_LRARESON = 0x22
|
||||||
|
|
||||||
|
class Adafruit_DRV2605(object):
|
||||||
|
def __init__(self, busnum=1):
|
||||||
|
self.i2c = I2C.Device(DRV2605_ADDR, busnum=busnum)
|
||||||
|
# end def
|
||||||
|
|
||||||
|
def begin(self):
|
||||||
|
id = self.readRegister8(DRV2605_REG_STATUS)
|
||||||
|
|
||||||
|
self.writeRegister8(DRV2605_REG_MODE, 0x00) # out of standby
|
||||||
|
|
||||||
|
self.writeRegister8(DRV2605_REG_RTPIN, 0x00) # no real-time-playback
|
||||||
|
|
||||||
|
self.writeRegister8(DRV2605_REG_WAVESEQ1, 1) # strong click
|
||||||
|
self.writeRegister8(DRV2605_REG_WAVESEQ2, 0)
|
||||||
|
|
||||||
|
self.writeRegister8(DRV2605_REG_OVERDRIVE, 0) # no overdrive
|
||||||
|
|
||||||
|
self.writeRegister8(DRV2605_REG_SUSTAINPOS, 0)
|
||||||
|
self.writeRegister8(DRV2605_REG_SUSTAINNEG, 0)
|
||||||
|
self.writeRegister8(DRV2605_REG_BREAK, 0)
|
||||||
|
self.writeRegister8(DRV2605_REG_AUDIOMAX, 0x64)
|
||||||
|
|
||||||
|
# ERM open loop
|
||||||
|
|
||||||
|
# turn off N_ERM_LRA
|
||||||
|
self.writeRegister8(DRV2605_REG_FEEDBACK, self.readRegister8(DRV2605_REG_FEEDBACK) & 0x7F)
|
||||||
|
# turn on ERM_OPEN_LOOP
|
||||||
|
self.writeRegister8(DRV2605_REG_CONTROL3, self.readRegister8(DRV2605_REG_CONTROL3) | 0x20)
|
||||||
|
|
||||||
|
return True
|
||||||
|
# end def
|
||||||
|
|
||||||
|
def setWaveform(self, slot, w):
|
||||||
|
self.writeRegister8(DRV2605_REG_WAVESEQ1+slot, w)
|
||||||
|
# end def
|
||||||
|
|
||||||
|
def selectLibrary(self, lib):
|
||||||
|
self.writeRegister8(DRV2605_REG_LIBRARY, lib)
|
||||||
|
# end def
|
||||||
|
|
||||||
|
def go(self):
|
||||||
|
self.writeRegister8(DRV2605_REG_GO, 1)
|
||||||
|
# end def
|
||||||
|
|
||||||
|
def setMode(self, mode):
|
||||||
|
self.writeRegister8(DRV2605_REG_MODE, mode)
|
||||||
|
# end def
|
||||||
|
|
||||||
|
def readRegister8(self, reg):
|
||||||
|
return self.i2c.readU8(reg)
|
||||||
|
# end def
|
||||||
|
|
||||||
|
def writeRegister8(self, reg, val):
|
||||||
|
self.i2c.write8(reg, val)
|
||||||
|
# end def
|
||||||
|
# end class
|
209
morse_trainer.py
Normal file
209
morse_trainer.py
Normal file
|
@ -0,0 +1,209 @@
|
||||||
|
##################################################
|
||||||
|
# This is part of PiPHL the RaspberryPi Passive
|
||||||
|
# Haptic Learning tool
|
||||||
|
#
|
||||||
|
# Copyright 2017 Paul Warren <pwarren@pwarren.id.au>
|
||||||
|
#
|
||||||
|
# Released under the GNU Public License Version 3.0 or later.
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
import time
|
||||||
|
from Adafruit_DRV2605 import *
|
||||||
|
|
||||||
|
drv = Adafruit_DRV2605(busnum=0)
|
||||||
|
|
||||||
|
### setup ###
|
||||||
|
drv.begin()
|
||||||
|
|
||||||
|
# I2C trigger by sending 'go' command
|
||||||
|
drv.setMode(DRV2605_MODE_INTTRIG) # default, internal trigger when sending GO command
|
||||||
|
drv.selectLibrary(1)
|
||||||
|
|
||||||
|
def dah():
|
||||||
|
drv.setWaveform(0, 14)
|
||||||
|
drv.setWaveform(1, 0)
|
||||||
|
drv.go()
|
||||||
|
time.sleep(0.32)
|
||||||
|
|
||||||
|
def dit():
|
||||||
|
drv.setWaveform(0, 1)
|
||||||
|
drv.setWaveform(1, 0)
|
||||||
|
drv.go()
|
||||||
|
time.sleep(0.18)
|
||||||
|
|
||||||
|
def wait_letter():
|
||||||
|
time.sleep(0.33)
|
||||||
|
|
||||||
|
def wait_word():
|
||||||
|
time.sleep(0.33)
|
||||||
|
|
||||||
|
|
||||||
|
def a():
|
||||||
|
dit(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def b():
|
||||||
|
dah(); dit(); dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def c():
|
||||||
|
dah(); dit(); dah(); dit()
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def d():
|
||||||
|
dah(); dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def e():
|
||||||
|
dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def f():
|
||||||
|
dit(); dit(); dah(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def g():
|
||||||
|
dah(); dah(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def h():
|
||||||
|
dit(); dit(); dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def i():
|
||||||
|
dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def j():
|
||||||
|
dit(); dah(); dah(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def k():
|
||||||
|
dah(); dit(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def l():
|
||||||
|
dit(); dah(); dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m():
|
||||||
|
dah(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def n():
|
||||||
|
dah(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def O():
|
||||||
|
dah(); dah(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def p():
|
||||||
|
dit(); dah(); dah(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def q():
|
||||||
|
dah(); dah(); dit(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def r():
|
||||||
|
dit(); dah(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def s():
|
||||||
|
dit(); dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def t():
|
||||||
|
dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def u():
|
||||||
|
dit(); dit(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def v():
|
||||||
|
dit(); dit(); dit(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def w():
|
||||||
|
dit(); dah(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def x():
|
||||||
|
dah(); dit(); dit(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def y():
|
||||||
|
dah(); dit(); dah(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def z():
|
||||||
|
dah(); dah(); dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m1():
|
||||||
|
dit(); dah(); dah(); dah(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m2():
|
||||||
|
dit(); dit(); dah(); dah(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m3():
|
||||||
|
dit(); dit(); dit(); dah(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m4():
|
||||||
|
dit(); dit(); dit(); dit(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m5():
|
||||||
|
dit(); dit(); dit(); dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m6():
|
||||||
|
dah(); dit(); dit(); dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m7():
|
||||||
|
dah(); dah(); dit(); dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m8():
|
||||||
|
dah(); dah(); dah(); dit(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m9():
|
||||||
|
dah(); dah(); dah(); dah(); dit();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
def m0():
|
||||||
|
dah(); dah(); dah(); dah(); dah();
|
||||||
|
wait_letter()
|
||||||
|
|
||||||
|
|
||||||
|
print "A"
|
||||||
|
a()
|
||||||
|
print "B"
|
||||||
|
b()
|
||||||
|
|
||||||
|
|
||||||
|
print "C"
|
||||||
|
c()
|
||||||
|
print "Q"
|
||||||
|
q()
|
||||||
|
|
||||||
|
|
||||||
|
print "V"
|
||||||
|
v()
|
||||||
|
print "K"
|
||||||
|
k()
|
||||||
|
print "1"
|
||||||
|
m1()
|
||||||
|
print "A"
|
||||||
|
a()
|
||||||
|
print "T"
|
||||||
|
t()
|
||||||
|
print "P"
|
||||||
|
p()
|
Loading…
Reference in a new issue