Δευτέρα 21 Σεπτεμβρίου 2020

Αναθεώρηση 55 'Εκδοση 9.9

 Έγιναν μικρές διορθώσεις, και προστέθηκαν:

3 συναρτήσεις στους αυτόματους πίνακες (tuple)

2 αντικείμενα: ShellPipe και SerialPort.

Το ShellPipe χρησιμεύει για να εκκινήσουμε μια εφαρμογή των windows σε κονσόλα, χωρίς να φαίνεται η κονσόλα και με την εξαγωγή να την παίρνουμε στο πρόγραμμά μας (Μ2000) και από αυτό να μπορούμε να στέλνουμε επίσης οδηγίες. Υπάρχουν στο info τρία παραδείγματα:

Handler - χωρίς τη χρήση του ShellPipe αλλά με τη χρήση του WScript.Shell αντικειμένου και την μέθοδο Exec, ανοίγουμε το cmd.exe και επειδή με αυτό το τρόπο εμφανίζεται η κονσόλα με το cmd.exe (χωρίς όμως να δείχνει κάτι, επειδή ό,τι έχει μας το δίνει στο πρόγραμμα), χρησιμοποιούμε δυο συναρτήσεις του API Win32 για να πιάσουμε το παράθυρο και να το ελαχιστοποιήσουμε στην γραμμή εργασιών. (αυτό τρέχει και σε παλαιότερες εκδόσεις).

Handler2 -  με χρήση του ShellPipe. Τώρα η εφαρμογή cmd.exe δεν φαίνεται στη γραμμή εργασιών, δεν ανοίγει καν το παράθυρο. Όλος ο χειρισμός γίνεται εσωτερικά. Χρησιμοποιούμε και γεγονός για να τραβάμε τα στοιχεία "εξόδου".

Chessgame - με χρήση του ShellPipe (το είχα φτιάξει και με το πρώτο τρόπο αλλά δεν μου άρεσε που φαίνονταν για μερικά χιλιοστά του δευτερολέπτου η κονσόλα της καλούμενης εφαρμογής). Εδώ καλούμε μια μηχανή σκακιού. Η μηχανή μπορεί να κατέβει από εδώ https://stockfishchess.org/

Χρησιμοποίηση τη stockfish 12, για λιγότερο από δευτερόλεπτο, και παίζει πάρα πολύ καλά (παίζει με τα μαύρα). Το ωραίο με το chessgame είναι ότι μπορούμε να πάμε όσες κινήσεις θέλουμε πίσω. Επειδή λειτουργεί εσωτερικά με σειρές FEN,ήταν πολύ εύκολο να συνδέσω την μηχανή για σκάκι. Τις κινήσεις στη σκακιέρα τις ελέγχει το πρόγραμμα σε Μ2000. Όταν είναι να παίξει ο μαύρος, τότε στέλνει την σειρά FEN στη μηχανή και με αίτημα για μερικές εκατοντάδες χιλιοστά του δευτερολέπτου, γυρνάει την απάντηση. Επειδή τις κινήσεις τις γράφει στη φόρμα, αν δεν δούμε τη κίνηση του μαύρου, τη διαβάζουμε από κάτω. Όταν πηγαίνουμε κινήσεις πίσω τότε όταν θα έρθει η σειρά του μαύρου θα παίξει η μηχανή.
Δεν έχω καταφέρει να νικήσω την μηχανή...(είναι πολύ καλή). Αν ο υπολογιστής είναι αργός ενδέχεται να χάσει η μηχανή, γιατί για ίσο χρόνο ο αργός θα δώσει χειρότερη απάντηση.


Το SerialPort, είναι αντικείμενο για να χειριζόμαστε με απλό τρόπο σειριακές πόρτες. Σκοπός του αντικειμένου είναι να συνδέουμε μια πλακέτα με Arduino. Το έχω δοκιμάσει και δουλεύει τόσο για να διαβάζει όσο και για να γράφει (τα κάνει και τα δύο μαζί). Το Arduino στέλνει δεδομένα σε UTF8, οπότε στο πρόγραμμα Arduino δείχνω πως διαβάζω από τη σειριακή, πως βρίσκω την αλλαγή γραμμής, πως χωρίζω το 'πακέτο" που διάβασα βάσει της αλλαγής γραμμής. Εδώ επειδή έχουμε UTF8, οι χαρακτήρες κάτω από 128 είναι του ενός byte.

Χρησιμοποιήθηκε το παρακάτω σε ένα Arduino NodeMCU 0.9 (ESP-12 Module).

int incomingByte = 0; // for incoming serial data

void setup() {
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {
  // send data only when you receive data:
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();

    // say what you got:
    Serial.print("I received: ");
    Serial.println(incomingByte, DEC);
  }
  // δοκιμή και χωρίς τη γραμμή παρακάτω
  Serial.println("Wait Γιώργο....");
}




Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.