Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino.h>
- //Capteur
- #define PIN_CAPTEUR1 A0
- #define PIN_CAPTEUR2 A1
- #define PIN_CAPTEUR3 A2
- #define PIN_CAPTEUR4 A3
- #define PIN_CAPTEUR5 A4
- #define PIN_CAPTEUR6 A5
- #define PIN_CAPTEUR7 A6
- #define PIN_CAPTEUR8 A7
- //de 0 à 1023 pour 5V max sur la pin en entree de l'arduino, le pas est de 5/1023 soit 0048875855V.
- //Pour 1V, il faut donc 204.8 soit 205
- //Pour 2V, il faut donc 409.6 soit 410
- //Pour 3V, il faut donc 614.4 soit 614
- //Pour 4V, il faut donc 819.2 soit 819
- //Pour 5V, il faut donc 1023 soit 1023
- #define TENSION_CAPTEURS 5.0f //Tension max sur les capteurs
- #define CAPTEURS_TEMPS_RAFRAICHISSEMENT 1000UL // 1seconse 1000ms
- #define CAPTEUR_1_SEUIL_DECLENCHEMENT 511 //default 2.5V
- #define CAPTEUR_2_SEUIL_DECLENCHEMENT 511
- #define CAPTEUR_3_SEUIL_DECLENCHEMENT 511
- #define CAPTEUR_4_SEUIL_DECLENCHEMENT 511
- #define CAPTEUR_5_SEUIL_DECLENCHEMENT 511
- #define CAPTEUR_6_SEUIL_DECLENCHEMENT 511
- #define CAPTEUR_7_SEUIL_DECLENCHEMENT 511
- #define CAPTEUR_8_SEUIL_DECLENCHEMENT 511
- //Afficheur 7 segments
- #define AFFICHER_TYPE_ANODE 1 //0 = cathode commun , 1 = anode commun,
- #define AFFICHEUR_TEMPS_RAFRAICHISSEMENT 10UL //temps en ms entre chaque rafraichissement de l'afficheur
- #define PIN_AFFICHEUR_SEGMENT_A PB0 //D8 nano
- #define PIN_AFFICHEUR_SEGMENT_B PB1 //D9 nano
- #define PIN_AFFICHEUR_SEGMENT_C PB2 //D10 nano
- #define PIN_AFFICHEUR_SEGMENT_D PB3 //D11 nano
- #define PIN_AFFICHEUR_SEGMENT_E PB4 //D12 nano
- #define PIN_AFFICHEUR_SEGMENT_F PB5 //D13 nano
- #define PIN_AFFICHEUR_SEGMENT_G PD6 //D6 nano
- #define PIN_AFFICHEUR_SEGMENT_DP PD7 //D7 nano
- //Prototype des fonctions
- void printNombre(const int& nombre);
- void readCapteurs();
- void selectCapteurOK();
- //Variables globales
- enum number{ZERO = 0, UN = 1, DEUX = 2, TROIS = 3, QUATRE = 4, CINQ = 5, SIX = 6, SEPT = 7, HUIT = 8, NEUF = 9, OFF = 10 };
- const uint8_t tabNumber[11] = { 0b00000011,0b11100111,0b10010001,0b11000001,0b01100101,0b01001001,0b00001001,0b01100011,0b00000001,0b01000001,0b11111111 };
- const uint16_t tabSeuilDeclenchement[8] { CAPTEUR_1_SEUIL_DECLENCHEMENT,CAPTEUR_2_SEUIL_DECLENCHEMENT,CAPTEUR_3_SEUIL_DECLENCHEMENT,CAPTEUR_4_SEUIL_DECLENCHEMENT,CAPTEUR_5_SEUIL_DECLENCHEMENT,CAPTEUR_6_SEUIL_DECLENCHEMENT,CAPTEUR_7_SEUIL_DECLENCHEMENT,CAPTEUR_8_SEUIL_DECLENCHEMENT };
- unsigned long afficheurTempsPrecedent = 0UL;
- unsigned long capteursTempsPrecedent = 0UL;
- uint16_t capteursValue[8] = {0,0,0,0,0,0,0,0};
- uint8_t capteurSelect ={10}; //off
- uint16_t cpteur=0;
- void setup(){
- Serial.begin(115200);
- //Initialisation des ports
- DDRC = 0xFF; //ADC Input
- printNombre(OFF);
- //afficheur segment A-G DP
- DDRB |= (1 << PIN_AFFICHEUR_SEGMENT_A) | (1 << PIN_AFFICHEUR_SEGMENT_B) | (1 << PIN_AFFICHEUR_SEGMENT_C) | (1 << PIN_AFFICHEUR_SEGMENT_D) | (1 << PIN_AFFICHEUR_SEGMENT_E) | (1 << PIN_AFFICHEUR_SEGMENT_F);
- DDRD |= (1 << PIN_AFFICHEUR_SEGMENT_G) | (1 << PIN_AFFICHEUR_SEGMENT_DP);
- afficheurTempsPrecedent=millis() + AFFICHEUR_TEMPS_RAFRAICHISSEMENT;
- capteursTempsPrecedent = millis() + CAPTEURS_TEMPS_RAFRAICHISSEMENT;
- }
- void loop(){
- unsigned long tempsActuel = millis();
- //determination du nombre a afficher
- if( abs(tempsActuel-afficheurTempsPrecedent) >= AFFICHEUR_TEMPS_RAFRAICHISSEMENT){
- afficheurTempsPrecedent = tempsActuel;
- printNombre(capteurSelect);
- }
- if( abs(tempsActuel-capteursTempsPrecedent) >= CAPTEURS_TEMPS_RAFRAICHISSEMENT){
- // 1 Lecture des capteurs
- readCapteurs();
- // 2 determination du capteur a afficher
- selectCapteurOK();
- capteursTempsPrecedent = tempsActuel;
- }
- }
- void printNombre(const int& nombre){
- const uint8_t& nb = ( (AFFICHER_TYPE_ANODE) ? tabNumber[nombre]: (~tabNumber[nombre]));
- const uint8_t& off = ( (AFFICHER_TYPE_ANODE) ? tabNumber[OFF]: (~tabNumber[OFF]));
- PORTB = (PORTB & 0b11000000) | (off >> 2);
- PORTD = (PORTD & 0b00111111) | ((off & 0b00000011) << 6);
- PORTB = (PORTB & 0b11000000) | (nb >> 2);
- PORTD = (PORTD & 0b00111111) | ((nb & 0b00000011) << 6);
- }
- void readCapteurs(){
- capteursValue[0] = analogRead(PIN_CAPTEUR1);
- capteursValue[1] = analogRead(PIN_CAPTEUR2);
- capteursValue[2] = analogRead(PIN_CAPTEUR3);
- capteursValue[3] = analogRead(PIN_CAPTEUR4);
- capteursValue[4] = analogRead(PIN_CAPTEUR5);
- capteursValue[5] = analogRead(PIN_CAPTEUR6);
- capteursValue[6] = analogRead(PIN_CAPTEUR7);
- capteursValue[7] = analogRead(PIN_CAPTEUR8);
- }
- void selectCapteurOK(){
- //determination du capteur OK
- for(int i =7 ; i >= 0 ; i--){
- if( capteursValue[i] >= (tabSeuilDeclenchement[i]) ){ capteurSelect = i+1; break; }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment