Bonjour a tous,
J ai écumer un peu le web .. mais je ne comprend pas les solutions, ou du moins je n arrive pas a les adaptés a mon code.
C est simplement une variable décimale passer dans une fonction qui convertis en binaire et doit retourner un tableaux.
D après ce que j ai lu et déjà réaliser, le tableaux est déclaré en char
<mon code>
Erreur : ligne94 -> signal = binDec(dec); -> Assigning to non-lvalueCode:/******************************* PIC16F628 ----------------------------- Ce programme est destiné a envoyer des bits par infrarouge selon un nombre décimale Le nombre décimale est initialisé par le bouton presser (keypad) ----------------------------- RA0-7 = interrupteur RB1 = Power LED RB2 = Temoin signal RB3 = PWM modulation alim LED IR RB5 = Envoie du signale ********************************/ /************************************************ ** Définition des variables ********************* *************************************************/ short int i,i2; // initialisation boucle long int dec,x; // initialisation de la variable "decimale" et "reste" char signal[25]; // initialisation tableau du SIGNAL /************************************************* ** FONCTION - convertion binaire => décimale ***** *************************************************/ char *binDec(long int dec) { char tab_bits[25]; // initialisation tableau BITS // après chaque division par deux, // quand "dec" est inferieur ou egal à 1, on arrete for(i2=0;dec <= 1; i2++) { x = dec%2; // on reprend le reste de la division par 2 dec /= 2; // on divise le nombre par 2 tab_bits[i2] = x; // on incrémente la tableaux du "reste" 1/0 return tab_bits ; } } void main() { // Initialisation ********* // ************************ // Initialisation de PWM () PWM1_Init(38000); // initialisation PWM 38000Hz PWM1_Start(); // démarrage de PWM PWM1_Set_Duty(128); // Rapport cycle (0-255) 128 = +-50% CMCON = 0x07; // Disable Comparators // PORT A en entrée TRISA = 0xf8; PORTA = 0x00; // PORT B en sortie TRISB = 0x00; // LED temoin PORT RB1 ON PORTB.RB1 = 1; // power ON // Détection des boutons presser **** // ********************************** while(1) { PORTA.RA0 = 1; if(PORTA.RA4) dec = 22173002; // bouton 1 if(PORTA.RA6) dec = 3; // bouton 4 if(PORTA.RA7) dec = 6; // bouton 7 PORTA.RA0 = 0; PORTA.RA1 = 1; if(PORTA.RA4) dec = 1; // bouton 2 if(PORTA.RA6) dec = 4; // bouton 5 if(PORTA.RA7) dec = 7; // bouton 8 PORTA.RA1 = 0; PORTA.RA2 = 1; if(PORTA.RA4) dec = 1; // bouton 3 if(PORTA.RA6) dec = 5; // bouton 6 if(PORTA.RA7) dec = 8; // bouton 9 PORTA.RA2 = 0; PORTA.RA3 = 1; if(PORTA.RA4) dec = 9; // bouton + if(PORTA.RA6) dec = 10; // bouton - if(PORTA.RA7) dec = 11; // bouton x PORTA.RA3 = 0; // Composition signale ************** // ********************************** // Envoie du signal (inverser) selon la valeur sur RB5 if(dec != 0) { // Appel de la fonction convertion BITS signal = binDec(dec); PORTB.RB2 = 1; // Temoin signale ON PORTB.RB3 = 1; // PWM ON for(i=25;i>=0;i--)// boucle sur les 25 bits { if(signal[i] == 1) // si le bit est a 1 { PORTB.RB5 = 0; }// fin if else // sinon le bit est a 0 { PORTB.RB5 = 1; } // fin condition Delay_us(850);; // delai du BIT }// fin boucle delay_ms(100); // Delai avant envoie d une nouvelle trame de BIT PORTB.RB3 = 0; // PWM OFF PORTB.RB2 = 0; // Temoin signale OFF dec = 0; i=25; } // fin du signal } // Fin WHILE } // Fin VOID main
J utilise mikroc et je n ai commencer l apprentissage que depuis 1 semaine ou 2 max.
Soyer donc indulgent.
Je sais que mon code n est pas optimal et que l ont peu mieux faire, mais ceci est juste un apprentissage et projet personnel !
En gros, quand j appuie sur un bouton, la variable "dec" prend la valeur désigner,
Une fonction la convertis en binaire dans un tableau char tab_bits[25] (24bits + \0)
J essaie de reprendre se tableaux dans une boucle avec une condition : si tab_bits[i] == 0 il envoie 1 sinon il reste a 0 toute les 850us
Voici le premier "jet" qui fonctionne, sauf que je prend trop de RAM si je défini plus d entrée au tableau manuellement, mais ceci n était que un brouillon.
Code brouillon qui fonctionne -> voir pièce jointe
J ai l impression que je ne suis pas loin, mais j ai du louper une étape ..
Histoire de pointeur ??
Merci.
-----