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

Help with codes to add 1 more shift register and add more to matrix LED

tcp client

Can't read sms using Thinker A7 communicate with Arduino