Εμφάνιση αποτελεσμάτων : 1 έως 5 από 5

Θέμα: Countdown Timer 7seg CC Version Arduino Nano

  1. #1
    Μέλος Το avatar του χρήστη Kernel Panic
    Όνομα
    Kernel Panic
    Εγγραφή
    Aug 2016
    Περιοχή
    Αθήνα
    Μηνύματα
    430

    Red Face Countdown Timer 7seg CC Version Arduino Nano

    Αν και είναι συνέχεια από το θέμα, Countdown timer 7seg CC με Arduino για UV Box και όχι μόνο, εκτίμησα ότι είναι καλλίτερα να το βάλω μόνο του.
    Αν πάλι οι διαχειριστές το θέλουν αχώριστο και συνεχές ας τα ενώσουν, δεν έχω θέμα.

    • Να σημειώσω εδώ ότι το συγκεκριμένο κύκλωμα που περιγράφω δεν το έχω κατασκευάσει, το έχω δει θεωρητικά βασισμένος στην πρότερη κατασκευή που λειτουργεί.
    • Αν αντιμετωπίσετε οποιοδήποτε θέμα εδώ είμαστε να το λύσουμε.


    Στο δια ταύτα τώρα, μετά την διδακτική ήττα στο προηγούμενο θέμα, όπου το D13 σε άλλους λειτουργεί σαν input και σε άλλους όχι, έκανα λοιπόν όλες τις απαραίτητες αλλαγές σε κώδικα και όχι μόνο, ώστε το D13 να μείνει εκτός - όχι θα παίζουμε λειτουργεί, δεν λειτουργεί.
    Αφού η αρχή των αλλαγών έγινε, με γνώμονα την προσαρμογή του Arduino Nano πάνω στην πλακέτα σύμφωνα με αυτό που έχω στο κεφάλι μου, πήρα φόρα και τα άλλαξα όλα. Ο σκοπός μου ήταν να καταστεί ο σχεδιασμός της πλακέτας τόσο εύκολος ώστε να μπορεί να κατασκευαστεί και σε διάτρητη που είναι και η πρότασή μου για το PCB. Εντάξει η χρήση των SMD 0805 αντιστάσεων ανεβάζει λίγο τον δείκτη δυσκολίας, αλλά συμμαζεύει τις διαστάσεις.
    Αλλαγή στην τροφοδοσία, στο Nano δεν χεριάζετε εξωτερική σταθεροποίηση, το LM1117MPX-5.0 που έχει (συνήθως) επαρκεί για τις ανάγκες του κυκλώματος.
    Αλλαγή και στο MOSFET, στην θέση του IRF540 μπαίνει το IRL540 [N-Channel 100V 28A] που έχει Vgs 5.0v και μπορεί να οδηγηθεί από το Arduino.

    Αν και τα βασικά χαρακτηριστικά μένουν ίδια, τα ξαναδίνω μαζί με κάποιες πληροφορίες που είχαν αρχικά παραληφθεί.
    - Η απεικόνιση του χρόνου γίνεται με 4-Digit 7-Segment Display Common Cathode με πολυπλεξία.
    - Ο μέγιστος χρόνος αντίστροφης μέτρησης είναι 99:59 [min:sec].
    - Στον κώδικα υπάρχει πρόβλεψη να χρησιμοποιήσετε 7-Segment κοινής ανόδου, αφαιρώντας απλώς τα σχόλια (γραμμή 353).
    - Timer interrupt για πολύ καλή ακρίβεια.
    - Η μόνη βιβλιοθήκη που θα χρειαστείτε, είναι η <EEPROM.h>
    - Το Pause είναι ένα reed switch με τον μαγνήτη στο κάλυμμα, μόλις σηκωθεί κόβει η έξοδος, κάνει παύση η αντίστροφη, η οθόνη εμφανίζει το γράμμα P να κινείτε, μόλις κλίσει το κάλυμμα η αντίστροφη θα συνεχίσει από τον χρόνο που σταμάτησε.
    Στο ξεκίνημα εμφανίζεται για 0.5'' ο χαιρετισμός Hi, καλό σημάδι ότι πάμε καλά.
    Στη παρθενική ενεργοποίηση δεν θα δείτε κάποιο χρόνο, αλλά μια άκυρη ένδειξη, η EEPROM έχει σκουπίδια ακόμη, διαλέξτε χρόνο με το UP - DOWN και πατήστε το START, θα εμφανιστεί η λέξη Set και θα αρχίσει η αντίστροφη, τα «ιερογλυφικά» δεν θα τα ξαναδείτε.

    Ο χειρισμός με τρία κουμπιά είναι πολύ απλός.
    - UP, ο χρόνος ανεβαίνει στην αρχή ανά 1" και μετά ανά 30".
    - DOWN, ο χρόνος κατεβαίνει ανά 1" αργά στη αρχή και μετά γρήγορα.
    - START, ξεκινάει την αντίστροφη και φυσικά ανοίγουν και τα UV Leds ή όποιο άλλο φορτίο έχετε βάλει, αν αλλάξετε τον χρόνο από την τελευταία φορά εμφανίζετε για λίγο η ένδειξη Set, ο νέος χρόνος καταχωρείτε στην EEPROM και μετά αρχίζει η αντίστροφη. Στα τελευταία 5" ακούγετε ένα μπιπ, τελειώνοντας ο χρόνος της αντίστροφης, ακούγετε ο πανηγυρικός ήχος λήξης και εμφανίζετε η λέξη End που μένει εκεί (κόλπο για να θυμάμαι), μέχρι να πατηθεί ξανά το κουμπί START και να εμφανιστεί ο χρόνος που έχει στην EEPROM.
    Αν κατά την διάρκεια της αντίστροφης πατηθεί το START σταματάει η αντίστροφη, σβήνουν τα UV Leds, στο Display εμφανίζετε η λέξη StoP, ακούγετε ο ήχος λήξης κλπ.
    Αν πατήσετε το START με ανοιχτό το κάλυμμα η αντίστροφη δεν θα ξεκινήσει, το Display εμφανίζει το animation P [Pause], κλείστε το κάλυμμα και πατήστε ξανά το START.

    Στο zip θα βρείτε όλα τα αρχεία που χρειάζεστε, δηλ.
    • Αρχεία του Eagle.
    • PDF με σχέδιο και PCB σε πραγματικές διαστάσεις και mirror, γι' αυτούς που δεν έχουν το Eagle
    • Το αρχείο με τον κώδικα για το Arduino.



    Nano_Countdown_Timer_7-seg_CC_sch.jpg Nano_Countdown_Timer_7-seg_CC_pcb.jpg Nano_Countdown_Timer_7-seg_CC_pcb1.jpg

    4 Not allowed! Not allowed!

  2. Ένα μέλος ευχαρίστησε τον Kernel Panic για αυτό το χρήσιμο μήνυμα:

    Lord Vek (11-03-18)

  3. #2
    Μέλος Το avatar του χρήστη Kernel Panic
    Όνομα
    Kernel Panic
    Εγγραφή
    Aug 2016
    Περιοχή
    Αθήνα
    Μηνύματα
    430

    Προεπιλογή

    και ένα σχεδιάκι για 4Digit 7-segment display common anode

    Arduino_Nano_Countdown_Timer_7-seg_CA_sch.jpg

    0 Not allowed! Not allowed!

  4. #3
    Μέλος Το avatar του χρήστη Kernel Panic
    Όνομα
    Kernel Panic
    Εγγραφή
    Aug 2016
    Περιοχή
    Αθήνα
    Μηνύματα
    430

    Προεπιλογή

    Μερικές αλλαγές στον κώδικα γιατί προέκυψαν κάποια θεματάκια.
    Στην λειτουργία και τον χειρισμό δεν έχει γίνει καμία αλλαγή.
    Αν έχετε Common Anode Display (CA), πρέπει βγάλετε τα σχόλια από την γραμμή #367


    Κώδικας:
    /*
       7-Segment Display Multiplexing Countdown timer
       Common cathode displays
       max. countdown time 99:59 [min:sec]
       Arduino Software (IDE) 1.8.12
       Date: 16/06/2020
      # kernel panik #
    */
    /*
      7-Segment Display map
          AAA
         F   B
         F   B
          GGG
         E   C
         E   C
          DDD
    */
    
    
    /*------------------------------------------------------------
      Includes
      ------------------------------------------------------------*/
    #include <EEPROM.h>
    
    
    /*------------------------------------------------------------
      Defines
      ------------------------------------------------------------*/
    #define  pinUP          0 // Button UP Countdown
    #define  pinDown        1 // Button Down Countdown
    #define  pinStart       2 // Button Start or STOP
    #define  PinPause      A4 // Button Pause
    #define  UV_Leds       A3 // output
    #define  Buzzer        A2 // Buzzer pin out
    #define  SpeedSlow    250 // milliseconds
    #define  SpeedFast   1500 // milliseconds
    #define  SpeedDwnSec    1 // 
    #define  BeepSec        6 // Beep for the last seconds
    #define  Debounce_ms   20 // milliseconds
    #define  EEPRminute     0 // address of the EEPROM
    #define  EEPRsecond     1 // address of the EEPROM
    #define  StartTimer     TCCR1B = 0x04; // set clock -> start = 0x04; | stop = 0x00;
    #define  StopTimer      TCCR1B = 0x00;
    
    
    // arduino pins for segments
    #define  A              7 // arduino pin out
    #define  B              5
    #define  C              8
    #define  D             11
    #define  E             12
    #define  F             10
    #define  G              6
    #define  DP             9  // Blink led COL. every second
    // arduino pins for digits
    #define  Dig1           3 // arduino pin out
    #define  Dig2           4
    #define  Dig3          A1
    #define  Dig4          A0
    
    
    // Button debouncing globals
    const uint8_t Buttons[] = {pinUP, pinDown, pinStart, PinPause}; // create an array of pins for switch
    const uint8_t NumOFbtns = sizeof(Buttons);
    
    
    unsigned long ButtonTime, SpeedTime;
    int Minute, Second, SpeedCount; //
    
    
    //=== 7 segments leds =============================
    // bits representing segments A through G (and decimal point) for numerals 0-9
    const uint8_t Numera[21] = {
      //ABCDEFG dp
      B11111100, // 0
      B01100000, // 1
      B11011010, // 2
      B11110010, // 3
      B01100110, // 4
      B10110110, // 5
      B00111110, // 6
      B11100000, // 7
      B11111110, // 8
      B11100110, // 9
      B10110110, // S / 10
      B10011110, // E / 11
      B00011110, // t / 12
      B01101110, // H / 13
      B00001000, // i / 14
      B11001110, // P / 15
      B00000010, // - / 16
      B00000000, // 17 - shows nothing
      B00101010, // n / 18
      B01111010, // d / 19
      B00111010, // o / 20
    };
    
    
    const uint8_t segmentPins[] = {DP, G, F, E, D, C, B, A};
    const uint8_t nbrDigits = 4; // the number of digits in the LED display
    const uint8_t digitPins[nbrDigits] = { Dig1, Dig2, Dig3, Dig4};
    
    
    /* notes in the melody
       http://www.arduino.cc/en/Tutorial/Tone */
    // int melody[] = {262, 196, 196, 220, 196, 0, 247, 262};
    int melody[] = {4186, 3136, 3136, 3520, 3136, 0, 3951, 4186};
    //note durations. 4=quarter note / 8=eighth note
    int noteDurations[] = {4, 8, 8, 4, 4, 4, 4, 4};
    
    
    bool ON = HIGH;
    bool OFF = LOW;
    bool LastBeep;
    
    
    /***********************
      Timer interrupt
      https://www.electronicsblog.net/examples-of-using-arduinoatmega-16-bit-hardware-timer-for-digital-clock/
    ************************/
    ISR(TIMER1_OVF_vect) {
      Second --;
      LastBeep = true ;
      digitalWrite (DP, !digitalRead(DP));
      TCNT1 = 0x0BDC ; // 0x0BDC set initial value to remove time error (16bit counter register)
    }
    
    
    enum _buttons {
      ButtonUP,
      ButtonDOWN,
      ButtonSTART,
      ButtonPAUSE
    };
    
    
    
    
    
    
    //=== setup =============================================================
    void setup() {
      /* make buttons as input */
      for ( uint8_t index_BTN = 0; index_BTN < NumOFbtns; index_BTN++) {
        pinMode(Buttons[index_BTN], INPUT_PULLUP);
      }
    
    
      for (uint8_t i = 0; i < 8; i++)   {
        pinMode (segmentPins[i], OUTPUT); // set segment and DP pins to output
        for (uint8_t i = 0; i < nbrDigits; i++)
          pinMode (digitPins[i], OUTPUT);
      }
      pinMode (Buzzer, OUTPUT);
      pinMode (UV_Leds, OUTPUT);
      digitalWrite (Buzzer, OFF);
      digitalWrite (UV_Leds, OFF);
    
    
      for (uint8_t i = 0; i < 50; i++) { // Hi
        showDigit (13, 1); // H
        showDigit (14, 2); // i
      }
    
    
      TIMSK1 = 0x01; // enabled global and timer overflow interrupt;
      TCCR1A = 0x00; // normal operation (mode0);
      TCNT1 = 0x0BDC; // 0x0BDC set initial value to remove time error (16bit counter register)
      StopTimer;
    
    
      Minute = EEPROM.read(EEPRminute); // read minute from address of the EEPROM
      Second = EEPROM.read(EEPRsecond); // read second from address of the EEPROM
    
    
      digitalWrite (DP, ON);
      Beep_();
    }//==Close setup =====
    
    
    
    
    
    
    //==== loop ================================================================
    void loop() {
      UpDown();
    
    
      //--- Start | EEPROM | Pause | STOP ----
      //--- Pause ----
      if ((digitalRead(PinPause) == HIGH) && (CheckButton(Buttons[ButtonSTART])) && (!getBtnStableLevel(Buttons[ButtonSTART]))) {
        digitalWrite (UV_Leds, OFF);
        StopTimer;
        Pause();
        delay (10);
      }
    
    
      //--- Start ---
      if (( digitalRead (PinPause) == LOW) && (CheckButton(Buttons[ButtonSTART])) && (!getBtnStableLevel(Buttons[ButtonSTART]))) {
        bool CountDwn = true;
        //--- Store EEPROM only if different ---
        if ( EEPROM.read (EEPRminute) != Minute || EEPROM.read (EEPRsecond) != Second) {
          digitalWrite (DP, OFF);
          EEPROM.update (EEPRminute, Minute);
          EEPROM.update (EEPRsecond, Second);
          for (int i = 0; i < 50; i++)   { // Display SEt
            showDigit (10, 0); // S
            showDigit (11, 1); // E
            showDigit (12, 2); // t
          }
        } //--Close Store EEPROM -----
    
    
        StartTimer;
        digitalWrite (UV_Leds, ON);
        Beep_();
    
    
        //--- Countdown ----
        while (CountDwn) {// wait
          if (Minute == 0 && Second == 0) {
            CountDwn = false;
          }
          if (Minute == 0 && Second < BeepSec && LastBeep == true) {
            Beep_();
            LastBeep = false;
          }
          if (Second < 0) {
            Minute --;
            Second = 59;
          }
    
    
          //--- Pause ----
          if ((CheckButton(Buttons[ButtonPAUSE])) && (getBtnStableLevel(Buttons[ButtonPAUSE]))) {
            digitalWrite (UV_Leds, OFF);
            StopTimer;
            Pause();
            StartTimer;
            digitalWrite (UV_Leds, ON);
          }//--Close Pause ----
    
    
          //-- STOP ----
          if ((CheckButton(Buttons[ButtonSTART])) && (!getBtnStableLevel(Buttons[ButtonSTART]))) {
            digitalWrite (UV_Leds, OFF);
            StopTimer;
            digitalWrite (DP, OFF);
            for (int i = 0; i < 100; i++) {
              showDigit (10, 0); // S
              showDigit (12, 1); // t
              showDigit (20, 2); // 0
              showDigit (15, 3); // P
            }
            Minute = 0;
            Second = 0;
          }//--Close STOP ----
          UpdateDisplay();
        }//--Close while Countdown ----
    
    
        digitalWrite (UV_Leds, OFF);
        StopTimer;
        digitalWrite (DP, OFF);
        BuzMelody();
    
    
        // End
        bool _end = true;
        do {
          showDigit (11, 0); // E
          showDigit (18, 1); // n
          showDigit (19, 2); // d
          if ((CheckButton(Buttons[ButtonSTART])) && (!getBtnStableLevel(Buttons[ButtonSTART]))) {
            Minute = EEPROM.read(EEPRminute);
            Second = EEPROM.read(EEPRsecond);
            _end = false;
          }
        }
        while (_end) ; // End
        digitalWrite (DP, ON);
      }//--Close Start | EEPROM | Pause | STOP ----
      UpdateDisplay();
    }//==Close loop =====
    
    
    
    
    
    
    //=== Up Down Time ==========================================
    void UpDown() {
      //-- UP ---
      if (CheckButton(Buttons[ButtonUP]) && !getBtnStableLevel(Buttons[ButtonUP])) {
        Second ++;
        ButtonTime = millis();
        SpeedTime = millis();
        while ( digitalRead (pinUP) == LOW) {
          if (Second > 59) {
            Second = 00;
            Minute ++;
          }
          if (Minute >= 100) {
            Minute = 00;
          }
          if (millis() - ButtonTime > SpeedSlow) {
            Second ++;
            ButtonTime = millis ();
            if ( millis () - SpeedTime > SpeedFast) {
              Second += 29;
            }
          }
          UpdateDisplay();
        }//--Close while ----
      }//==Close pinUP ====
    
    
      //--- Down ----
      if (CheckButton(Buttons[ButtonDOWN]) && !getBtnStableLevel(Buttons[ButtonDOWN])) {
        if ((Minute == 0) && (Second == 0)) {
          Second = 59;
          Minute = 99;
        }
        else {
          Second --;
        }
        if  ((Second == -1) || (Second > 60)) {
          Second = 59;
          Minute --;
        }
        SpeedCount = SpeedSlow;
        ButtonTime = millis();
        SpeedTime = millis();
    
    
        while ( digitalRead (pinDown) == LOW) { //-- while --
          if ( millis () - SpeedTime > SpeedFast) {
            SpeedCount = SpeedDwnSec;
          }
    
    
          if ( millis () - ButtonTime > SpeedCount)  {
            if ((Second == 0) && (Minute == 0)) {
              Minute = 99;
              Second = 59;
            }
            else {
              Second --;
            }
            if  ((Second == -1) || (Second > 60)) {
              Second = 59;
              Minute --;
            }
            ButtonTime = millis();
          }
          UpdateDisplay();
        }//--Close while ---
      } //== Close Down ===
    }//== Close UpDown ===
    
    
    
    
    //=== Pause ==========================================
    void Pause() {
      digitalWrite (DP, OFF);
      //-- Animation P --
      while ( digitalRead (PinPause) == HIGH ) { //-- while --
        for ( int digit = nbrDigits - 1; digit >= 0; digit--) {
          for ( uint8_t i = 0; i < 40; i++) {
            showDigit (15, digit); // P
          }
        }
        for ( uint8_t Dig = 1; Dig <= 2; Dig++) {
          for ( uint8_t i = 0; i < 40; i++) {
            showDigit (15, Dig); // P
          }
        }
      }//--Close while Animation P ---
    }//==Close Pause =====
    
    
    
    
    //=== UpdateDisplay ===================================
    void UpdateDisplay() {  // mmss
      showDigit (Minute / 10, 0);
      showDigit (Minute % 10, 1);
      showDigit (Second / 10, 2);
      showDigit (Second % 10, 3);
    }//==Close UpdateDisplay ====
    
    
    
    
    
    
    //=== showDigit ========================================
    // Displays given number on a 7-segment display at the given digit position
    void showDigit ( uint8_t number, uint8_t digit) {
      digitalWrite (digitPins[digit], HIGH );
      for ( uint8_t segment = 1; segment < 8; segment++) {
        bool isBitSet = bitRead (Numera[number], segment);
        // isBitSet will be true if given bit is 1
    
    
        /*  --- CC or CA Display ---  */
      //  isBitSet = ! isBitSet ; // if (CA) Common Anode Display Remove comment from this line
    
    
        digitalWrite (segmentPins[segment], isBitSet);
      }
      delay (3);
      digitalWrite (digitPins[digit], LOW );
    }//==Close showDigit ====
    
    
    
    
    
    
    //--- Buttons -----
    //=== CheckButton ====================================
    bool stableButtonLevels[20]; //
    bool oldButtonLevels[20]; //
    
    
    bool CheckButton( uint8_t Button_Pin) {
      bool previousLevel = stableButtonLevels[Button_Pin];
      bool newLevel      = getBtnStableLevel(Button_Pin);
      return previousLevel != newLevel;
    }//== Close CheckButton ===
    
    
    //=== getBtnStableLevel ====================================
    bool getBtnStableLevel( uint8_t Button_Pin) {
      unsigned long BtnPressTime;
      // Reads a digital pin and filters it, returning the stable button position
      bool  pinLevel = digitalRead (Button_Pin);
      if (pinLevel != oldButtonLevels[Button_Pin]) {
        BtnPressTime = millis ();
        oldButtonLevels[Button_Pin] = pinLevel;
      }
      // Once the button has been stable for
      if (( millis () - BtnPressTime) > Debounce_ms) { // Debounce
        stableButtonLevels[Button_Pin] = pinLevel;
      }
      return stableButtonLevels[Button_Pin];
    }//==Close getBtnStableLevel ======
    //--End Buttons ----
    
    
    
    
    
    
    /* --- Buzzer Melody ----
       http://www.arduino.cc/en/Tutorial/Tone */
    //=== BuzMelody ====================================
    void BuzMelody() {
      //iterate over the notes of the melody
      for (int thisNote = 0; thisNote < 8; thisNote++) {
        //to calculate the note duration, take one second. Divided by the note type
        int noteDuration = 1000 / noteDurations [thisNote];
        tone(Buzzer, melody [thisNote], noteDuration);
    
    
        //to distinguish the notes, set a minimum time between them
        int pauseBetweenNotes = noteDuration * 1.30;
        delay(pauseBetweenNotes);
    
    
        //stop the tone playing
        noTone(Buzzer);
      }
    }//==Close BuzMelody ====
    
    
    
    
    //=== Buzzer Beep ====================================
    void Beep_() {
      tone(Buzzer, 2489, 30);
      delay(40);
      noTone(Buzzer);
    }//==Close Beep_ ======
    
    
    
    
    /*********( END Code )***********/

    1 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη Kernel Panic : 17-06-20 στις 20:46

  5. #4
    Μέλος Το avatar του χρήστη Lord Vek
    Όνομα
    Θόδωρος
    Εγγραφή
    Jan 2011
    Περιοχή
    Ρόδος
    Μηνύματα
    72

    Προεπιλογή

    Δεν αλλάζoυν όμως διάφορα στο σχέδιο; πχ Α2-Α5 είναι τα Dig1-Dig4 στο πρόγραμμα ενώ στο σχέδιο το Α4 είναι ο buzzer και μόνο τα Α0-Α1 χρησιμοποιούνται για τα Dig3 και Dig4.

    0 Not allowed! Not allowed!
    Ρακοσυλλεκτική ΕΠΕ (tm)

  6. #5
    Μέλος Το avatar του χρήστη Kernel Panic
    Όνομα
    Kernel Panic
    Εγγραφή
    Aug 2016
    Περιοχή
    Αθήνα
    Μηνύματα
    430

    Προεπιλογή

    εντάξει την έκανα την πατάτα, το δοκίμασα στα δικό μου και ξέχασα να αλλάξω τα pin στα define.
    Έχω επεξεργαστεί τo post και τώρα είναι διορθωμένο στο #3
    sorry guys.

    1 Not allowed! Not allowed!

  7. Ένα μέλος ευχαρίστησε τον Kernel Panic για αυτό το χρήσιμο μήνυμα:

    Lord Vek (18-06-20)

Παρόμοια Θέματα

  1. Countdown timer 7seg CC με Arduino για UV Box και όχι μόνο.
    By Kernel Panic in forum Παρουσίαση Ολοκληρωμένων Κατασκευών
    Απαντήσεις: 61
    Τελευταίο Μήνυμα: 22-09-21, 05:17
  2. Arduino Nano
    By leuteris107 in forum Μικροελεγκτές
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 24-12-16, 11:04
  3. ARDUINO NANO
    By electricalgian in forum Ηλεκτρονικά
    Απαντήσεις: 17
    Τελευταίο Μήνυμα: 17-05-16, 20:13
  4. arduino nano
    By FMTRIKALA in forum Μικροελεγκτές
    Απαντήσεις: 1
    Τελευταίο Μήνυμα: 26-11-15, 10:29
  5. Ραδιόφωνο FM με Arduino nano
    By CLOCKMAN in forum Παρουσίαση Ολοκληρωμένων Κατασκευών
    Απαντήσεις: 27
    Τελευταίο Μήνυμα: 16-02-15, 18:38

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας