Aide pour terminer mon programme Arduino (distribution automatique de nourriture dans un aquarium)
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Aide pour terminer mon programme Arduino (distribution automatique de nourriture dans un aquarium)



  1. #1
    invite737ac7ef

    Aide pour terminer mon programme Arduino (distribution automatique de nourriture dans un aquarium)


    ------

    Bonjour,

    Je réalise un programme arduino avec codebender pour mon projet de terminale en Sciences de l'Ingénieur. Le programme sert a choisir les deux heures dans la journée à laquelle la nourriture doit être distribuée et également dans un second sous menu à choisir la durée pendant laquelle la nourriture sera distribuée.

    Voici mon programme. Mon professeur m'avait aider car nous devions faire en sorte que le programme ne soit pas que du texte et quand on appuie sur "ok" cela sélectionne vraiment la donnée, nous n'avions pas fini mais le professeur ne peut plus m'aider et le programme comporte des erreurs :
    Code:
    // include the library code:
    #include "Bounce2.h"
    //#include <LiquidCrystal.h>
    #include <Arduino.h>
    #include <Wire.h>
    #include <DS1307.h>
    #include <Wire.h>
    #include "rgb_lcd.h"
    
    rgb_lcd lcd;
    
    const int colorR =10;
    const int colorG =15;
    const int colorB =70;
    
    
    
    // définition des boutons / pins
    #define PIN_BOUTTON_PLUS 4
    #define PIN_BOUTTON_MOINS 5
    #define PIN_BOUTTON_OK 6
    #define PIN_BOUTTON_UNDO 7
    
    // Instantiate a Bounce object
    Bounce debouncer_plus = Bounce();
    int last_boutton_plus;
    // Instantiate another Bounce object
    Bounce debouncer_moins = Bounce();
    int last_boutton_moins;
    // Troisième bouton
    Bounce debouncer_ok = Bounce();
    int last_boutton_ok;
    //4ème bouton
    Bounce debouncer_undo = Bounce();
    int last_boutton_undo;
    
    //String menu_princ[2]={"02 Régler l'Heure","03 Régler la Duree"};
    char menu_princ[2] = {'D', 'H'};
    int index_menu = 0;
    int index_menu_princ_max = 2; // 2 items ds le menu principal.
    int duree;
    int Heure;
    int heure_1=5; int heure_2=8;
    int time_h1=14; int time_min1=0; int time_h2=16;int time_min2=30;
    int lapse = 1;
    String heure[] = {"08:00", "08:30", "09:00", "09:30", "10:00", "10:30", "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30", "19:00", "19:30", "20:00", "20:30", "21:00", "21:30", "22:00"};
    String ch_duree[] = {"05 s", "10 s", "15 s"}; 
    
    
    DS1307 clock;
    
    void setup()
    {
    	// set up the LCD's number of columns and rows:
    	Serial.begin(9600);
    	lcd.begin(16, 2);
    	// Print a message to the LCD.
    	lcd.setCursor(0, 0);
    	lcd.print("Configuration");
    	lcd.setCursor(0, 1);
    	lcd.print(menu_princ[0]);
    
    	pinMode(PIN_BOUTTON_PLUS, INPUT_PULLUP);
    	pinMode(PIN_BOUTTON_MOINS, INPUT_PULLUP);
    	pinMode(PIN_BOUTTON_OK, INPUT_PULLUP);
    	pinMode(PIN_BOUTTON_UNDO, INPUT_PULLUP);
    	debouncer_plus.attach(PIN_BOUTTON_PLUS);
    	debouncer_plus.interval(50); // interval in ms
    	debouncer_moins.attach(PIN_BOUTTON_MOINS);
    	debouncer_moins.interval(50); // interval in ms
    	debouncer_ok.attach(PIN_BOUTTON_OK);
    	debouncer_ok.interval(50); // interval in ms
    	debouncer_undo.attach(PIN_BOUTTON_UNDO);
    	debouncer_undo.interval(50); // interval in ms
        lcd.setRGB(colorR, colorG, colorB);
        delay(1000);
        
        clock.begin();
    	clock.fillByYMD(2013,1,19);//Jan 19,2013
    	clock.fillByHMS(15,28,30);//15:28 30"
    	clock.fillDayOfWeek(SAT);//Saturday
    	clock.setTime();//write time to the RTC chip
        
        
    } //
    
    
    
    
    
    
    
    
    
    
    
    void affichage_defaut(int valeur)
    {
    	lcd.clear();
    	lcd.setCursor(0, 0);
    	switch (valeur)
    	{
    		case 1:
    		{
    			lcd.print("Configuration ");
    		}
    		break;
    		case 2:
    		{
    			lcd.print("Duree = ");
    			lcd.print(duree, DEC);
    		}
    		break;
    		case 3:
    		{
    			lcd.print("Heure = ");
    			lcd.print(Heure, DEC);
    		}
    		break;
    		case 4:
    		{
    			lcd.print("reglage heure 1");
    		}
    		break;
    		case 5:
    		{
    			lcd.print("reglage duree");
    		}
    		
    			case 6:
    		{
    			lcd.print("reglage heure 2");
    		}
    		break;
    		
    		default:
    		break;
    			
    	}
    	lcd.setCursor(0, 1);
    } // afficher les messages dans les menus
    
    
    
    int reglage_duree(int old_duree)
    {
    
    	char texte;
    	String texte2;	
    	 int duree_courante = 0;
    	 char paramchar[ch_duree[duree_courante].length() + 1];
    	affichage_defaut(5);
    	debouncer_ok.update();
    	debouncer_undo.update();
    	boolean sortie = debouncer_ok.fell();
    	boolean sortie2 = debouncer_undo.fell();
    	while(!(sortie || sortie2))
    	{
    		debouncer_plus.update();
    		debouncer_moins.update();
    		debouncer_ok.update();
    		debouncer_undo.update();
    		sortie = debouncer_ok.fell();
    		sortie2 = debouncer_undo.fell();
    		texte2=ch_duree[duree_courante];
    		texte2.toCharArray(paramchar, texte2.length()+1);
    		lcd.setCursor(0, 1);
    		lcd.print(paramchar);
    		Serial.print("ok="); Serial.println(sortie);
    		if (debouncer_plus.fell()) duree_courante=(duree_courante+1) % (4);
    		if (debouncer_moins.fell()) duree_courante=(duree_courante-1) % (4);
    	}
    	if (sortie2) duree_courante = old_duree;
    	return duree_courante;
    }
    
    
    void loop()
    {
    	String ch_heure1, ch_heure2;
    	lcd.setCursor(0, 1);
    	debouncer_plus.update();
    	debouncer_moins.update();
    	debouncer_ok.update();
    	debouncer_undo.update();
    	if (debouncer_plus.fell())
    		{
    			index_menu = (index_menu + 1) % (index_menu_princ_max);
    			affichage_defaut(1);
    			lcd.print(menu_princ[index_menu]);
    		}
    
    	if (debouncer_moins.fell())
    		{
    			index_menu--;
    			if(index_menu < 0)
    			{
    				index_menu = index_menu_princ_max - 1;
    			}
    			//Serial.println(index_menu);
    			affichage_defaut(1);
    			lcd.print(menu_princ[index_menu]);
    		}
    	if (debouncer_ok.fell())
    		{
    			switch(index_menu)
    			{
    	
    				case 1: //Heure
    					heure_1=reglage_heure(heure_1,4);
    					ch_heure1=heure[heure_1];
    					Serial.print("index heure1=");Serial.println(heure_1);
    					Serial.print("heure1 "); Serial.println(ch_heure1.substring(0,2));
    					Serial.print("min1 "); Serial.println(ch_heure1.substring(3,5));
    					String ch1 = ch_heure1.substring(0,2);
    					time_h1 = ch1.toInt();
    					heure_2=reglage_heure(heure_2,6);
    					
    					break;
    				case 0: //duree
    					lapse = reglage_duree(lapse);
    					Serial.print("lapse=");Serial.println(lapse);
    					break;
    				default:
    					break;
    	
    			}
    			affichage_defaut(1);
    			lcd.print(menu_princ[index_menu]);
    		}
    	
    	clock.getTime();
    	/* if (clock.hour=time_h1) && (clock.minute =time_min1)
    	{
    		......
    	}
    	
    	if (clock.hour=time_h2) && (clock.minute =time_min2)
    	
    	
    	*/
    
     } 
    
    
    int reglage_heure(int old_heure,int aff)
    {
    	char texte;
    	String texte2;
    	           affichage_defaut(aff);
    	           debouncer_undo.update();
    	           debouncer_ok.update();
    	           boolean sortie2 = debouncer_undo.fell();
    	           boolean sortie = debouncer_ok.fell();
    	           int heure_courante = old_heure;
    	           char paramchar[heure[heure_courante].length() + 1];
    	           while (!sortie && !sortie2 )
    					{
    							debouncer_undo.update();
    							debouncer_plus.update();
    							debouncer_moins.update();
    							debouncer_ok.update();
    							sortie = debouncer_ok.fell();
    							sortie2 = debouncer_undo.fell();
    							if (debouncer_plus.fell()) 
    							{heure_courante++;
    							if (heure_courante>28) heure_courante=0;
    							}
    							if (debouncer_moins.fell()) 
    							{
    							heure_courante--;
    							if (heure_courante<0) heure_courante=28;
    							}
    							texte2=heure[heure_courante];
    							texte2.toCharArray(paramchar, texte2.length()+1);
    							lcd.setCursor(0, 1);
    							lcd.print(paramchar);
    							//Serial.print("undo=");Serial.println(sortie2);
    							//Serial.print("ok=");Serial.println(sortie);
    					}
    				
    				if (sortie2) heure_courante = old_heure;
    				//Serial.print("undo=");Serial.println(sortie2);
    				//Serial.print("ok=");Serial.println(sortie);
    				return heure_courante;
    }
    Voila merci d'avance pour votre aide.

    -----
    Dernière modification par Jack ; 30/03/2016 à 09h01. Motif: Ajout balises code

  2. #2
    Jack
    Modérateur

    Re : Aide pour terminer mon programme Arduino (distribution automatique de nourriture dans un aquari

    Merci de lire les règles participatives de ce forum avant de poster, notamment en ce qui concerne la présentation du code.

    et le programme comporte des erreurs
    Ne penses-tu pas que la moindre des choses aurait été de nous indiquer de quelles erreurs il s'agissait? 0 la compilation? A l'exécution? Un plantage? Une erreur de comportement du programme? Nous ne sommes pas devins.

    nous devions faire en sorte que le programme ne soit pas que du texte et quand on appuie sur "ok" cela sélectionne vraiment la donnée
    Tu peux développer un peu?

  3. #3
    invite737ac7ef

    Re : Aide pour terminer mon programme Arduino (distribution automatique de nourriture dans un aquari

    Merci pour votre réponse.

    Mon programme est disponible ici : https://codebender.cc/sketch:229759

    Les erreurs sont des erreurs d'écriture dans le programme qui surviennent lors de la vérification.
    Les voici : Nom : Capture fofo.PNG
Affichages : 104
Taille : 17,0 Ko

    Serait-il possible que vous testiez mon programme pour pouvoir l'améliorer et résoudre les problèmes ?

  4. #4
    Jack
    Modérateur

    Re : Aide pour terminer mon programme Arduino (distribution automatique de nourriture dans un aquari

    Je ne travaille pas avec arduino, donc je ne peux pas tester.

    Cependant, à la lecture de la 1ère ligne de la copie d'écran, il semble que certaines bibliothèques (libraries) ne sont pas présentes sur ton ordi.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. [PROJET SI] Aide pour programme Arduino avec Bluetooth
    Par invite142bdbde dans le forum TPE / TIPE et autres travaux
    Réponses: 1
    Dernier message: 04/03/2014, 08h37
  2. besoin d'aide pour terminer un compteur
    Par invite9d3684dc dans le forum Électronique
    Réponses: 11
    Dernier message: 24/09/2011, 11h33
  3. Programme Nourriture Besoin d'aide
    Par invite1f67c2d6 dans le forum Électronique
    Réponses: 1
    Dernier message: 12/05/2011, 17h23
  4. Aide pour terminer une factorisation.
    Par invitef8aaa93e dans le forum Mathématiques du collège et du lycée
    Réponses: 5
    Dernier message: 24/04/2008, 10h20