
Kbc           @   s_  d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l j Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l Z d  d l Z d  d l m Z d  d l Z d  d l Z d  d l m Z d  d l m Z m Z d  d l m Z d  d l m Z d  d l m Z m Z d  d	 l m Z m Z m  Z  m! Z! m" Z" e# a$ e j% e j&  e j' d
 k rbe	 j( d  Z) n e	 j( d
  Z) d d5 d     YZ* d d6 d     YZ+ d d7 d     YZ, d d8 d     YZ- d   Z. d   Z/ d   Z0 d   Z1 d   Z2 d   Z3 d   Z4 d   Z5 d   Z6 d   Z7 d   Z8 d   Z9 d    Z: d!   Z; d"   Z< d#   Z= d$   Z> d%   Z? d&   Z@ d'   ZA y eB d( k r?d) GHd* GHd+ GHd, GHd- GHd. GHd/ GHd0 GHe jC d1 e;  ZD eD jE   e jC d1 e9  ZF eF jE   e jC d1 e?  ZG eG jE   e jC d1 e@  ZH eH jE   e:   eA   e.   d2 GHd3 GHd4 GHn  Wn eI k
 rZe.   n Xd S(9   iN(   t   RFID(   t   SevenSegment(   t   max7219(   t   spit   noop(   t   canvas(   t   viewport(   t   textt   show_message(   t   proportionalt
   CP437_FONTt	   TINY_FONTt   SINCLAIR_FONTt   LCD_FONTi   i    t	   IR_Remotec           B   s   e  Z d    Z d   Z RS(   c         C   s9   t  j t  j  d |  _ t  j |  j t  j t  j  d  S(   Ni   (   t   GPIOt   setmodet   BCMt   pint   setupt   INt   PUD_UP(   t   self(    (    s   CrowpiAllModule.pyt   __init__R   s    	c         C   s  | d k r d GHn| d k r( d GHn|| d k r< d GHnh| d k rP d GHnT| d	 k rd d
 GHn@| d k rx d GHn,| d k r d GHn| d k r d GHn| d k r d GHn | d k r d GHn | d k r d GHn | d k r d GHn | d k rd GHn | d k rd GHn | d k r,d GHnx | d k r@d  GHnd | d! k rTd" GHnP | d# k rhd$ GHn< | d% k r|d& GHn( | d' k rd( GHn | d) k rd* GHn  t  j d+  d, GHd  S(-   NiE   s   @___IR_test:CH-#iF   s   @___IR_test:CH#iG   s   @___IR_test:CH+#iD   s   @___IR_test:PREV#i@   s   @___IR_test:NEXT#iC   s   @___IR_test:PL/PA#i   s   @___IR_test:VOL-#i   s   @___IR_test:VOL+#i	   s   @___IR_test:EQ#i   s   @___IR_test:0#i   s   @___IR_test:100+#i   s   @___IR_test:200+#i   s   @___IR_test:1#i   s   @___IR_test:2#i^   s   @___IR_test:3#i   s   @___IR_test:4#i   s   @___IR_test:5#iZ   s   @___IR_test:6#iB   s   @___IR_test:7#iR   s   @___IR_test:8#iJ   s   @___IR_test:9#g      ?s   @___IR_test: #(   t   timet   sleep(   R   t   key_val(    (    s   CrowpiAllModule.pyt   exec_cmd]   sX    (   t   __name__t
   __module__R   R   (    (    (    s   CrowpiAllModule.pyR   P   s   	t   Servoc           B   s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C   sm   t  j t  j  t  j | t  j  t |  |  _ t |  |  _ t  j |  j d  |  _	 |  j	 j
 d  d  S(   Ni2   g        (   R   R   R   R   t   OUTt   intR   t	   directiont   PWMt   servot   start(   R   R   R!   (    (    s   CrowpiAllModule.pyR     s    c         C   sA   |  j  j |  j d   t j d  |  j  j   t j   d  S(   Ni    g333333?(   R#   t   ChangeDutyCyclet   _henkanR   R   t   stopR   t   cleanup(   R   (    (    s   CrowpiAllModule.pyR(   $  s    c         C   s   |  j  S(   N(   R!   (   R   (    (    s   CrowpiAllModule.pyt   currentdirection*  s    c         C   s   d | d S(   Ng?g      @(    (   R   t   value(    (    s   CrowpiAllModule.pyR&   -  s    c         C   s{   xt t  |  j | t |   D]W } |  j j |  j |   | |  _ t j d  |  j j |  j |   | |  _ q Wd  S(   Ng333333?(   t   rangeR!   R    R#   R%   R&   R   R   (   R   R!   t   speedt   d(    (    s   CrowpiAllModule.pyt   setdirection0  s    "	(   R   R   R   R(   R)   R&   R.   (    (    (    s   CrowpiAllModule.pyR     s
   	
			t	   Stepmotorc           B   s}   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z RS(   c         C   s   t  j t  j  d |  _ d |  _ d |  _ d |  _ d |  _ t  j |  j t  j	  t  j |  j t  j	  t  j |  j t  j	  t  j |  j t  j	  t  j
 |  j t  t  j
 |  j t  t  j
 |  j t  t  j
 |  j t  d  S(   Ni   i   i   i   g~jth?(   R   R   R   t   pin_At   pin_Bt   pin_Ct   pin_Dt   intervalR   R   t   outputt   False(   R   (    (    s   CrowpiAllModule.pyR   :  s    					c         C   s:   t  j |  j t  t j |  j  t  j |  j t  d  S(   N(   R   R5   R3   t   TrueR   R   R4   R6   (   R   (    (    s   CrowpiAllModule.pyt   Step1O  s    c         C   s`   t  j |  j t  t  j |  j t  t j |  j  t  j |  j t  t  j |  j t  d  S(   N(	   R   R5   R3   R7   R2   R   R   R4   R6   (   R   (    (    s   CrowpiAllModule.pyt   Step2U  s
    c         C   s:   t  j |  j t  t j |  j  t  j |  j t  d  S(   N(   R   R5   R2   R7   R   R   R4   R6   (   R   (    (    s   CrowpiAllModule.pyt   Step3]  s    c         C   s`   t  j |  j t  t  j |  j t  t j |  j  t  j |  j t  t  j |  j t  d  S(   N(	   R   R5   R1   R7   R2   R   R   R4   R6   (   R   (    (    s   CrowpiAllModule.pyt   Step4c  s
    c         C   s:   t  j |  j t  t j |  j  t  j |  j t  d  S(   N(   R   R5   R1   R7   R   R   R4   R6   (   R   (    (    s   CrowpiAllModule.pyt   Step5k  s    c         C   s`   t  j |  j t  t  j |  j t  t j |  j  t  j |  j t  t  j |  j t  d  S(   N(	   R   R5   R0   R7   R1   R   R   R4   R6   (   R   (    (    s   CrowpiAllModule.pyt   Step6q  s
    c         C   s:   t  j |  j t  t j |  j  t  j |  j t  d  S(   N(   R   R5   R0   R7   R   R   R4   R6   (   R   (    (    s   CrowpiAllModule.pyt   Step7y  s    c         C   s`   t  j |  j t  t  j |  j t  t j |  j  t  j |  j t  t  j |  j t  d  S(   N(	   R   R5   R3   R7   R0   R   R   R4   R6   (   R   (    (    s   CrowpiAllModule.pyt   Step8  s
    c         C   sq   xj t  t |   D]V } |  j   |  j   |  j   |  j   |  j   |  j   |  j   |  j	   q Wd  S(   N(
   R+   R    R8   R9   R:   R;   R<   R=   R>   R?   (   R   t   countt   i(    (    s   CrowpiAllModule.pyt   turn  s    






c         C   s(   x! t  |  D] } |  j d  q Wd  S(   Ni   (   R+   RB   (   R   R@   RA   (    (    s   CrowpiAllModule.pyt	   turnSteps  s    c         C   s"   |  j  t | d d d   d  S(   Ni   ih  i    (   RB   t   round(   R   R@   (    (    s   CrowpiAllModule.pyt   turnDegrees  s    c         C   s-   |  j  t d | d t j | d   d  S(   Ni   i   i    (   RB   RD   t   matht   pi(   R   t   distt   rad(    (    s   CrowpiAllModule.pyt   turnDistance  s    (   R   R   R   R8   R9   R:   R;   R<   R=   R>   R?   RB   RC   RE   RJ   (    (    (    s   CrowpiAllModule.pyR/   8  s   												t   Lightc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s^   d |  _  d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d	 |  _ d
 |  _	 d  S(   Ni\   i    i   i   i   i   i   i    i!   i#   (
   t   DEVICEt
   POWER_DOWNt   POWER_ONt   RESETt   CONTINUOUS_LOW_RES_MODEt   CONTINUOUS_HIGH_RES_MODE_1t   CONTINUOUS_HIGH_RES_MODE_2t   ONE_TIME_HIGH_RES_MODE_1t   ONE_TIME_HIGH_RES_MODE_2t   ONE_TIME_LOW_RES_MODE(   R   (    (    s   CrowpiAllModule.pyR     s    									c         C   s   | d d | d d S(   Ni   i   i    g333333?(    (   R   t   data(    (    s   CrowpiAllModule.pyt   convertToNumber  s    c         C   s%   t  j |  j |  j  } |  j |  S(   N(   t   bust   read_i2c_block_dataRL   RS   RW   (   R   RV   (    (    s   CrowpiAllModule.pyt	   readLight  s    (   R   R   R   RW   RZ   (    (    (    s   CrowpiAllModule.pyRK     s   		c           C   s   t  j   d  S(   N(   R   R(   (    (    (    s   CrowpiAllModule.pyR(     s    c          C   s   t  j t  j  d }  t  j |  t  j  xP t t k	 r{ t  j |  t  j  t	 j
 d  t  j |  t  j  t	 j
 d  q, Wt  j |  t  j  d  S(   Ni   g      ?i   (   R   R   R   R   R   t   g_exitR7   R5   t   HIGHR   R   t   LOW(   t
   buzzer_pin(    (    s   CrowpiAllModule.pyt   buzzer  s    c          C   s3  x,t  t k	 r.t   }  d } t j |  j  d k r d } x? t j |  j  d k r} | d k  r} | d 7} t j d  q? Wd } x? t j |  j  d k r | d k  r | d 7} t j d  q Wd } d } d d d d g } x t d d  D] } d } x? t j |  j  d k rA| d k  rA| d 7} t j d  qWd } x? t j |  j  d k r| d k  r| d 7} t j d  qKW| d	 k r| | c d | >O<n  | d
 k rd } | d 7} q | d 7} q W| d | d d k r+| d | d d k r+|  j	 | d  | d } q+q q Wd  S(   Ni    i   i   giUMu?iP   i    i   i(   i   i   i   i   i   (
   R[   R7   R   R   t   inputR   R   R   R+   R   (   t   remote_objectRA   R@   t   idxt   cntRV   (    (    s   CrowpiAllModule.pyt   remote  sB    	'
'
'
'
0c          C   s|   d }  d } xi t  t k	 rw t j |  | d d  \ } } | d  k	 ro | d  k	 ro d j | |  d } | GHq d GHq Wd  S(   Ni   i   i   g?s   @_DH11_test:T {0}*C H {1}%t   #s   error:dh11!(   R[   R7   t   Adafruit_DHTt
   read_retryt   Nonet   format(   t   sensorR   t   humidityt   temperaturet   valueStr(    (    s   CrowpiAllModule.pyt   dh11  s    c          C   s   t    }  |  j   } t | _ x} t t k	 r |  j   t t k rG Pn  |  j   \ } } | sm d } | GHn  |  j   \ } } | s! t j	 d  d GHq! q! Wd  S(   Ns   @_RFID_test:成功检测#i   s   @_RFID_test: #(
   R    t   utilR7   t   debugR[   t   wait_for_tagt   requestt   anticollR   R   (   t   rdrRo   t   errorRV   Rm   t   uid(    (    s   CrowpiAllModule.pyt   readRFID  s    		
c          C   sR   t    }  xB t t k	 rM d t t |  j     d } | GHt j d  q Wd  S(   Ns   @Light_test:s    lx#g      ?(   RK   R[   R7   t   strR    RZ   R   R   (   Rj   Rm   (    (    s   CrowpiAllModule.pyt   light*  s
    	 c          C   s  t  j t  j  d }  d } t  j |  t  j  t  j | t  j  t  j |  t  t j	 d  t  j |  t
  t j	 d  t  j |  t  x% t  j |  d k r t j   } q Wx% t  j |  d k r t j   } q W| | } | d } t | d  } d t |  d	 } | GHd  S(
   Ni   i   i   gh㈵>i    i   iB  s   @Ultra_test:s    cm#(   R   R   R   R   R   R   R5   R6   R   R   R7   R`   RD   Rx   (   t   TRIGt   ECHOt   pulse_startt	   pulse_endt   pulse_durationt   distanceRm   (    (    s   CrowpiAllModule.pyt
   Ultrasonic2  s&    

c          C   s    x t  t k	 r t   }  q Wd  S(   N(   R[   R7   R   (   t   dis(    (    s   CrowpiAllModule.pyR   T  s    c          C   s   t  j t  j  d }  t  j |  t  j d t  j xL t t k	 r d GHx" t  j |   t  j	 k rj d } qI Wd GHt
 j d  q5 Wd  S(   Ni   t   pull_up_downs   @Sound_test: #i   s   @Sound_test:成功检测#g      ?(   R   R   R   R   R   R   R[   R7   R`   R\   R   R   (   t	   sound_pinRA   (    (    s   CrowpiAllModule.pyt   soundZ  s    
c          C   s   t  j t  j  d }  t  j |  t  j  t } t } xW t t k	 r t  j |   d k ra d GHn t  j |   d k r~ d GHn  t	 j
 d  q8 Wd  S(   Ni   i    s   @__PIR_test: #i   s   @__PIR_test:成功检测#g      ?(   R   R   R   R   R   R6   R[   R7   R`   R   R   (   t
   motion_pint   movest   unmoves(    (    s   CrowpiAllModule.pyt   motionl  s    c          C   s   t  j t  j  d }  t  j |  t  j  xP t t k	 r{ t  j |  t  j  t	 j
 d  t  j |  t  j  t	 j
 d  q, Wt  j |  t  j  d  S(   Ni   i   (   R   R   R   R   R   R[   R7   R5   R]   R   R   R\   (   t	   relay_pin(    (    s   CrowpiAllModule.pyt   relay  s    c          C   ss   d }  d } t  j d d  } | j d  x* t t k	 rW | j d  t j d  q. W| j   | j d  d  S(   Ni   i   t   addressi!   i    s"   RRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRR
i   (	   t   LCDt   Adafruit_CharLCDBackpackt   set_backlightR[   R7   t   messageR   R   t   clear(   t   lcd_columnst   lcd_rowst   lcd(    (    s   CrowpiAllModule.pyR     s    
c       	   C   s   t  d d d d d t    }  t |  d d d d d	 d } d
 } xB t t k	 r t | | d d d t t  d d t j	 d  qE Wd  S(   Nt   porti    t   devicei   t   gpiot   cascadedt   block_orientationiZ   t   rotatet	   123456789t   fillt   whitet   fontt   scroll_delayg?(
   R   R   R   R[   R7   R   R	   R
   R   R   (   t   serialR   t   msg(    (    s   CrowpiAllModule.pyt
   Led_matrix  s    %c          C   s   t  j  d d  }  |  j   x t t k	 r x t d d  D] } t t k rQ Pn  |  j   |  j d |  |  j d |  |  j d |  |  j d |  |  j d  |  j   t	 j
 d  q; W|  j   |  j   t	 j
 d  q Wd  S(	   NR   ip   i    i
   i   i   i   g      ?(   R   t   beginR[   R7   R+   R   t	   set_digitt	   set_colont   write_displayR   R   (   t   segmentRA   (    (    s   CrowpiAllModule.pyR     s"    




c          C   su   t  j t  j  d }  t  j |  t  j  t } t } x9 t t k	 rp t  j |   r[ d GHn d GHt	 j
 d  q8 Wd  S(   Ni   s   @_Tilt_test: 左倾斜#s   @_Tilt_test: 右倾斜#g      ?(   R   R   R   R   R   R6   R[   R7   R`   R   R   (   t   tilt_pint	   tilt_leftt
   tilt_right(    (    s   CrowpiAllModule.pyt   tilt  s    c          C   sx   t  j t  j  t }  d } t  j | t  j d t  j x9 t t k	 rs t  j	 |  r^ d GHn d GHt
 j d  q; Wd  S(   Ni   R   s   @Touch_test:成功检测#s   @Touch_test: #g      ?(   R   R   R   R6   R   R   R   R[   R7   R`   R   R   (   t   toucht	   touch_pin(    (    s   CrowpiAllModule.pyR     s    c          C   s   t  j t  j  d }  t  j |  t  j  xP t t k	 r{ t  j |  t  j  t	 j
 d  t  j |  t  j  t	 j
 d  q, Wt  j |  t  j  d  S(   Ni   g      ?i   (   R   R   R   R   R   R[   R7   R5   R\   R   R   R]   (   t   vibration_pin(    (    s   CrowpiAllModule.pyt	   vibration  s    c          C   s:   t    }  x* t t k	 r5 |  j d  t j d  q Wd  S(   Ni   g      ?(   R/   R[   R7   RE   R   R   (   t   motor(    (    s   CrowpiAllModule.pyt   step  s    	c          C   sp   d }  t  |  d  } xJ t t k	 ra | j d d  t j d  | j d d  t j d  q W| j   d  S(   Ni   i    iP   i   i   ii(   R   R[   R7   R.   R   R   R(   (   t	   servo_pint   s(    (    s   CrowpiAllModule.pyR#     s    c           C   s  d GHd GHd GHd GHd GHt    t   d GHt j d  d GHd	 GHt   t   d
 GHt j d  d GHd GHt   t   d GHt j d  d GHd GHt   t   d GHt j d  d GHd GHt   t   d GHt j d  d GHd GHt   t   d GHt j d  d GHd GHt	   t   d GHt j d  d GHd GHt
   t   d GHt j d  y Wn t k
 r}t   n Xd  S(   Ns@   ****************************************************************s(   [-] CrowPi2 硬件模块测试程序 ...sZ   [-] 每测试一个模块，如没问题则按下Enter键以继续测试下一个模块！s8   

[-] 请将IR接收器插入CrowPi2以测试IR模块...sD   [-] 请按下遥控器上任意按键，CrowPi2应打印按键信息s   [-] IR模块测试通过！i   s(   

[-] 温湿度传感器 DHT11 测试...s,   [-] CrowPi2应打印出温度和湿度信息s+   [-] 温湿度传感器 DHT11测试通过！s   

[-] 触摸传感器测试...s?   [-] 触摸传感器感应区，应打印出'成功检测触摸's"   [-] 触摸传感器测试通过！s   

[-] 距离传感器测试...s^   [-] 将手放在超声波上方并改变距离，应打印出超声波检测到与手的距离s"   [-] 距离传感器测试通过！s   

[-] 声音传感器测试...s   [-] 对着声音传感器吼一下，应打印出'成功检测到声音'，如太灵敏或不灵敏请调节声音传感器的灵敏度s"   [-] 声音传感器测试通过！s   

[-] 运动传感器测试...s   [-] 在运动传感器上方20-30厘米处挥手，应打印出'成功检测到运动'，如太灵敏或不灵敏请调节运动传感器的灵敏度s"   [-] 运动传感器测试通过！s   

[-] 继电器测试...s.   [-] 继电器应发出不断开关的滴答声s   [-] 继电器测试通过！s   

[-] 倾斜传感器测试...sr   [-] 一开始应打印'向左倾斜'或'向右倾斜'，你应往相反的另一侧倾斜且CrowPi2应打印出来s"   [-] 倾斜传感器测试通过！(   Rd   R(   R   R   Rn   R   R   R   R   R   R   t   KeyboardInterrupt(    (    (    s   CrowpiAllModule.pyt   mainb  sn    
t   __main__sw   [-] 4字数码管、LCD、亮度传感器、矩阵LED、伺服电机、步进电机、蜂鸣器、振动马达测试...sE   [-] 数码管应亮起4个8，且中间的冒号应一会亮一会灭s7   [-] LCD背光应亮起，显示亮度传感器的数据s:   [-] 矩阵LED应在红、绿、蓝三种颜色不停变换s)   [-] 私服电机应在一直左,右转动s   [-] 步进电机应一直转动s   [-] 蜂鸣器应发出蜂鸣声sI   [-] 手摸振动马达应能感受到振动且马达振动发出的声音t   targetsM   
硬件模块测试完成！请移除连接到CrowPi2的所有外接模块！s9   任一模块有问题，请务必标注并反馈！！！s@   ****************************************************************(    (    (    (    (J   R   t   syst   Adafruit_CharLCDR   t   pirc522R    t   RPi.GPIOR   Rf   t   smbusRF   t   spidevt   datetimet   Adafruit_LED_BackpackR   t	   threadingt   ret   luma.led_matrix.deviceR   t   luma.core.interface.serialR   R   t   luma.core.renderR   t   luma.core.virtualR   t   luma.core.legacyR   R   t   luma.core.legacy.fontR	   R
   R   R   R   R6   R[   R   R   t   RPI_REVISIONt   SMBusRX   R   R   R/   RK   R(   R_   Rd   Rn   Rw   Ry   R   R   R   R   R   R   R   R   R   R   R   R   R#   R   R   t   Threadt   t2R$   t   t3t   t4t   t5R   (    (    (    s   CrowpiAllModule.pyt   <module>   s   ( j!			,				"												M	c



