• ARDUINO - ΚΟΝΣΟΛΑ ΕΝΤΟΛΩΝ ΜΕΣΩ ΣΕΙΡΙΑΚΗΣ ΘΥΡΑΣ

ARDUINO - ΚΟΝΣΟΛΑ ΕΝΤΟΛΩΝ ΜΕΣΩ ΣΕΙΡΙΑΚΗΣ ΘΥΡΑΣ

Σε αυτό το άρθρο θα περιγράψουμε μια μέθοδο για να δημιουργήσετε δικό σας μενού εντολών μέσα από τη σειριακή θύρα του Arduino.


Με αυτό τον τρόπο μπορείτε να δημιουργήσετε το δικό σας σετ λειτουργιών για την κατασκευή σας κατασκευάζοντας ένα σετ εντολών που δέχεται μέχρι και 9 παραμέτρους. Η κάθε λειτουργία σας θα πρέπει να έχει τη μορφή


ονομα_λειτουργίας παράμετρος_1 παράμετρος_2 ... παράμετρος_9


  • Το όνομα κάθε λειτουργίας δεν θα πρέπει να έχει κενά. Το μέγιστο μήκος του ονόματος πρέπει να είναι 31 χαρακτήρες.
  • Οι παράμετροι της λειτουργίας χωρίζονται με κενά.
  • Το τέλος της λειτουργίας δηλώνεται με το χαρακτήρα αλλαγής γραμμής (\n) ή επιστροφής (\r).
Παρακάτω παραθέτουμε ένα πρόγραμμα σκελετό γενικής χρήσης για να φτιάξετε το δικό σας σετ λειτουργιών στην εφαρμογή σας


Οι ρουτίνες που κάνουν τη δουλειά είναι οι serialEvent(), processCharInput() και parseReply()


#include <Arduino.h>

/*
 * Παράμετροι σειριακής θύρας
 */
#define SERIAL_SPEED 115200
#define CMDBUFFER_SIZE 32
String command;

/**
 * Αρχικές συνθήκες εφαρμογής
 */
void setup() {
  Serial.begin(SERIAL_SPEED);
  ... οι δικές σας αρχικές συνθήκες
}

/**
 * Κεντρική ρουτίνα λειτουργίας
 */
void loop() {
  serialEvent();
  ... ο δικός σας κώδικας
  delay(100);
}

/**
 * Επεξεργασία γεγονότων σειριακής θύρας.
 * Αναλύουμε την εντολή με τις παραμέτρους της σε ένα πίνακα. 
 * Μέγιστος αριθμός παραμέτρων 9
 */
void serialEvent() {
  static char cmdBuffer[CMDBUFFER_SIZE] = "";
  char c;
  while (Serial.available()) {
    c = processCharInput(cmdBuffer, Serial.read());
  
    if (c == '\n' | c == '\r') {
      /* 
      */
      char *array[10];
      int size = 0;
      array[size] = strtok(cmdBuffer, " ");
      while (array[size] != NULL) {
        array[++size] = strtok(NULL, " ");
      }

      parseReply(array, size);
      // καθάρισμα μνήμης
      cmdBuffer[0] = 0;
    }
  }
  delay(1);
}

/**
 * Λήψη της εντολής από τη σειριακή θύρα
 */
char processCharInput(char *cmdBuffer, const char c) {
  //Αγνοούμε τους ειδικούς χαρακτήρες και τους χαρακτήρες ελέγχου - δεν επιτρέπονται
  if (c >= 32 && c <= 126) {
    if (strlen(cmdBuffer) < CMDBUFFER_SIZE) {
      strncat(cmdBuffer, &c, 1);  //Προσθήκη στην προσωρινή μνήμη
    } else {
      return '\n';
    }
  } else if ((c == 8 || c == 127) && cmdBuffer[0] != 0) {
    //Backspace
    cmdBuffer[strlen(cmdBuffer) - 1] = 0;
  }
  return c;
}

/**
 * Επεξεργασία της εντολής που δόθηκε
 * παραμετρος1: οι χαρακτήρες που πήραμε από τη σειριακή
 * παράμετρος2: ο αριθμός των παραμέτρων της εντολής που αναζητούμε
 */
void parseReply(char *array[], int size) {

  // Μενού βοήθειας
  if ((strcmp("help", array[0]) == 0) & (size == 1)) {
    showHelp();
  }

  // Λειτουργία 1
  if ((strcmp("command1", array[0]) == 0)) {
    int param1 = atoi(array[1]);
    myFunction(param1);
    ...
  }

  // Λειτουργία 2
  if ((strcmp("command2", array[0]) == 0)) {
    int param1 = atoi(array[1]);
    int param2 = atoi(array[2]);
    ...
  }

  ...

}

ARDUINO - ΚΟΝΣΟΛΑ ΕΝΤΟΛΩΝ ΜΕΣΩ ΣΕΙΡΙΑΚΗΣ ΘΥΡΑΣ

  • Κωδικός Προϊόντος: ARDU0001
  • Άμεσα διαθέσιμα: 1 τεμ.
  • Διαθέσιμα με παραγγελία 0 τεμ. σε 10 ημέρες
  • Νέα παραλαβή στις: 0

Ετικέτες: arduino, ΚΟΝΣΟΛΑ, ΕΝΤΟΛΩΝ, ΜΕΣΩ, ΣΕΙΡΙΑΚΗΣ, ΘΥΡΑΣ