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 a 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"
/*************************************
* 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
/*************************************
* 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