'********************************* '*** Constantes pour la CMUCAM '********************************* Const TRAME_TYPE_C = &H43 Const TRAME_TYPE_F = &H46 Const TRAME_TYPE_M = &H4D Const TRAME_TYPE_N = &H4E Const TRAME_TYPE_S = &H53 Const TRAME_TYPE_BITMAP_PREFIXE_C = 1 Const TRAME_TYPE_BITMAP_PREFIXE_L = 1 Const DETECTE = 1 Const NON_DETECTE = 0 Const AFFICHER_RESULTAT = 0 Const NE_PAS_AFFICHER_RESULTAT = 1 Const zone1_x1 = 1 Const zone1_y1 = 1 Const zone2_x1 = 1 Const zone2_y1 = 36 Const zone3_x1 = 1 Const zone3_y1 = 71 Const zone4_x1 = 1 Const zone4_y1 = 108 Const zone5_x1 = 10 Const zone5_y1 = 1 Const zone6_x1 = 10 Const zone6_y1 = 36 Const zone7_x1 = 10 Const zone7_y1 = 71 Const zone8_x1 = 10 Const zone8_y1 = 108 Const zone9_x1 = 20 Const zone9_y1 = 1 Const zone10_x1 = 20 Const zone10_y1 = 36 Const zone11_x1 = 20 Const zone11_y1 = 71 Const zone12_x1 = 20 Const zone12_y1 = 108 Const zone13_x1 = 30 Const zone13_y1 = 1 Const zone14_x1 = 30 Const zone14_y1 = 36 Const zone15_x1 = 30 Const zone15_y1 = 71 Const zone16_x1 = 30 Const zone16_y1 = 108 Const zone1_x2 = 10 Const zone1_y2 = 35 Const zone2_x2 = 10 Const zone2_y2 = 71 Const zone3_x2 = 10 Const zone3_y2 = 107 Const zone4_x2 = 10 Const zone4_y2 = 143 Const zone5_x2 = 20 Const zone5_y2 = 35 Const zone6_x2 = 20 Const zone6_y2 = 71 Const zone7_x2 = 20 Const zone7_y2 = 107 Const zone8_x2 = 20 Const zone8_y2 = 143 Const zone9_x2 = 30 Const zone9_y2 = 35 Const zone10_x2 = 30 Const zone10_y2 = 71 Const zone11_x2 = 30 Const zone11_y2 = 107 Const zone12_x2 = 30 Const zone12_y2 = 143 Const zone13_x2 = 40 Const zone13_y2 = 35 Const zone14_x2 = 40 Const zone14_y2 = 71 Const zone15_x2 = 40 Const zone15_y2 = 107 Const zone16_x2 = 40 Const zone16_y2 = 143 '******************************************************** '*** Variable utilisÈes pour faire fonctionner la CMUCAM '******************************************************** Dim I_err as byte Dim tst_cde_envoyee as byte Dim TRAME_C(15) As Byte Dim TRAME_F(184) As Byte Dim TRAME_M(17) As Byte Dim TRAME_N(18) As Byte Dim TRAME_S(15) As Byte Dim TRAME_IMAGE_PREFIXEE_MODE_COLONNE(206) As Byte Dim TRAME_IMAGE_PREFIXEE_MODE_LIGNE(206) As Byte Dim RESULTAT_CMUCAM(100) As Byte Dim Valeur_occurence_trame as byte Dim Valeur_occurence_trame_Av as byte Dim Type_Trame As byte Dim CDE_CMUCAM_A_ENVOYER As String*32 Dim Balle_Detectee As Byte Dim Demande_Affichage As Byte Dim Rouge_Sup As byte Dim Rouge_Inf As byte Dim Vert_Sup As byte Dim Vert_Inf As byte Dim Bleu_Sup As byte Dim Bleu_Inf As byte Dim Rouge_Sup_string As string*3 Dim Rouge_Inf_string As string*3 Dim Vert_Sup_string As string*3 Dim Vert_Inf_string As string*3 Dim Bleu_Sup_string As string*3 Dim Bleu_Inf_string As string*3 '*************************************************** '*** Variable utilisÈes dans la recherche des balles '*************************************************** Dim Valeur_Tourne As Byte '*************************************************** '*** Divers '*************************************************** Dim A_Formater As String*32 Dim Caractere_Formate As String*32 Dim Fin_chaine As byte Dim Caractere_Courant As String*32 Dim K As Byte Dim Asc1 As Byte Dim Asc2 As Byte '************************************ '************************************ '*** INITIALISATION DES VARIABLES *** '************************************ '************************************ INIT_VARIABLES: '********************************** '*** Variable utilisÈes pour faire fonctionner la CMUCAM '********************************** Demande_Affichage = NE_PAS_AFFICHER_RESULTAT Valeur_occurence_trame = 0 BCLR CDE_CMUCAM_A_ENVOYER = "RS"+chr(13) PUT CDE_CMUCAM_A_ENVOYER CDE_CMUCAM_A_ENVOYER = 0 '********************************* '*** Init de ce tableau uniquement ici pour pouvoir garder les '*** donnÈes rÈcupÈrÈes prÈalablement '********************************* gosub init_trame_s gosub init_trames_cmucam BCLR '********************************* '********************************* '*** Init des trames de la CMUCAM '********************************* '********************************* init_trame_s: For I = 0 to 14 TRAME_S(I) = 0 Next I return init_trames_cmucam: Valeur_occurence_trame = 0 Balle_Detectee = NON_DETECTE For I = 0 to 14 TRAME_C(I) = 0 Next I For I = 0 to 183 TRAME_F(I) = 0 Next I For I = 0 to 16 TRAME_M(I) = 0 Next I For I = 0 to 17 TRAME_N(I) = 0 Next I For I = 0 to 205 TRAME_IMAGE_PREFIXEE_MODE_COLONNE(I) = 0 Next I For I = 0 to 205 TRAME_IMAGE_PREFIXEE_MODE_LIGNE(I) = 0 Next I For I = 0 to 99 RESULTAT_CMUCAM(I) = 0 Next I return '***************************************************************** '***************************************************************** '*** RÈcupËre les couleurs dominantes d'une image de la cmucam *** '***************************************************************** '***************************************************************** demande_photo_CMUCAM: Gosub init_trames_cmucam ' BCLR ' '*** On prend toute la fenÍtre ' CDE_CMUCAM_A_ENVOYER = "SW 1 1 40 143"+chr(13) ' PUT CDE_CMUCAM_A_ENVOYER ' BCLR CDE_CMUCAM_A_ENVOYER = "GM"+chr(13) gosub envoi_cde_CMUCAM return '******************************************************** '******************************************************** '*** Effectue une traque de l'image gr’ce ý la CMUCAM *** '*** traque en une seule zone = Ècran total *** '******************************************************** '******************************************************** Activation_traque_cmucam: Gosub preparation_cde_cmucam '*** PrÈparation de la commande ý envoyer ý la CMUCAM CDE_CMUCAM_A_ENVOYER = "TC " + Rouge_Inf_String + " " + _ Rouge_Sup_String + " " + Vert_Inf_String _ + " " + Vert_Sup_String + " " + Bleu_Inf_String _ + " " + Bleu_Sup_String + chr(13) gosub envoi_cde_CMUCAM return '******************************************************** '******************************************************** '*** PrÈparation de la cde ý envoyer ý la cmucam *** '******************************************************** '******************************************************** preparation_cde_cmucam: '*** Calcule les valeurs limites de Rouge, Vert, Bleu Rouge_Sup = TRAME_S(0) + TRAME_S(3) Rouge_Inf = TRAME_S(0) - TRAME_S(3) Vert_Sup = TRAME_S(1) + TRAME_S(4) Vert_Inf = TRAME_S(1) - TRAME_S(4) Bleu_Sup = TRAME_S(2) + TRAME_S(5) Bleu_Inf = TRAME_S(2) - TRAME_S(5) '*** Transformation en chaine de caractËres pour envoi ý la CMUCAM Rouge_Sup_String = Dec(Rouge_Sup,3,1) '*** Formatage pour retirer les blancs Èventuels devant les chaines de caractËres A_Formater = "" Caractere_formate = "" A_Formater = Rouge_Sup_String gosub Retirer_Blanc_Gauche Rouge_Sup_String = Caractere_formate '*** Transformation en chaine de caractËres pour envoi ý la CMUCAM Rouge_Inf_String = Dec(Rouge_Inf,3,1) '*** Formatage pour retirer les blancs Èventuels devant les chaines de caractËres A_Formater = "" Caractere_formate = "" A_Formater = Rouge_Inf_String gosub Retirer_Blanc_Gauche Rouge_Inf_String = Caractere_formate '*** Transformation en chaine de caractËres pour envoi ý la CMUCAM Vert_Sup_String = Dec(Vert_Sup,3,1) '*** Formatage pour retirer les blancs Èventuels devant les chaines de caractËres A_Formater = "" Caractere_formate = "" A_Formater = Vert_Sup_String gosub Retirer_Blanc_Gauche Vert_Sup_String = Caractere_formate '*** Transformation en chaine de caractËres pour envoi ý la CMUCAM Vert_Inf_String = Dec(Vert_Inf,3,1) '*** Formatage pour retirer les blancs Èventuels devant les chaines de caractËres A_Formater = "" Caractere_formate = "" A_Formater = Vert_Inf_String gosub Retirer_Blanc_Gauche Vert_Inf_String = Caractere_formate '*** Transformation en chaine de caractËres pour envoi ý la CMUCAM Bleu_Sup_String = Dec(Bleu_Sup,3,1) '*** Formatage pour retirer les blancs Èventuels devant les chaines de caractËres A_Formater = "" Caractere_formate = "" A_Formater = Bleu_Sup_String gosub Retirer_Blanc_Gauche Bleu_Sup_String = Caractere_formate '*** Transformation en chaine de caractËres pour envoi ý la CMUCAM Bleu_Inf_String = Dec(Bleu_Inf,3,1) '*** Formatage pour retirer les blancs Èventuels devant les chaines de caractËres A_Formater = "" Caractere_formate = "" A_Formater = Bleu_Inf_String gosub Retirer_Blanc_Gauche Bleu_Inf_String = Caractere_formate return '******************************************* '*** Traque de l'Ècran dÈcoupÈ en 16 zones '******************************************* '!!!!!!!!!!!!!!!!! A TERMINER !!!!!!!!!!!!!!!!!!!!!!!! traque_en_16_zones: ' CDE_CMUCAM_A_ENVOYER = "SW " + zone1_x1 + " " + zone1_y1 'Const zone1_x1 = 1 'Const zone1_y1 = 1 '1 40 143"+chr(13) PUT CDE_CMUCAM_A_ENVOYER BCLR gosub preparation_cde_cmucam return '*********************************************************** '*********************************************************** '*** Envoie une cde ý la CMUCAM et rÈcupËre son rÈsultat *** '*** Sans rÈinitialisation *** '*********************************************************** '*********************************************************** envoi_cde_CMUCAM_sans_reinit: BCLR PUT CDE_CMUCAM_A_ENVOYER GOSUB RECEPTION_DONNEES_CMUCAM return '*********************************************************** '*********************************************************** '*** Envoie une cde ý la CMUCAM et rÈcupËre son rÈsultat *** '*********************************************************** '*********************************************************** envoi_cde_CMUCAM: Gosub init_trames_cmucam BCLR PUT CDE_CMUCAM_A_ENVOYER GOSUB RECEPTION_DONNEES_CMUCAM return '************************************************* '************************************************* '*** Reception des donnÈes issues de la cmucam *** '************************************************* '************************************************* RECEPTION_DONNEES_CMUCAM: I = 0 Valeur_occurence_trame_Av = 0 deb_rcv_cmucam: GET Valeur_occurence_trame,300,ERREUR_COM_CMUCAM If Valeur_occurence_trame <> 13 And Valeur_occurence_trame > 0 Then RESULTAT_CMUCAM(I) = Valeur_occurence_trame I = I+1 End IF If I > 4 Then If Valeur_occurence_trame > &H40 And Valeur_occurence_trame < &H5B Then Goto fin_rcv_cmucam Else Goto deb_rcv_cmucam End If Else Goto deb_rcv_cmucam End If ' If I < 50 Then ' GOTO deb_rcv_cmucam ' End If fin_rcv_cmucam: CDE_CMUCAM_A_ENVOYER = "RS"+chr(13) PUT CDE_CMUCAM_A_ENVOYER If Demande_Affichage = AFFICHER_RESULTAT then AFF_CHAR = "" For I = 0 To 32 AFF_CHAR = AFF_CHAR+ CHR(RESULTAT_CMUCAM(I)) next I gosub AFFICHER_LCD delay 500 AFF_CHAR = "" For I = 33 To 64 AFF_CHAR = AFF_CHAR+ CHR(RESULTAT_CMUCAM(I)) next I gosub AFFICHER_LCD delay 1000 End If '*** VERIFICATION DE LA COHERENCE DES DONNEES '*** vÈrification qu'on a bien le ack IF RESULTAT_CMUCAM(0) <> &H41 Then GOTO Erreur_CMUCAM End IF IF RESULTAT_CMUCAM(1) <> &H43 then GOTO Erreur_CMUCAM End If If RESULTAT_CMUCAM(2) <> &H4B then GOTO Erreur_CMUCAM End IF GOTO Tri_donnees Erreur_CMUCAM: AFF_CHAR = "Erreur CMUCAM:"+CHR(RESULTAT_CMUCAM(0)) + CHR(RESULTAT_CMUCAM(1)) + CHR(RESULTAT_CMUCAM(2)) Gosub Afficher_lcd Delay 1000 I = 2 Valeur_occurence_trame = RESULTAT_CMUCAM(I) Goto fin_Tri_donnees '********************************************************************************************************** '*** TRI des donnÈes: si plusieurs trames du mÍme type sont ramenÈes, alors la premiËre trame sera ramenÈe. '*** sauf pour les trames de donnÈe '********************************************************************************************************** Tri_donnees: I = 3 bcle_Tri_donnees: Valeur_occurence_trame = RESULTAT_CMUCAM(I) If I = 200 then Goto Fin_Tri_donnees End If If Valeur_occurence_trame = TRAME_TYPE_C Then gosub remplissage_tableau_trame If Valeur_occurence_trame = TRAME_TYPE_C then goto fin_Tri_donnees End If ElseIf Valeur_occurence_trame = TRAME_TYPE_F Then gosub remplissage_tableau_trame If Valeur_occurence_trame = TRAME_TYPE_F then goto fin_Tri_donnees End If ElseIf Valeur_occurence_trame = TRAME_TYPE_M Then gosub remplissage_tableau_trame If Valeur_occurence_trame = TRAME_TYPE_M then goto fin_Tri_donnees End If ElseIf Valeur_occurence_trame = TRAME_TYPE_N Then gosub remplissage_tableau_trame If Valeur_occurence_trame = TRAME_TYPE_N then goto fin_Tri_donnees End If ElseIf Valeur_occurence_trame = TRAME_TYPE_S Then gosub remplissage_tableau_trame If Valeur_occurence_trame = TRAME_TYPE_S then goto fin_Tri_donnees End If ElseIf Valeur_occurence_trame = TRAME_TYPE_BITMAP_PREFIXE_C Then gosub remplissage_tableau_trame ElseIf Valeur_occurence_trame = TRAME_TYPE_BITMAP_PREFIXE_L Then gosub remplissage_tableau_trame Else I = I + 1 End IF GOTO bcle_Tri_donnees ERREUR_COM_CMUCAM: AFF_CHAR = "Pas de recup de donnees!" Gosub AFFICHER_LCD CDE_CMUCAM_A_ENVOYER = "RS"+chr(13) PUT CDE_CMUCAM_A_ENVOYER delay 1000 fin_Tri_donnees: return '*************************************************************************************** '*************************************************************************************** '*** fonction de remplissage des diffÈrents tableaux servant ý rÈcupÈrer les trames '*************************************************************************************** '*************************************************************************************** remplissage_tableau_trame: '*** rÈcupÈration du Type de trame (S,M,F,C....) Type_Trame = Valeur_occurence_trame J = 0 I = I + 2 bcle_trame: Valeur_occurence_trame = RESULTAT_CMUCAM(I) If Valeur_occurence_trame > &H2F And Valeur_occurence_trame < &H3A Then AFF_CHAR = "" bcle_remplis_tab: Valeur_occurence_trame = RESULTAT_CMUCAM(I) If Valeur_occurence_trame = &H20 then gosub action_remplissage J = J + 1 I = I + 1 GOTO bcle_trame ElseIf Valeur_occurence_trame > &H2F And Valeur_occurence_trame < &H3A Then AFF_CHAR = AFF_CHAR + CHR(Valeur_occurence_trame) I = I + 1 goto bcle_remplis_tab ElseIf Valeur_occurence_trame > &H42 And Valeur_occurence_trame < &H54 Then gosub action_remplissage goto fin_remplis_tab Else AFF_CHAR="PB TRI DONNEES CMUCAM !!!!" gosub afficher_lcd End If End IF fin_remplis_tab: return '****************************************************************** '*** remplis une occurence du tableau qui va bien ... '****************************************************************** action_remplissage: If Type_Trame = TRAME_TYPE_C then TRAME_C(J) = VAL(AFF_CHAR) ElseIf Type_Trame = TRAME_TYPE_F then TRAME_F(J) = VAL(AFF_CHAR) ElseIf Type_Trame = TRAME_TYPE_M then TRAME_M(J) = VAL(AFF_CHAR) ElseIf Type_Trame = TRAME_TYPE_N then TRAME_N(J) = VAL(AFF_CHAR) ElseIf Type_Trame = TRAME_TYPE_S then TRAME_S(J) = VAL(AFF_CHAR) ElseIf Type_Trame = TRAME_TYPE_M then TRAME_M(J) = VAL(AFF_CHAR) ElseIf Type_Trame = TRAME_TYPE_BITMAP_PREFIXE_C then TRAME_IMAGE_PREFIXEE_MODE_COLONNE(J) = VAL(AFF_CHAR) ElseIf Type_Trame = TRAME_TYPE_BITMAP_PREFIXE_L then TRAME_IMAGE_PREFIXEE_MODE_LIGNE(J)= VAL(AFF_CHAR) Else End IF return