Compatibilité entre un code fonctionnant dans un Arduino Nano et un ATtiny85


bonjour, j'ai réalisé un code pour:
- allumer 2 leds flash avec une entrée qui change d'état;
- monter un relais lorsqu'un capteur effet hall envoi une fréquence supérieure à un consigne.
le code fonctionne très bien dans le nano mais pas dans l'attiny85.

je suis convaincu que c'est un problème de déclaration des e/s de l'attiny.

je ne trouve pas de syntaxe des spécifs de ce µp

voici  le code "nano"


code: [select]
/*************************************
*  flash et controle de débit        *
*  pour cnc6040 avec un attiny85     *
*  flash-et-debit-nano  juil 17  *
**************************************/
/****************************
* définition des constantes *
*****************************/
int laps1 = 20; // temps d'allumage leds
int laps2 = 100; //temps d'extinction des leds
int consigne = 0;
int consigne2 = 0;
int etatcommand = 0; 
unsigned long duree,dureeh,dureel,duree2;


// entrée
int commandeflash =a5;  //
int entreemesure = 4; //
int analogconsigne =a2; //

//sortie
#define led_sortie  2 // pin 4 patte 3 led flash
#define sortiedebitcorrect 3  // pin 3 patte 2 débit correct
 
void setup()
{
  pinmode(entreemesure, input);
  pinmode(entreemesure, input_pullup);
  pinmode(commandeflash , input);  // on déclare le "commandeflash" en entrée (2)
  pinmode(analogconsigne, input);
  digitalwrite(commandeflash, low); //on active la résistance de pull-up en mettant la broche à l'état bas (mais cela reste toujours une entrée)

 /**************************
 * declaration des sorties *
 **************************/
  pinmode(led_sortie, output ); //on declare ledaensortie en sortie
  digitalwrite(led_sortie, low);//on force la sortie au repos.
  pinmode(sortiedebitcorrect, output ); //on declare ledcensortie en sortie (entreemesure 13)
  digitalwrite(sortiedebitcorrect, low );//on force ledcensortie au repos.
 serial.begin(9600);
 
}
 
void loop()
{
consigne = analogread(analogconsigne);

dureeh = pulsein(entreemesure, high);
dureel = pulsein(entreemesure, low);
duree = dureeh+dureel;
duree2 = (duree/150);
if (duree2 >=(consigne) || duree2 <10)
//      238.40 = 41hz = 45l/h
//duree2 = 993 = 10hz = 10l/h
//duree2 = 198 = 50hz = 55l/h
//duree2 = 99 = 100hz = 110l/h
{
digitalwrite(sortiedebitcorrect,low);
}
else
{
  digitalwrite(sortiedebitcorrect,high);
}

etatcommand    = analogread(commandeflash);

if (etatcommand >= 800)
{
digitalwrite(led_sortie,high);
delay (laps1);
digitalwrite(led_sortie,low);
delay (laps2);
digitalwrite(led_sortie,high);
delay (laps1);
digitalwrite(led_sortie,low);
delay (laps2);
digitalwrite(led_sortie,high);
delay (laps1);
digitalwrite(led_sortie,low);
delay (laps2);
digitalwrite(led_sortie,high);
delay (laps1);
digitalwrite(led_sortie,low);
delay (laps2);

}
delay(500);
serial.print("duree2  :");
serial.print(duree2);
  serial.print("\n\r");

serial.print("consigne  :");
serial.print(consigne);
  serial.print("\n\r");
   
 serial.print("etatcommand  :");
serial.print(etatcommand);
  serial.print("\n\r"); 
}


voici  le code "attiny85
code: [select]

/*************************************
*  flash et controle de débit        *
*  pour cnc6040 avec un attiny85     *
*  flash-et-debit-attiny85  juil 17  *
**************************************/
/****************************
* définition des constantes *
*****************************/
int laps1 = 20; // temps d'allumage leds
int laps2 = 100; //temps d'extinction des leds
int consigne = 0;
int consigne2 = 0;
int etatcommand = 0; 
unsigned long duree,dureeh,dureel,duree2;




// entrée
 int commandeflash = 1;  // pin 1 patte 6 "la broche est en route".
 int entreemesure = 0; //  pin 0 patte 5   capteur à effet hall
 int analogconsigne = a2; // pin 2 patte 7 potentiomètre de consigne

//sortie
#define led_sortie  4         // pin 4 patte 3 led flash
#define sortiedebitcorrect 3  // pin 3 patte 2 débit correct
 
void setup()
{
  pinmode(entreemesure, input);
  pinmode(analogconsigne, input);
  pinmode(commandeflash , input);   
 

 /**************************
 * declaration des sorties *
 **************************/
  pinmode(led_sortie, output ); //on declare led en sortie
  digitalwrite(led_sortie, low);//on force la sortie au repos.
  pinmode(sortiedebitcorrect, output ); //on declare relais en sortie
  digitalwrite(sortiedebitcorrect, low );//on force à 0 relais en sortie
                       +----+
 
}
 
void loop()
{
consigne = analogread(analogconsigne);

dureeh = pulsein(entreemesure, high);
dureel = pulsein(entreemesure, low);
duree = dureeh+dureel;
duree2 = (duree/150);
if (duree2 >=(consigne) || duree2 <10)
//      238.40 = 41hz = 45l/h
//duree2 = 993 = 10hz = 10l/h
//duree2 = 198 = 50hz = 55l/h
//duree2 = 99 = 100hz = 110l/h
{
digitalwrite(sortiedebitcorrect,low);
}
else
{
digitalwrite(sortiedebitcorrect,high);
}

etatcommand    = digitalread(commandeflash);

if (etatcommand == high)
{
digitalwrite(led_sortie,high);
delay (laps1);
digitalwrite(led_sortie,low);
delay (laps2);
digitalwrite(led_sortie,high);
delay (laps1);
digitalwrite(led_sortie,low);
delay (laps2);
digitalwrite(led_sortie,high);
delay (laps1);
digitalwrite(led_sortie,low);
delay (laps2);
digitalwrite(led_sortie,high);
delay (laps1);
digitalwrite(led_sortie,low);
delay (laps2);
}
delay(500);
}

"
dans celui-i les leds s'allument bien en fonction de l'état de "etatcommand" mais pas la comparaison de la durée.
si quelqu'un peut m'aider..merci d'avance

la patte 7 de l attiny85 est a1

remplacer

int analogconsigne = a2; // pin 2 patte 7 potentiomètre de consigne

par

int analogconsigne = a1; // pin 2 patte 7 potentiomètre de consigne



Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Compatibilité entre un code fonctionnant dans un Arduino Nano et un ATtiny85


arduino

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts