Bonjour
aujourd'hui je voulais réalisé les premiers test de l'allumage sauf que au moment de téléverser il m'indique une erreur : expected '}' before numeric constant
avez vous une idée de la source de ce bug ?
merci d'avance
alexis
code partie 1 :
#include "TimerOne.h"
char ver[] = "Version du _11-11-16 ";
int Na[] = 0, 500, 800, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000, 15000,16000 0;//t/*mn vilo
int Anga[] = {0, 0 , 10 , 30 , 30 , 29, 29, 28, 28, 25, 20, 15, 10, 7, 5, 4, 3, 2, 1 0};
int Ncyl = 2; //Nombre de cylindres, moteur 4 temps.Multiplier par 2 pour moteur 2 temps
const int AngleCapteur = 45; //Position en degrès avant le PMH du capteur(Hall ou autre ).
const int CaptOn = 0; //CapteurOn = 1 déclenchement sur front montant (par ex. capteur Hall "saturé")
const int Dwell = 3; // Dwell =3 pour simuler un allumage à vis platinées: bobine alimentée 2/3 (66%) du cycle
const int Multi = 0;//1 pour multi-étincelles
const int N_multi = 2500; //t/mn pour 4 cylindres par exemple
int Nb[] = {0, 3100, 0}; //Connecter D8 à la masse
int Angb[] = {0, 12, 0};
int Nc[] = {0, 6100, 0}; //Connecter D9 à la masse
int Angc[] = {0, 16, 0};
int tFlash = 100; //Durée du flash en µs 100, typique
const int Nplancher = 500; // vitesse en t/mn jusqu'a laquelle l'avance = 0°
const int trech = 3000;//temps de recharge bobine, 3ms= 3000µs typique, 7ms certaines motos
const int unsigned long Dsecu = 1000000;//Securite: bobine coupee à l'arret apres Dsecu µs
int delAv = 2;//delta avance,par ex 2°. Quand Pot avance d'une position, l'avance croit de delAv
const int Bob = 4; //Sortie D4 vers bobine.En option, on peut connecter une Led avec R=330ohms vers la masse
const int Cible = 2; //Entrée sur D2 du capteur, R PullUp
const int Pot = A0; //Entrée analogique sur A0 pour potard de changement de courbes. R PullUp
const int Led13 = 13; //Temoin sur tout Arduino, suit le courant de bobine
const int Flash = A3; //Sortie A3 vers module Flash Led 3w Keyes
const int Courbe_b = 8; //Entré D8 R PullUp.Connecter à la masse pour courbe b
const int Courbe_c = 9; //Entré D9 R PullUp. Connecter à la masse pour courbe c
int valPot = 0; //0 à 1023 selon la position du potentiomètre en entree
float modC1 = 0; //Correctif pour C1[], deplace la courbe si potard connecté
int unsigned long D = 0; //Delai en µs à attendre après la cible pour l'étincelle
int milli_delay = 0;
int micro_delay = 0;
float RDzero = 0; //pour calcul delai avance 0° < Nplancher t/mn
float Tplancher = 0; //idem//idem
int tcor = 140; //correction en µs du temps de calcul pour D
int unsigned long Davant_rech = 0; //Delai en µs avant la recharge de la bobine.
int unsigned long prec_H = 0; //Heure du front precedent en µs
int unsigned long T = 0; //Periode en cours
int unsigned long Tprec = 0;//Periode precedant la T en cours, pour calcul de Drech
int N1 = 0; //Couple N,Ang de debut d'un segment
int Ang1 = 0; //Angle d'avance vilo en degrès
int N2 = 0; //Couple N,Ang de fin de segment
int Ang2 = 0;
int* pN = &Na[0];//pointeur au tableau des régimes. Na sera la courbe par defaut
int* pA = &Anga[0];//pointeur au tableau des avances. Anga sera la courbe par defaut
float k = 0;//Constante pour calcul de C1 et C2
float C1[30]; //Tableaux des constantes de calcul de l'avance courante
float C2[30]; //Tableaux des constantes de calcul de l'avance courante
float Tc[30]; //Tableau des Ti correspondants au Ni
int Tlim = 0; //Période minimale, limite, pour la ligne rouge
int j_lim = 0; //index maxi des N , donc aussi Ang
int unsigned long NT = 0;//Facteur de conversion entre N et T à Ncyl donné
int AngleCibles = 0;//Angle entre 2 cibles, 180° pour 4 cyl, 120° pour 6 cyl, par exemple
int UneEtin = 1; //=1 pour chaque étincelle, testé et remis à zero par isr_GestionIbob()
int Ndem = 60;//Vitesse estimée du vilo entrainé par le demarreur en t/mn
int unsigned long Tdem = 0; //Periode correspondante à Ndem,forcée pour le premier tour
int Mot_OFF = 0;//Sera 1 si moteur detecté arrété par l'isr_GestionIbob()
int unsigned long T_multi = 0; //Periode minimale pour multi-étincelle
void CalcD ()//////////////////
// Noter que T1>T2>T3...
{
for (int j = 1; j <= j_lim; j++)//On commence par T la plus longue et on remonte
{
if (T >= Tc[j]) { //on a trouvé le bon segment de la courbe d'avance
D = float(T * ( C1[j] - modC1 ) + C2[j]) ;//D en µs, C2 incorpore le temps de calcul tcor
if ( T > Tplancher)D = T * RDzero;//Imposer 0° d'avance de 0 à 500t/mn
break; //Sortir, on a D
}
}
}
void Etincelle ()//////////
{ if (D < 14000) { // Currently, the largest value that will produce an accurate delay is 16383 µs
delayMicroseconds(D); //Attendre D }
}
else {
milli_delay = ((D / 1000) - 2);//Pour ces D longs, delayMicroseconds(D)ne va plus.
micro_delay = (D - (milli_delay * 1000));
delay(milli_delay); //
delayMicroseconds(micro_delay);
}
digitalWrite(Bob, 0);//Couper le courant, donc étincelle
digitalWrite(Led13, 0); //Temoin
//digitalWrite(Flash, 1); delayMicroseconds(tFlash); digitalWrite(Flash, 0);
//Maintenant que l'étincelle est émise, il faut rétablir Ibob au bon moment
if (Multi && (T >= T_multi))Genere_multi();
else {
switch (Dwell) //Attente courant coupé selon le type de Dwell
{ case 1: //Ibob coupe 1ms par cycle seulement, la bobine doit supporter de chauffer
Davant_rech = 1000; //1ms off par cycle
break;
case 2: //Type bobine faible resistance, dite "electronique"
Davant_rech = 2 * T - Tprec - trech;//On doit enir compte des variations de régime moteur
Tprec = T; //Maj de la future periode precedente
break;
case 3: //Type "vis platinées", Off 1/3, On 2/3
Davant_rech = T / 3;
break;
}
Timer1.initialize(Davant_rech);//Attendre Drech µs avant de retablire le courant dans la bobine
}
Tst_Pot();//Voir si un potard connecté pour deplacer la courbe ou selectionner une autre courbe
UneEtin = 1; //Pour signaler que le moteur tourne à l'isr_GestionIbob().
}