Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 17

Θέμα: Arduino Βοήθεια στον προγραμματισμό!

  1. #1
    Νέο Μέλος
    Όνομα
    Λεωνίδας
    Εγγραφή
    Mar 2016
    Περιοχή
    Αλεξανδρούπολη
    Μηνύματα
    8

    Προεπιλογή Arduino Βοήθεια στον προγραμματισμό!

    Καλήσπερα! Θα 'θελα τη βοήθεια σας σχετικά με ένα κώδικα με το arduino!


    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x38,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display

    const int buttonPin = 13;
    const int ledPin = 2;
    const int buttonPin2 = 6;


    char gramata ;

    int buttonState = 0;
    int lastButtonState = 0;
    int buttonState2 = 0;
    int lastButtonState2 = 0;
    int p=0;
    int s=0;
    void setup() {
    lcd.init();
    pinMode(ledPin, OUTPUT);

    pinMode(buttonPin, INPUT);
    pinMode(buttonPin2, INPUT);
    gramata = 65 ;
    }

    void loop(){

    buttonState = digitalRead(buttonPin);
    buttonState2 = digitalRead(buttonPin2);

    lcd.setCursor (0,0);
    lcd.print ("insert Name") ;
    lcd.setCursor (s,1) ;
    lcd.print (gramata);


    if (buttonState2 != lastButtonState2) {
    if (buttonState2 == HIGH) {
    s=s++;
    gramata = 65 ;
    }
    }
    if (buttonState != lastButtonState) {

    if (buttonState == HIGH) {


    gramata = gramata++ ;
    }

    }
    if (gramata == 91) {
    gramata = 48 ;
    }
    if(gramata==5 {
    gramata = 65;
    }


    lastButtonState = buttonState ;
    lastButtonState2 = buttonState2 ;
    }



    Έχω αυτόν τον κώδικα. Έχω μια οθόνη χαρακτήρων 16Χ2 στην οποία θέλω να σχηματίζω ένα όνομα.
    Με ένα κουμπί αλλάζω τα γράμματα και με ένα άλλο πηγαίνω στο επόμενο γράμμα μέχρι να σχηματίσω το όνομα που θέλω.
    Θέλω αυτό το όνομα να μπορω να το αποθηκεύσω στην EEPROM σαν μια λέξη. Π.Χ. σχηματίζω "XRHSTOS". Θέλω το XRHSTOS να μπορώ να το αποθηκεύσω στην EEPROM ώστε να μπορώ αργότερα να το εμφανίζω. Μπορεί κάποιος να με βοηθήσει??? Δεν ξέρω πως να το κάνω. Σας ευχαριστώ πολύ!

    0 Not allowed! Not allowed!

  2. #2
    Μέλος Το avatar του χρήστη SeAfasia
    Όνομα
    SV3IRG Dinos
    Εγγραφή
    Sep 2012
    Περιοχή
    Άργος.
    Μηνύματα
    3.363

    Προεπιλογή

    μήπως σε βοηθήσει:
    EEPROM

    και κώδικα για lcd:
    lcd

    0 Not allowed! Not allowed!

  3. #3
    Νέο Μέλος
    Όνομα
    Λεωνίδας
    Εγγραφή
    Mar 2016
    Περιοχή
    Αλεξανδρούπολη
    Μηνύματα
    8

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από SeAfasia Εμφάνιση μηνυμάτων
    μήπως σε βοηθήσει:
    EEPROM

    και κώδικα για lcd:
    lcd



    Επειδή δε ξέρω και πολλά μπορείς να μου δώσεις ένα παράδειγμα?

    0 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη cdesp
    Όνομα
    Χρήστος
    Εγγραφή
    Sep 2009
    Περιοχή
    Κιλκις
    Μηνύματα
    253

    Προεπιλογή

    Δες εδώ για το πως γίνεται η σύνδεση της EEPROM παράδειγμα 21.2 στην μέση περίπου.
    Όσο για τον κώδικα το παράδειγμα που έχει στο link που έστειλε ο Κώστας δεν νομίζω να έχει καμιά δυσκολία.


    To use the EEPROM, a library is required, so use the following library in your sketches:




    #include "EEPROM.h"
    The rest is very simple. To store a piece of data, we use the following function:
    EEPROM.write(a,b);
    The parameter a is the position in the EEPROM to store the integer (0~255) of data b. In this example, we have 1024 bytes of memory storage, so the value of a is between 0 and 1023. To retrieve a piece of data is equally as simple, use:
    Arduino


    z = EEPROM.read(a);
    Επίσης στον κώδικά σου στο σημείο (gramata = gramata++ ; ) ή βάζουμε gramata = gramata+1 ; ή gramata++ ;

    0 Not allowed! Not allowed!

  5. #5
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Λίγη θεωρία πρώτα, για την προσέγγιση του θέματος:

    Είναι καλό να χρησιμοποιήσεις έναν πίνακα που θα περιέχει τα γράμματα σε ASCII μορφή που θα χρησιμοποιήσεις. Δηλαδή αν πρόκειται μόνον να έχεις κεφαλαία, θα φτιαχτεί κάτι τέτοιο:

    Κώδικας:
    char* myCapitalLetters[] = {"A", "B", "C", "D", "E", "F",
                              "G", "H", "I", "J", "K", "L",
                              "M", "N", "O", "P", "Q", "R",
                              "S", "T", "U", "V", "W", "X", 
                              "Y", "Z"};
    Μετά, θα πρέπει να φτιάξεις μια ρουτίνα που θα μετράει τα χτυπήματα που θα κάνεις στα κουμπιά που θα πηγαίνουν στα γράμματα. Με τον αριθμό αυτό της μεταβλητής,
    θα επιλέγεται απο τον πίνακα (index) το γράμμα που θές και θα τυπώνεται στην οθόνη, αλλά ταυτόχρονα και σε ένα άλλο array (πίνακα) που θα αποθηκευτεί αργότερα στην EEPROM.
    To κάθε γράμμα μπορεί να επιλέγεται μέσω μιας συνάρτησης switch-case για τα 26 γράμματα του αγγλικού αλφαβήτου.

    Όλα αυτά στα αναφέρω γιατί δεν είναι τόσο απλά όσο μπορεί να φαίνονται, χρειάζεται χρόνος και εμπειρία.

    1 Not allowed! Not allowed!

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

    agis68 (21-03-16)

  7. #6
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Επειδή εδώ που είμαι έχω μόνο έναν UNO με μια shield οθόνης και κουμπιών στην αναλογική Α0, έκανα ένα μικρό δοκίμιο:

    Κώδικας:
    #include <Wire.h>
    #include <LiquidCrystal.h>
    #include <EEPROMex.h>
    
    
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    
    #define RIGHT                    1
    #define UP                       2
    #define DOWN                     3
    #define LEFT                     4
    #define SELECT                   5
    #define NONE                     6
    
    
    #define TRUE                     1
    #define FALSE                    0 
    #define EEPROMStoreAddress            0x00
    // ===================================================================
    int lcd_key     = 0;
    int adc_key_in  = 0;
    int letterCounter = 0;
    int cursorPosition = -1;
    // ===================================================================
    char *myCapitalLetters[] = {"A", "B", "C", "D", "E", "F",
                              "G", "H", "I", "J", "K", "L",
                              "M", "N", "O", "P", "Q", "R",
                              "S", "T", "U", "V", "W", "X", 
                              "Y", "Z", " "};
    char *buffer[15];             
    // ===================================================================                          
    void setup()
    {  
      lcd.begin(16, 2);
      Wire.begin(); 
      lcd.clear(); 
    }
    // ===================================================================  
    void loop()
    {
       do
       {
         lcd_key = read_LCD_buttons();
         delay(450);
         if(lcd_key == UP) 
         {
           letterCounter++;
           if(letterCounter > 26) letterCounter = 0;
         }  
         if(lcd_key == DOWN) 
         {
           letterCounter--;
           if(letterCounter < 0 ) letterCounter = 26;
         }  
         
         lcd.setCursor(0,0);
         lcd.print(letterCounter[myCapitalLetters]);
         
         if(lcd_key == SELECT)
         {
           cursorPosition++;
           buffer[cursorPosition] = letterCounter[myCapitalLetters];
           lcd.setCursor(cursorPosition,1);
           lcd.print(buffer[cursorPosition]);
           lcd.setCursor(14,0);
           lcd.print(cursorPosition);
           lcd.setCursor(14,1);
           lcd.print(letterCounter);
         }     
         if(lcd_key == RIGHT)
         {
           for(int i = cursorPosition; i < 16; i++)
           {
             buffer[i] = " ";
             lcd.setCursor(i-1,1);
             lcd.print(" ");
           }   
           cursorPosition = -1;
           letterCounter = 0;       
         }     
         if(lcd_key == LEFT)
         {
    
    
    
    
         }  
       }while(!((lcd_key == UP) || (lcd_key == DOWN) || (lcd_key == SELECT) || (lcd_key == RIGHT) || (lcd_key == LEFT)));
       
       
    } 
    // =================================================================== 
    int read_LCD_buttons()
    {
     adc_key_in = analogRead(0);      // read the value from the sensor 
     // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
     // we add approx 50 to those values and check to see if we are close
     if (adc_key_in > 1000) return NONE; // We make this the 1st option for speed reasons since it will be the most likely result
    /* // For V1.1 us this threshold
     if (adc_key_in < 50)   return RIGHT;  
     if (adc_key_in < 250)  return UP; 
     if (adc_key_in < 450)  return DOWN; 
     if (adc_key_in < 650)  return LEFT; 
     if (adc_key_in < 850)  return SELECT;  
    */
     // For V1.0 comment the other threshold and use the one below:
    
    
     if (adc_key_in < 50)   return RIGHT;  
     if (adc_key_in < 195)  return UP;  
     if (adc_key_in < 380)  return DOWN;  
     if (adc_key_in < 555)  return LEFT;
     if (adc_key_in < 790)  return SELECT;   
     return NONE;  // when all others fail, return this...
    
    
    }
    
    
    // ===================================================================                          
    // ===================================================================
    Επιλέγεις με πάνω-κάτω το γράμμα που φαίνεται στην πάνω γραμμή και με το select μπαίνει στη σειρά για το όνομα που θες να γράψεις στην κάτω γραμμή. Με το δεξιά
    σβήνει τα πάντα και μένει μόνο με το αριστερά να αποθηκεύεται στη μνήμη. Τα κουμπιά είναι όλα σε αναλογική είσοδο.

    2 Not allowed! Not allowed!

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

    agis68 (21-03-16)

  9. #7
    Μέλος Το avatar του χρήστη SeAfasia
    Όνομα
    SV3IRG Dinos
    Εγγραφή
    Sep 2012
    Περιοχή
    Άργος.
    Μηνύματα
    3.363

    Προεπιλογή

    επισυνάπτω και εγώ έναν έτοιμο κώδικα που με έχει βοηθήσει:
    lcd key pad

    Mάνο με την while()
    while(!((lcd_key == UP) || (lcd_key == DOWN) || (lcd_key == SELECT) || (lcd_key == RIGHT) || (lcd_key == LEFT)));
    ποιόν έλεγχο πετυχαίνεις;

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη SeAfasia : 21-03-16 στις 15:39

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

    agis68 (21-03-16)

  11. #8
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Είναι η do{...}while(...);
    Με αυτήν τη συγκεκριμένη βρίσκεται σε βρόχο για όση ώρα δεν πατιέται τίποτα άλλο εκτός από τα κουμπιά στα οποία αναφέρεται.
    EDIT:
    Κώστα το έσβησες το μήνυμα...

    0 Not allowed! Not allowed!

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

    agis68 (21-03-16)

  13. #9
    Νέο Μέλος
    Όνομα
    Λεωνίδας
    Εγγραφή
    Mar 2016
    Περιοχή
    Αλεξανδρούπολη
    Μηνύματα
    8

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από manolena Εμφάνιση μηνυμάτων
    Επειδή εδώ που είμαι έχω μόνο έναν UNO με μια shield οθόνης και κουμπιών στην αναλογική Α0, έκανα ένα μικρό δοκίμιο:

    Κώδικας:
    #include <Wire.h>
    #include <LiquidCrystal.h>
    #include <EEPROMex.h>
    
    
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    
    #define RIGHT                    1
    #define UP                       2
    #define DOWN                     3
    #define LEFT                     4
    #define SELECT                   5
    #define NONE                     6
    
    
    #define TRUE                     1
    #define FALSE                    0 
    #define EEPROMStoreAddress            0x00
    // ===================================================================
    int lcd_key     = 0;
    int adc_key_in  = 0;
    int letterCounter = 0;
    int cursorPosition = -1;
    // ===================================================================
    char *myCapitalLetters[] = {"A", "B", "C", "D", "E", "F",
                              "G", "H", "I", "J", "K", "L",
                              "M", "N", "O", "P", "Q", "R",
                              "S", "T", "U", "V", "W", "X", 
                              "Y", "Z", " "};
    char *buffer[15];             
    // ===================================================================                          
    void setup()
    {  
      lcd.begin(16, 2);
      Wire.begin(); 
      lcd.clear(); 
    }
    // ===================================================================  
    void loop()
    {
       do
       {
         lcd_key = read_LCD_buttons();
         delay(450);
         if(lcd_key == UP) 
         {
           letterCounter++;
           if(letterCounter > 26) letterCounter = 0;
         }  
         if(lcd_key == DOWN) 
         {
           letterCounter--;
           if(letterCounter < 0 ) letterCounter = 26;
         }  
         
         lcd.setCursor(0,0);
         lcd.print(letterCounter[myCapitalLetters]);
         
         if(lcd_key == SELECT)
         {
           cursorPosition++;
           buffer[cursorPosition] = letterCounter[myCapitalLetters];
           lcd.setCursor(cursorPosition,1);
           lcd.print(buffer[cursorPosition]);
           lcd.setCursor(14,0);
           lcd.print(cursorPosition);
           lcd.setCursor(14,1);
           lcd.print(letterCounter);
         }     
         if(lcd_key == RIGHT)
         {
           for(int i = cursorPosition; i < 16; i++)
           {
             buffer[i] = " ";
             lcd.setCursor(i-1,1);
             lcd.print(" ");
           }   
           cursorPosition = -1;
           letterCounter = 0;       
         }     
         if(lcd_key == LEFT)
         {
    
    
    
    
         }  
       }while(!((lcd_key == UP) || (lcd_key == DOWN) || (lcd_key == SELECT) || (lcd_key == RIGHT) || (lcd_key == LEFT)));
       
       
    } 
    // =================================================================== 
    int read_LCD_buttons()
    {
     adc_key_in = analogRead(0);      // read the value from the sensor 
     // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
     // we add approx 50 to those values and check to see if we are close
     if (adc_key_in > 1000) return NONE; // We make this the 1st option for speed reasons since it will be the most likely result
    /* // For V1.1 us this threshold
     if (adc_key_in < 50)   return RIGHT;  
     if (adc_key_in < 250)  return UP; 
     if (adc_key_in < 450)  return DOWN; 
     if (adc_key_in < 650)  return LEFT; 
     if (adc_key_in < 850)  return SELECT;  
    */
     // For V1.0 comment the other threshold and use the one below:
    
    
     if (adc_key_in < 50)   return RIGHT;  
     if (adc_key_in < 195)  return UP;  
     if (adc_key_in < 380)  return DOWN;  
     if (adc_key_in < 555)  return LEFT;
     if (adc_key_in < 790)  return SELECT;   
     return NONE;  // when all others fail, return this...
    
    
    }
    
    
    // ===================================================================                          
    // ===================================================================
    Επιλέγεις με πάνω-κάτω το γράμμα που φαίνεται στην πάνω γραμμή και με το select μπαίνει στη σειρά για το όνομα που θες να γράψεις στην κάτω γραμμή. Με το δεξιά
    σβήνει τα πάντα και μένει μόνο με το αριστερά να αποθηκεύεται στη μνήμη. Τα κουμπιά είναι όλα σε αναλογική είσοδο.




    Φίλε μου δοκίμασα αυτό που έστειλες. Κάνει αυτό ακριβώς που κάνω κι εγώ απλά με πιο σωστό τρόπο υποθέτω. Το θέμα μου είναι να αποθηκεύσω τη λέξη που θα σχηματιστεί και αυτό δεν υπάρχει στον κώδικα που μου έστειλες! Μπορείς να με βοηθήσεις??? Μου άφησες κένο το θέμα με την αποθήκευση και θα ήθελα μια βοήθεια. Θέλω να αποθηκεύται στην EEPROM και να μπορώ αργότερα να τη διαβάζω τη λέξη που αποθήκευσα. Αν μπορείς να με βοηθήσεις εσύ ή κάποιος άλλος θα χαρώ πολύ! Ευχαριστώ για το ενδιαφέρων παιδιά απλά δε ξέρω γνωρίζω πολλά και θα 'θελα παραδείγματα σχετικά με αυτό. Σας ευχαριστώ!

    0 Not allowed! Not allowed!

  14. #10
    Μέλος Το avatar του χρήστη SeAfasia
    Όνομα
    SV3IRG Dinos
    Εγγραφή
    Sep 2012
    Περιοχή
    Άργος.
    Μηνύματα
    3.363

    Προεπιλογή

    το EEPROMex.h (header file) το έχεις κάνει add στο UI του arduino;
    https://www.arduino.cc/en/Tutorial/LibraryExamples

    0 Not allowed! Not allowed!

Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία

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

  1. Απαντήσεις: 5
    Τελευταίο Μήνυμα: 22-05-13, 22:23
  2. Βοήθεια με προγραμματισμό συναγερμου xl-2s
    By petris007 in forum Συστήματα Ασφαλείας
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 06-11-12, 10:54
  3. Απαντήσεις: 21
    Τελευταίο Μήνυμα: 30-08-10, 23:06
  4. Βοήθεια στον προγραμματισμό του PIC18F4550..
    By kostas214 in forum Μικροελεγκτές
    Απαντήσεις: 7
    Τελευταίο Μήνυμα: 17-08-10, 22:32
  5. Βοήθεια για προγραμματισμό AVR
    By airport in forum Ερωτήσεις Αρχάριων
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 03-06-08, 14:47

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

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