Salut !
Je suppose que tu n'as pas vu mon dernier post à cause de l’énorme activité du forum (et tant mieux!).
Je te repose les même questions donc:
Si j'utilise un ventilateur avec, il doit être donc alimenter différemment(en tout cas pas avec le même voltage)?
Si je ne met pas de résistance aux Bornes du peltier, ce n'est donc pas grave?
De plus, mon programme est quasi terminé, mais j'ai un petit problème dans les activations des menus:
J'utilisais des flags pour introduire mes actions dans le code, introduit par une codition du menu (if noMenu ==0, flag = true), sauf que je me suis rendu compte qu'il fallait que "les flags" tournent en continu comme je lis la valeur du potentiomètre pour régler le voltage que j'envoie au peltier.
Par après, j'ai donc remplacé le if noMenu par une boucle While, je pense que c'est la solution mais quand je test avec mon écran et les boutons, j'arrive bien à entrer dans le menu mais rien ne se passe, comme si le flag ne s'activait pas. Peux-tu m'aider?
Le code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const int buttonPin = 12;
const int buttonPin2 = 13;
int potPin = A0;
int capteurTemp = A1;
int PinTension = A2;
int PinLedbatterie = 8;
float ratiodiviseur = 2;
int motor1_enablePin = 9; //pwm
int motor1_in1Pin = 11;
int motor1_in2Pin = 10;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
lcd.begin(16, 2);
pinMode(PinTension, INPUT);
//on initialise les pins du moteur 1
pinMode(motor1_in1Pin, OUTPUT);
pinMode(motor1_in2Pin, OUTPUT);
pinMode(motor1_enablePin, OUTPUT);
}
void loop() {
static int etatPrecBouton = LOW; // état précédent
static int etatPrecBouton2 = LOW;
static int noMenuAffiche = -1; // numéro du menu actuellement affiché (-1 on n'est pas dans un menu)
static int noMenu = 0; // numéro du menu
static bool flagRegulation = false;
static bool flagManuel = false;
int etatBouton = digitalRead(buttonPin);
int etatBouton2 = digitalRead(buttonPin2);
if (etatBouton == HIGH && etatPrecBouton == LOW) {
// appui sur le bouton menu
noMenu++;
noMenu %= 2;
flagRegulation = false;
flagManuel = false;
}
if (noMenu != noMenuAffiche)
{
// affiche le menu
lcd.clear();
if (noMenu == 0)
lcd.print('>');
else
lcd.print(' ');
lcd.print("Mode Regulation");
lcd.setCursor(0, 1); // 2eme ligne
if (noMenu == 1)
lcd.print('>');
else
lcd.print(' ');
lcd.print("Mode Manuel");
noMenuAffiche = noMenu;
}
if (etatBouton2 == HIGH && etatPrecBouton2 == LOW) {
if (flagRegulation == false && flagManuel == false)
{
// selection du menu
lcd.clear();
while (noMenu == 0){
flagRegulation = true;
lcd.clear();
}
while (noMenu == 1){
flagManuel = true;
lcd.clear();
}
}
}
else
{
// on retourne au menu
flagRegulation = false;
flagManuel = false;
noMenuAffiche = -1;
}
if (flagRegulation){
int valcapt = analogRead(capteurTemp);
float voltage = valcapt*5.0/1024.0;
float temperature = (voltage - 0.5)*100;
Serial.print( "température : ");
Serial.print(temperature);
Serial.println(" C ");
if(temperature > 30) {
analogWrite(motor1_enablePin,255);
digitalWrite(motor1_in1Pin, HIGH);
digitalWrite(motor1_in2Pin, LOW);
}
if(20 < temperature < 30) {
analogWrite(motor1_enablePin,123);
digitalWrite(motor1_in1Pin, HIGH);
digitalWrite(motor1_in2Pin, LOW);
}
if(10 < temperature < 20) {
analogWrite(motor1_enablePin,62);
digitalWrite(motor1_in1Pin, HIGH);
digitalWrite(motor1_in2Pin, LOW);
}
else{
analogWrite(motor1_enablePin,0);
digitalWrite(motor1_in1Pin, HIGH);
digitalWrite(motor1_in2Pin, LOW);
}
}
if (flagManuel)
{
int vitesseM = analogRead(potPin)/4;
analogWrite(motor1_enablePin, vitesseM);
digitalWrite(motor1_in1Pin, HIGH);
digitalWrite(motor1_in2Pin, LOW);
lcd.print("bonjour");
}
etatPrecBouton = etatBouton;
etatPrecBouton2 = etatBouton2;
delay(10);
}