'******************************************** '******************************************** '******************************************** '******************************************** '*** PROGRAMME PICBASIC POUR COUPE 2003 *** '******************************************** '******************************************** '******************************************** '********************************** '*** DéCLARATION DES CONSTANTES *** '********************************** '********************************* '*** Constantes pour la gestion des menus '********************************* Const NUM_MENU_MAX = 22 Const MODE_CREATION=11 Const MODE_EXECUTION=22 Const FIN_EEPROM = 8162 Const INTEGER CHAINE = (&H30,&H31,&H32,&H33,&H34,&H35,&H36,&H37,&H38,&H39,&H30) '********************************* '*** Constantes pour la détection de couleur '********************************* Const SEUIL_COULEUR_NOIRE = 300 Const SEUIL_COULEUR_ROUGE = 900 Const COULEUR_INDETERMINEE = 0 Const COULEUR_ROUGE = 1 Const COULEUR_NOIRE = 2 Const NOMBRE_MESURES = 100 '********************************* '*** Constantes pour vérification des tensions '********************************* Const VAL_TENSION__PUISSANCE_INSUFFISANTE = 23000 Const VAL_TENSION_INSUFFISANTE = 7310 Const VAL_TENSION_REF = 492 '********************************* '*** Constantes pour détection des interruptions '********************************* Const INTEGER NUM_CAPTEUR1 = (8168,8169) Const INTEGER NUM_CAPTEUR2 = (1360,1361) Const INTEGER NUM_CAPTEUR3 = (2041,2042) '*** Pas de capteur 4 Const INTEGER NUM_CAPTEUR5 = (3403,3404) Const INTEGER NUM_CAPTEUR6 = (4083,4084) Const INTEGER NUM_CAPTEUR7 = (4764,4765) Const INTEGER NUM_CAPTEUR8 = (5445,5446) Const INTEGER NUM_CAPTEUR9 = (6126,6125) Const INTEGER NUM_CAPTEUR10 = (6806,6807) Const INTEGER NUM_CAPTEUR11 = (7487,7488) '*** Pas de capteur 12 Const INTEGER NUM_CAPTEUR13 = (680,680) '********************************* '*** Constantes pour le télémètre IR '********************************* Const BYTE CORRESPONDANCE_TELEMETRE = (0,0,0,0,0,0,0,0,0,0,0,221,214,209,198,191,183,177,172,166,161,157,152,149,146,144,142,139,136,134,132,131,129,128,127,125,124,123,122,121,120,118,117,115,114,113,112,110,109,108,107,106,105,104,104,104,104,103,103,103,103,103) '********************************* '*** 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 '********************************* '*** Constantes pour les balises '********************************* ConST VALEUR_BALISE_GAUCHE = 12 ConST VALEUR_BALISE_DROITE = 9 '*************************************************************** '*** Constantes pour le projet d'utilisation du damier Cpe 2003 '*************************************************************** CONST CARREAU_BLANC = 2 CONST CARREAU_NOIR = 3 CONST OUI = 1 CONST NON = 0 CONST MODE_HORIZONTAL = 4 CONST PASSAGE_ROBOT = 5 CONST MODE_Vertical = 6 '*************************************************************** '*** Constantes pour le déplacement du robot '*************************************************************** Const EnCours = 55 Const Arret = 11 '******************************* '*** Constantes pour l'affichage '******************************* Const AFFICHER_RESULTAT = 0 Const NE_PAS_AFFICHER_RESULTAT = 1 '********************************* '********************************* '*** DéCLARATION DES VARIABLES *** '********************************* '********************************* '********************************* '*** Variables pour la gestion d'erreur sur la com. Picatf-Picbasic '********************************* Dim Var_Erreur2 as byte Dim Var_Erreur1 as byte Dim Indic_Gestion_erreur as byte '********************************* '*** Variables pour la descente de balles '********************************* Dim balles_descendues as byte '********************************* '*** Variables pour Homologation '********************************* Dim TEMPS_EXECUTION as byte '********************************* '*** Variables pour la détection de lignes '********************************* Dim NBR_LIGNES_A_COMPTER AS BYTE Dim Ligne_droite As byte Dim Ligne_gauche As byte Dim vitesse as integer Dim detecte as byte '********************************* '*** Variables pour la gestion de balles '********************************* Dim i_monte As Byte Dim i_bar_avt1 As Byte Dim i_bar_avt2 As Byte Dim i_desc As Byte Dim i_menu As Byte Dim i_recup_balle As Byte '********************************* '*** Variables pour le télémètre '********************************* Dim I_Rech_Tele As Byte Dim I_Rech_TeleSup As byte Dim DISTANCE_OBSTACLE as byte Dim VALEUR_GP2D02_1 As Byte Dim VALEUR_GP2D02_2 As Byte Dim VALEUR_GP2D02_3 As Byte Dim TOP_DEPART As byte Dim AFF_DONNEE As String*20 Dim Retour_GP2D02(3) As byte Dim Distance_Mesuree As Byte '********************************* '*** Variables pour la balise '********************************* Dim VALEUR_BALISE as integer '********************************* '*** Variables pour la gestion de l'EEPROM '********************************* Dim eepr_i as integer Dim ADR_SCEN_DEL as integer 'Adresse du scénario à supprimer Dim ADR_FIN_SCEN_DEL as integer 'Adresse fin du scénario suivant le scénario à deleter Dim VALEUR_SCEN_DEL as byte 'Valeur du scénario à supprimer Dim RAZ_MORCEAU_DEB as integer Dim RAZ_MORCEAU_FIN as integer Dim RAZ_I as integer Dim NBR_OCTET_DEPLACE as integer Dim EEPROM_BLOCK as byte Dim EEPROM_TAILLEScen As Integer Dim EEPROM_INDICScenexistant As byte Dim EEPROM_NUMScen As byte Dim EEPROM_ENTETE As Byte Dim eeprom_i As integer Dim EEPROM_FinScen As integer Dim EEPROM_ADRScen As integer Dim EEPROM_ADRTailleScen As integer Dim ecrire_EEPROM AS BYTE Dim VALEUREEPROM AS byte Dim EEPROM_NBScen As Byte Dim TYPE_ACTION AS STRING*1 'TYPE de l'ACTION Dim VALEUR As Byte Dim Select_scenario AS INTEGER Dim VALEUR_ACTION AS INTEGER 'VARIABLE VALEUREUR DE L ACTION '********************************* '*** Variables pour l'avance en crabe '********************************* Dim VAL_RECU As Integer '********************************* '*** Variables pour la gestion de l'alim '********************************* Dim val_tension_alim_affiche as long Dim VALEUR_TENSION_ALIM As Integer '********************************* '*** Variables temporaires de calculs '********************************* Dim e as string*16 Dim f as single Dim a as single Dim b as single Dim c as single Dim d as single '********************************* '*** Variables pour la gestion du LCD '********************************* Dim ENVOI_CHAR AS BYTE 'ENVOI CARACTéRE PAR LE LCD Dim SERIE_ECR AS STRING*1 'ENVOI CARACTèRE PAR LIAISON SéRIE (PALM) Dim AFF_CHAR AS STRING*32 'ENVOI CHAINE DE CARACTèRE VERS LE LCD (2 LIGNES MAX) Dim CHAR_TEMP AS STRING*16 'VARIABLE DE TRAVAIL Dim LONG_CH AS BYTE 'LONGUEUR DE LA CHAINE DE CARCTèRES Dim POSITION AS BYTE 'POSITION DU TEXTE SUR LE LCD Dim Demande_Affichage As Byte 'Variable pour demande d'affichage '********************************* '*** Variables de comptage '********************************* Dim I AS BYTE 'VARIABLE DE TRAVAIL Dim J AS BYTE 'VARIABLE DE TRAVAIL '********************************* '*** Variables de gestion du clavier '********************************* Dim TOUCHE AS BYTE 'VALEUR D'UNE TOUCHE DU CLAVIER Dim TOUCHEFIN AS INTEGER 'VALEUR D'UNE TOUCHE DU CLAVIER (touches 6,9 et 12) Dim VALEUR_CLAVIER AS integer '********************************* '*** Variables de détection de couleur '********************************* Dim capteur1 As integer '*********************************** Dim capteur2 As integer '*** variables utilisées pour la *** Dim capteur3 As integer '*** détection de balles *** Dim SOMME_CAPTEUR As LONG '*** *** Dim COULEUR_BALLE As Byte '*********************************** '********************************** '*** Utilisé dans les fonctions *** '*** de division et *** '*** et de multiplication *** '********************************** Dim Nombre As Long Dim Multiplicateur As Long Dim Diviseur as Long Dim Resultat as long Dim x As Long Dim SOMME_CAPTEUR1 AS LONG Dim SOMME_CAPTEUR2 AS LONG Dim SOMME_CAPTEUR3 AS LONG '********************************** '*** Variables pour le verrouillage '********************************** Dim VERROUILLAGE As integer '********************************** '*** Variables pour la gestion des balles '********************************** Dim cpt_boucle as byte Dim i_cpt_delay as integer Dim param_delay as integer Dim nb_capt_10 as byte Dim i_cpt_capt_10 as byte '********************************** '*** Variables pour la gestion des balises '********************************** Dim en_recherche_balise as integer '******************************************************** '*** 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 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 Dim x1_S As String*4 Dim y1_S As String*4 Dim x2_S As String*4 Dim y2_S As String*4 Dim Detection_CMUCAM(16) As Byte '******************************************** '*** Variable utilisées pour les servomoteurs '******************************************** Dim m as byte '*************************************************** '*** Variable utilisées dans la recherche des balles '*************************************************** Dim Valeur_Tourne As Byte '********************************************************************* '*** Variables utilisées dans le projet d'utilisation du damier '********************************************************************* '*** déclaration de la matrice de l'aire de jeu '*** = 7 Tableaux "colonne" de 10 occurences chacun '*** => Matrice 10*7 Dim Colonne1(10) As Byte Dim Colonne2(10) As Byte Dim Colonne3(10) As Byte Dim Colonne4(10) As Byte Dim Colonne5(10) As Byte Dim Colonne6(10) As Byte Dim Colonne7(10) As Byte DIM Nouveau_Carreau As Byte DIM Mode_Deplacement As Byte DIM i_CompteCarreaux As Byte Dim j_CompteCarreaux As Byte DIM Val_Occ_Matrice As Byte DIM j_Colonne As Byte Dim i_Ligne As Byte DIM detect_gauche As Byte DIM detect_droite As Byte Dim Valeur_Carreau_Precedent As Byte Dim nbre_carreaux As Integer Dim Nbre_Carreaux_traversés As Byte '*************************************************** '*** Variables utilisées pour la communication avec '*** La carte d'asservissement '*************************************************** Dim Deplacement As Byte Dim Val_Action as Byte Dim VAL_RECUP_ASS As Byte Dim Octet1 As Byte Dim Octet2 As Byte Dim Octet3 As Byte Dim Val_Checksum As Byte Dim Val_Data As Byte Dim Val_Timeout As Integer '*** Ces variables permettent de déterminer la position du robot sur le terrain Dim Angle_Incidence As Single Dim X_Robot As Single Dim Y_Robot As Single Dim Aff_Angle_Incidence As Integer Dim Aff_X_Robot As Integer Dim Aff_Y_Robot As Integer '*************************************************** '*** 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 Dim val_mesure As Long '********************************** '********************************** '*** DEBUT PROGRAMME PRINCIPAL *** '********************************** '********************************** out 26,0 out 18,0 Set RS232 38400 '*** initialisation des variables GOSUB INIT_VARIABLES '***--------------------------------------------------------------*** '*** Programme la carte d asservissement pour que le robot avance *** '***--------------------------------------------------------------*** Action_Avance: AFF_CHAR = "Avance" Gosub AFFICHER_LCD '*** Calcule la position voulue du robot en (x,y) X_Robot = X_Robot + Val_Action * Cos(Angle_incidence) Y_Robot = Y_Robot + Val_Action * Sin(Angle_incidence) Aff_X_Robot = CINT(X_Robot) Aff_Y_Robot = CINT(Y_Robot) Aff_Char = "X=" + DEC(Aff_X_Robot,3,0) + "Y=" + DEC(Aff_X_Robot,3,0) + "Angle=" + DEC(Aff_Angle_Incidence,3,0) Gosub Afficher_LCD deb_Action_Avance: '*** Envoi de l"octet 1 et vérifie la réponse GoSub Envoi_Octet_1_Action If Val_Timeout = 1000 Then GoTo deb_Action_Avance End If Out 20,0 '*** Octet2 = TYPE D"ASSERVISSEMENT Octet2 = 1 '*** On envoie les données à la carte d'asservissement AFF_CHAR = "Avance:Com en cours..." Gosub AFFICHER_LCD Shiftout 20,22,0,Octet2 delay 1 Shiftout 20,22,0,Val_Action Delay 1 '*** Opération de vérification de la bonne transmission des données Gosub Checksum_Action bcle_Action_Avance: Val_Data = IN(22) If Val_Data = 0 Then '***---------------------------------------------*** '*** Insérer le code ici lorsque le robot avance *** '***---------------------------------------------*** gosub Compter_carreaux goto bcle_Action_Avance Else Val_Data = Shiftin (20,22,0) If Val_Data <> Val_Action Then AFF_Char="PB Trajectoire!!" Gosub AFFICHER_LCD End If End If Return '***---------------------------------------------------*** '*** Programme la carte d asservissement pour le recul *** '***---------------------------------------------------*** Action_Recule: AFF_CHAR = "Recule" Gosub AFFICHER_LCD '*** Calcule la position voulue du robot en (x,y) X_Robot = X_Robot - Val_Action * Cos(Angle_incidence) Y_Robot = Y_Robot - Val_Action * Sin(Angle_incidence) Aff_X_Robot = CINT(X_Robot) Aff_Y_Robot = CINT(Y_Robot) Aff_Char = "X=" + DEC(Aff_X_Robot,3,0) + "Y=" + DEC(Aff_X_Robot,3,0) + "Angle=" + DEC(Aff_Angle_Incidence,3,0) Gosub Afficher_LCD deb_Action_recule: '*** Envoi de l"octet 1 et vérifie la réponse GoSub Envoi_Octet_1_Action If Val_Timeout = 1000 Then GoTo deb_Action_recule End If Out 20,0 '*** Octet2 = TYPE D"ASSERVISSEMENT Octet2 = 2 '*** On envoie les données à la carte d'asservissement AFF_CHAR = "Recule:Com en cours..." Gosub AFFICHER_LCD Shiftout 20,22,0,Octet2 delay 1 Shiftout 20,22,0,Val_Action Delay 1 '*** Opération de vérification de la bonne transmission des données Gosub Checksum_Action bcle_Action_recule: Val_Data = IN(22) If Val_Data = 0 Then '***---------------------------------------------*** '*** Insérer le code ici lorsque le robot Recule *** '***---------------------------------------------*** gosub Compter_carreaux goto bcle_Action_recule Else Val_Data = Shiftin (20,22,0) If Val_Data <> Val_Action Then AFF_Char="PB Trajectoire!!" Gosub AFFICHER_LCD End If End If Return '***---------------------------------------------------------*** '*** Programme la carte d asservissement pour aller à droite *** '***---------------------------------------------------------*** Action_Droite: AFF_CHAR = "Droite" Gosub AFFICHER_LCD '*** Maj de l'angle d'incidence du robot par rapport à la verticale e = DEC(Val_Action,3,0) f = VALSNG(e) e = "3.14159" a = VALSNG(e) f = a * f f = f / 180 Angle_incidence = Angle_incidence - f deb_Action_Droite: '*** Envoi de l"octet 1 et vérifie la réponse GoSub Envoi_Octet_1_Action If Val_Timeout = 1000 Then GoTo deb_Action_Droite End If Out 20,0 '*** Octet2 = TYPE D"ASSERVISSEMENT Octet2 = 3 '*** On envoie les données à la carte d'asservissement AFF_CHAR = "Droite:Com en cours..." Gosub AFFICHER_LCD Shiftout 20,22,0,Octet2 delay 1 Shiftout 20,22,0,Val_Action Delay 1 '*** Opération de vérification de la bonne transmission des données Gosub Checksum_Action bcle_Action_droite: Val_Data = IN(22) If Val_Data = 0 Then '***--------------------------------------------------*** '*** Insérer le code ici lorsque le robot va à droite *** '***--------------------------------------------------*** gosub Compter_carreaux goto bcle_Action_droite Else Val_Data = Shiftin (20,22,0) If Val_Data <> Val_Action Then AFF_Char="PB Trajectoire!!" Gosub AFFICHER_LCD End If End If Return '***---------------------------------------------------------*** '*** Programme la carte d asservissement pour aller à Gauche *** '***---------------------------------------------------------*** Action_Gauche: AFF_CHAR = "Gauche" Gosub AFFICHER_LCD '*** Maj de l'angle d'incidence du robot par rapport à la verticale e = DEC(Val_Action,3,0) f = VALSNG(e) e = "3.14159" a = VALSNG(e) f = a * f f = f / 180 Angle_incidence = Angle_incidence + f deb_Action_Gauche: '*** Envoi de l"octet 1 et vérifie la réponse GoSub Envoi_Octet_1_Action If Val_Timeout = 1000 Then GoTo deb_Action_Gauche End If Out 20,0 '*** Octet2 = TYPE D"ASSERVISSEMENT Octet2 = 4 '*** On envoie les données à la carte d'asservissement AFF_CHAR = "Gauche:Com en cours..." Gosub AFFICHER_LCD Shiftout 20,22,0,Octet2 delay 1 Shiftout 20,22,0,Val_Action Delay 1 '*** Opération de vérification de la bonne transmission des données Gosub Checksum_Action bcle_Action_gauche: Val_Data = IN(22) If Val_Data = 0 Then '***--------------------------------------------------*** '*** Insérer le code ici lorsque le robot va à gauche *** '***--------------------------------------------------*** gosub Compter_carreaux goto bcle_Action_gauche Else Val_Data = Shiftin (20,22,0) If Val_Data <> Val_Action Then AFF_Char="PB Trajectoire!!" Gosub AFFICHER_LCD End If End If Return '***------------------------------------------------------------*** '*** Programme la carte d'asservissement pour régler la vitesse *** '***------------------------------------------------------------*** Regler_Vitesse: AFF_CHAR = "Reglage Vitesse" Gosub AFFICHER_LCD deb_Action_Vitesse: '*** Envoi de l"octet 1 et vérifie la réponse GoSub Envoi_Octet_1_Action If Val_Timeout = 1000 Then GoTo deb_Action_Vitesse End If Out 20,0 '*** Octet2 = TYPE D"ASSERVISSEMENT Octet2 = 5 '*** On envoie les données à la carte d'asservissement AFF_CHAR = "Reglage Vitesse:Com en cours.." Gosub AFFICHER_LCD Shiftout 20,22,0,Octet2 delay 1 Shiftout 20,22,0,Val_Action Delay 1 '*** Opération de vérification de la bonne transmission des données Gosub Checksum_Action Val_TimeOut = 0 bcle_Action_vitesse: Val_Data = IN(22) If Val_Data = 0 Then Val_TimeOut = Val_TimeOut + 1 If Val_TimeOut = 1000 Then AFF_Char="PB TimeOut Reglage!!" Gosub AFFICHER_LCD Else goto bcle_Action_vitesse End If Else Val_Data = Shiftin (20,22,0) If Val_Data <> Val_Action Then AFF_Char="PB Reglage vitesse!!" Gosub AFFICHER_LCD End If End If Return '***----------------------------------------------------------------*** '*** Programme la carte d asservissement pour régler l accélération *** '***----------------------------------------------------------------*** Regler_Acceleration: AFF_CHAR = "Reglage Acceleration" Gosub AFFICHER_LCD deb_Action_Acceleration: '*** Envoi de l"octet 1 et vérifie la réponse GoSub Envoi_Octet_1_Action If Val_Timeout = 1000 Then GoTo deb_Action_Acceleration End If Out 20,0 '*** Octet2 = TYPE D"ASSERVISSEMENT Octet2 = 6 '*** On envoie les données à la carte d'asservissement AFF_CHAR = "Reglage Acceleration:Com en cours.." Gosub AFFICHER_LCD Shiftout 20,22,0,Octet2 delay 1 Shiftout 20,22,0,Val_Action Delay 1 '*** Opération de vérification de la bonne transmission des données Gosub Checksum_Action Val_TimeOut = 0 bcle_Action_Acceleration: Val_Data = IN(22) If Val_Data = 0 Then Val_TimeOut = Val_TimeOut + 1 If Val_TimeOut = 1000 Then AFF_Char="PB TimeOut Reglage!!" Gosub AFFICHER_LCD Else goto bcle_Action_Acceleration End If Else Val_Data = Shiftin (20,22,0) If Val_Data <> Val_Action Then AFF_Char="PB Reglage Acceleration!!" + DEC(Val_Data,3,0) Gosub AFFICHER_LCD End If End If Return '***-------------------------------------------------------------------------------*** '*** Arret du robot avec mémorisation des distances dans la carte d'asservissement *** '***-------------------------------------------------------------------------------*** STOP_AvecRAZ: AFF_CHAR = "Arret avec RAZ" Gosub AFFICHER_LCD deb_Action_STOP_AvecRAZ: '*** Envoi de l"octet 1 et vérifie la réponse GoSub Envoi_Octet_1_Action If Val_Timeout = 1000 Then GoTo deb_Action_Acceleration End If Out 20,0 '*** Octet2 = TYPE D"ASSERVISSEMENT Octet2 = 7 '*** On envoie les données à la carte d'asservissement AFF_CHAR = "STOP : Com en cours.." Gosub AFFICHER_LCD Shiftout 20,22,0,Octet2 delay 1 Shiftout 20,22,0,Val_Action Delay 1 '*** Opération de vérification de la bonne transmission des données Gosub Checksum_Action Val_TimeOut = 0 bcle_Action_STOP: Val_Data = IN(22) If Val_Data = 0 Then Delay 10 Val_TimeOut = Val_TimeOut + 1 If Val_TimeOut = 1000 Then AFF_Char="PB TimeOut STOP!!" Gosub AFFICHER_LCD Else goto bcle_Action_STOP End If Else Val_Data = Shiftin (20,22,0) If Val_Data <> Val_Action Then AFF_Char="Distance parcourue:" + DEC(Val_Data,3,0) Gosub AFFICHER_LCD End If End If Return '***------------------------------------*** '*** reprise de la progression du robot *** '***------------------------------------*** Action_ContinueDeplacement: AFF_CHAR = "reprise deplacement" Gosub AFFICHER_LCD deb_Action_ContinueDeplacement: '*** Envoi de l"octet 1 et vérifie la réponse GoSub Envoi_Octet_1_Action If Val_Timeout = 1000 Then GoTo deb_Action_ContinueDeplacement End If Out 20,0 '*** Octet2 = TYPE D"ASSERVISSEMENT Octet2 = 9 '*** On envoie les données à la carte d'asservissement AFF_CHAR = "CONTINUE : Com en cours.." Gosub AFFICHER_LCD Shiftout 20,22,0,Octet2 delay 1 Shiftout 20,22,0,Val_Action Delay 1 '*** Opération de vérification de la bonne transmission des données Gosub Checksum_Action bcle_Action_ContinueDeplacement: Val_Data = IN(22) If Val_Data = 0 Then Goto bcle_Action_ContinueDeplacement Else Val_Data = Shiftin (20,22,0) If Val_Data <> Val_Action Then AFF_Char="Distance continue:" + DEC(Val_Data,3,0) Gosub AFFICHER_LCD End If End If Return '********************************************************** '********************************************************** '*** FONCTION D'éCRITURE D'UNE CHAINE DE CARACTèRES SUR LE LCD '********************************************************** '********************************************************** AFFICHER_LCD: If Demande_Affichage = AFFICHER_RESULTAT Then '*** Effacement de l'écran SHIFTOUT 11,12,0,&H10 delay 25 POSITION = 0 LONG_CH = LEN(AFF_CHAR) FOR I = 1 TO LONG_CH STEP 1 delay 1 IF I = 1 THEN CHAR_TEMP = MID(AFF_CHAR,1,1) ELSEIF I = 2 THEN CHAR_TEMP = MID(AFF_CHAR,2,1) ELSEIF I = 3 THEN CHAR_TEMP = MID(AFF_CHAR,3,1) ELSEIF I = 4 THEN CHAR_TEMP = MID(AFF_CHAR,4,1) ELSEIF I = 5 THEN CHAR_TEMP = MID(AFF_CHAR,5,1) ELSEIF I = 6 THEN CHAR_TEMP = MID(AFF_CHAR,6,1) ELSEIF I = 7 THEN CHAR_TEMP = MID(AFF_CHAR,7,1) ELSEIF I = 8 THEN CHAR_TEMP = MID(AFF_CHAR,8,1) ELSEIF I = 9 THEN CHAR_TEMP = MID(AFF_CHAR,9,1) ELSEIF I = 10 THEN CHAR_TEMP = MID(AFF_CHAR,10,1) ELSEIF I = 11 THEN CHAR_TEMP = MID(AFF_CHAR,11,1) ELSEIF I = 12 THEN CHAR_TEMP = MID(AFF_CHAR,12,1) ELSEIF I = 13 THEN CHAR_TEMP = MID(AFF_CHAR,13,1) ELSEIF I = 14 THEN CHAR_TEMP = MID(AFF_CHAR,14,1) ELSEIF I = 15 THEN CHAR_TEMP = MID(AFF_CHAR,15,1) ELSEIF I = 16 THEN CHAR_TEMP = MID(AFF_CHAR,16,1) ELSEIF I = 17 THEN CHAR_TEMP = MID(AFF_CHAR,17,1) ELSEIF I = 18 THEN CHAR_TEMP = MID(AFF_CHAR,18,1) ELSEIF I = 19 THEN CHAR_TEMP = MID(AFF_CHAR,19,1) ELSEIF I = 20 THEN CHAR_TEMP = MID(AFF_CHAR,20,1) ELSEIF I = 21 THEN CHAR_TEMP = MID(AFF_CHAR,21,1) ELSEIF I = 22 THEN CHAR_TEMP = MID(AFF_CHAR,22,1) ELSEIF I = 23 THEN CHAR_TEMP = MID(AFF_CHAR,23,1) ELSEIF I = 24 THEN CHAR_TEMP = MID(AFF_CHAR,24,1) ELSEIF I = 25 THEN CHAR_TEMP = MID(AFF_CHAR,25,1) ELSEIF I = 26 THEN CHAR_TEMP = MID(AFF_CHAR,26,1) ELSEIF I = 27 THEN CHAR_TEMP = MID(AFF_CHAR,27,1) ELSEIF I = 28 THEN CHAR_TEMP = MID(AFF_CHAR,28,1) ELSEIF I = 29 THEN CHAR_TEMP = MID(AFF_CHAR,29,1) ELSEIF I = 30 THEN CHAR_TEMP = MID(AFF_CHAR,30,1) ELSEIF I = 31 THEN CHAR_TEMP = MID(AFF_CHAR,31,1) ELSEIF I = 32 THEN CHAR_TEMP = MID(AFF_CHAR,32,1) END IF ENVOI_CHAR = ASC(CHAR_TEMP) SHIFTOUT 11,12,0,ENVOI_CHAR POSITION = POSITION + 1 NEXT I if POSITION = LONG_CH then POSITION = 0 end if END IF RETURN EFFACER_LCD: 'EFFACEMENT DE L'éCRAN FOR I = 0 TO 100 ENVOI_CHAR = &H20 SHIFTOUT 11,12,0,ENVOI_CHAR NEXT I RETURN