#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>

#define BP1 3			// BP1 sur WPi3
#define BP2 4			// BP2 sur WPi4
#define APPUYE 0		// APPUYE = Niveau logique 0
#define RELACHE 1		// RELACHE = Niveau logique 1

int main(int argc, char *argv[])
{
        int up;			// Variable d'incrémentation
        char EtatBP1=0; // Variable d'état de BP1
        char EtatBP2=0;	// Variable d'état de BP2

/*	Test de la connexion en root */
      if(getuid()!=0)
      {
        printf("Error:wiringPi must be run as root.\n");
        return 1;
      }
/*	Test initialisation correcte WPi */
      if(wiringPiSetup()==-1)
      {
        printf("Error:wiringPi setup failed.\n");
        return 1;
      }
      
/* Mise en entrée des broches liées aux boutons poussoirs */
        pinMode(BP1,INPUT);
        pinMode(BP2,INPUT);
/* Activation des PULL-UP internes pour éviter les résistances de rappel*/
        pullUpDnControl(BP1,PUD_UP);
        pullUpDnControl(BP2,PUD_UP);

		printf("PWM sur sortie GPIO18\n");/* Message à l'écran */

        pinMode(1,PWM_OUTPUT); 		// Configuration briche WPi 1 en mode PWM
        pwmSetMode(PWM_MODE_MS);	// Choix de la configuration du mode de PWM
        pwmSetRange(100);			// Définition du nombre de palier
									// 0 -> 0%
									// 100 -> 100%

        pwmWrite(1,0);      		// PWM a 0%

while(1)
      {
          EtatBP1 = digitalRead(BP1);	// Lecture Etat de BP1
          EtatBP2 = digitalRead(BP2);	// Lecture Etat de BP2

/* Si BP1 appuyé  */
          if((EtatBP1 == APPUYE))
          {
/* Alors allumage de la LED avec 100 paliers séparés d'une pause de 30ms */
			for(up=0;up<=100;up++)
				{
                    pwmWrite(1,up);
                    delay(30);
                }
          }
/* Sinon si BP2 appuyé */          
          else if(EtatBP2 == APPUYE)
          {
/* Extinction de la LED avec 100 paliers séparés d'une pause de 30ms */
			for(up=100;up>=0;up--)
				{
					pwmWrite(1,up);
                    delay(30);
				}
              }
          };
        return 0;
}
