NIKOsVAIO Δημοσ. 31 Μαΐου 2018 Δημοσ. 31 Μαΐου 2018 Καλησπέρα σε όλους. Πριν μπω στο ψητό, να πω ότι είμαι τέρμα noob και παλεύω τώρα να κάνω αυτό που θα περιγράψω χωρίς γνώσεις κώδικα. Το λοιπόν. Έχω ένα Arduino Uno στο οποίο έχω πάνω ένα Sonar (HC-SR04). Αυτό που πρέπει να κάνω είναι να συνδέσω την processing με το Arduino ώστε να διαβάζει από το serial port του την τιμή σε centimeters (cm), και όταν κάποιος πλησιάσει το Sonar σε μια απόσταση που θα έχω ορίσει, να αρχίσει να παίζει ένα βίντεο που βρίσκεται στο pc μου. Αυτά που έχω καταφέρει μέχρι τώρα είναι τα εξής. 1) Το Sketch του Arduino που τρέχει το Sonar δείχνει οκ. Τρέχει κανονικά και μου δίνει τιμές ανάλογα με την απόσταση που κάτι βρίσκεται κοντά στο Sonar. 2) Κατέβασα μια library με codecs για την processing, και το sketch που ανοίγει μέσα στην processing έναν player και τρέχει το video από το path που θέλω τρέχει κανονικά. 3) Έχω ακόμα ένα sketch με το οποίο κατάφερα να βλέπω στο console της processing τις τιμές του serial port που δίνει το Arduino. Οπότε, θεωρητικά, αυτό που μου μένει είναι μπορέσω να πω στην processing να τρέξει το sketch με το video player όταν θα παίρνει τιμές από το Arduino μικρότερες των 100cm ας πούμε. Δηλαδή, όταν κάποιος πλησιάσει το sonar σε απόσταση ενός μέτρου, να αρχίσει να παίζει το video. Υπάρχει κάποιος να μου δώσει τα φώτα του ή να μου πει αν βλέπει κάτι λάθος στη λογική μου; Ευχαριστώ εκ των προτέρων για τον χρόνο σας.
Fortistis Δημοσ. 31 Μαΐου 2018 Δημοσ. 31 Μαΐου 2018 Γιατί εμένα μου ακούγεται σαν εργασία μαθήματος; Φάση, διαδραστικό project;
NIKOsVAIO Δημοσ. 31 Μαΐου 2018 Μέλος Δημοσ. 31 Μαΐου 2018 Μόλις τώρα, Fortistis είπε Γιατί εμένα μου ακούγεται σαν εργασία μαθήματος; Φάση, διαδραστικό project; Ακριβώς αυτό είναι.
Fortistis Δημοσ. 31 Μαΐου 2018 Δημοσ. 31 Μαΐου 2018 Δηλαδή, να έχεις σκάσει λεφτά να πάρειςArduino, το shield και τα καλώδια χωρίς να το έχεις ψάξει καθόλου και να έχεις ακριβώς αυτή την ιδέα; Έτσι; Σόρρυ μπρο. Θα ήταν πιο έντιμο από μέρους σου να πεις: "Έχω μία εργασία, ποιος ψήνεται να μου την κάνει;" 1 λεπτό πριν, NIKOsVAIO είπε Ακριβώς αυτό είναι. Δηλαδή, έχεις δει ότι τρώνε ψιλο-κράξιμο όσοι ζητάνε έτοιμες λύσεις και είπες να το αποκρύψεις. Τι να πω...; Καλή τύχη.
NIKOsVAIO Δημοσ. 31 Μαΐου 2018 Μέλος Δημοσ. 31 Μαΐου 2018 (επεξεργασμένο) 14 λεπτά πριν, Fortistis είπε Δηλαδή, να έχεις σκάσει λεφτά να πάρειςArduino, το shield και τα καλώδια χωρίς να το έχεις ψάξει καθόλου και να έχεις ακριβώς αυτή την ιδέα; Έτσι; Σόρρυ μπρο. Θα ήταν πιο έντιμο από μέρους σου να πεις: "Έχω μία εργασία, ποιος ψήνεται να μου την κάνει;" Δηλαδή, έχεις δει ότι τρώνε ψιλο-κράξιμο όσοι ζητάνε έτοιμες λύσεις και είπες να το αποκρύψεις. Τι να πω...; Καλή τύχη. Δεν είναι καθόλου έτσι. Δε ζήτησα σε κάποιον να μου κάνει κάτι έτοιμο. Αν είναι δυνατόν. Ο εξοπλισμός που χρησιμοποιώ παρέχεται από τη σχολή μου και η ιδέα αυτή βασίζεται σε προτροπή του καθηγητή μου. Γνωρίζει ότι δεν ξέρουμε κώδικα και προσπαθούμε να φέρουμε εις πέρας το project ψάχνοντας και μαθαίνοντας. Δεν είπα σε κανέναν να μου δώσει κάτι έτοιμο. Έχω δουλέψει όπως έγραψα στο να κάνω το arduino να τρέχει, να βρω τρόπο επικοινωνίας με την processing και να παίξω το video. Ζητώ τη βοήθεια όποιου είναι πρόθυμου να του δείξω τα scripts και να με βοηθήσει να καταλάβω αν η λογική που ακολουθώ είναι σωστή ώστε συνεργαστούν όλα αυτά. Δεν είμαι πληροφορική, ούτε είδα περί κραξίματος όπως λες. Πρώτη φορά μπαίνω σε αυτό το section του forum. Δε νομίζω ότι γράφω πουθενά να μου δώσει κανείς μια έτοιμη λύση. Δεν έχω ποστάρει καν τα scripts, πως θα γίνει αυτό; Δε γνωρίζω κώδικα και προσπαθώ να μάθω ο,τι μπορώ για να βγει αυτή η δουλειά. Βοήθεια ζήτησα. Επεξ/σία 31 Μαΐου 2018 από NIKOsVAIO 1
tsofras Δημοσ. 31 Μαΐου 2018 Δημοσ. 31 Μαΐου 2018 (επεξεργασμένο) 4 ώρες πριν, Fortistis είπε Δηλαδή, να έχεις σκάσει λεφτά να πάρειςArduino, το shield και τα καλώδια χωρίς να το έχεις ψάξει καθόλου και να έχεις ακριβώς αυτή την ιδέα; Έτσι; Σόρρυ μπρο. Θα ήταν πιο έντιμο από μέρους σου να πεις: "Έχω μία εργασία, ποιος ψήνεται να μου την κάνει;" Δηλαδή, έχεις δει ότι τρώνε ψιλο-κράξιμο όσοι ζητάνε έτοιμες λύσεις και είπες να το αποκρύψεις. Τι να πω...; Καλή τύχη. Γιατί πήρες από τα μούτρα τον φίλο? Κράξιμο τρώνε αυτοί που γράφουν την εκφώνηση και ζητάνε την λύση χωρίς καμία προσπάθεια. Ο φίλος έγραψε αναλυτικά τι έχει κάνει , τι του έχει μείνει και η ερώτηση ήταν αν το πάει σωστά , δεν ζήτησε τπτ έτοιμο. Μην τους βάζουμε όλους στο ίδιο καλάθι. Λόγω devoxx θα τρέχω 2 μέρες , βάλε εδώ τον κώδικα να ρίξουμε μια ματιά Επεξ/σία 31 Μαΐου 2018 από tsofras 1
NIKOsVAIO Δημοσ. 31 Μαΐου 2018 Μέλος Δημοσ. 31 Μαΐου 2018 (επεξεργασμένο) 47 λεπτά πριν, tsofras είπε Γιατί πήρες από τα μούτρα τον φίλο? Κράξιμο τρώνε αυτοί που γράφουν την εκφώνηση και ζητάνε την λύση χωρίς καμία προσπάθεια. Ο φίλος έγραψε αναλυτικά τι έχει κάνει , τι του έχει μείνει και η ερώτηση ήταν αν το πάει σωστά , δεν ζήτησε τπτ έτοιμο. Μην τους βάζουμε όλους στο ίδιο καλάθι Σας παραθέτω αυτό που έχω αυτή τη στιγμή, για όποιον μπορεί να με βοηθήσει. Arduino Sketch για τον συγκεκριμένο αισθητήρα και την αποστολή δεδομένων στο serial port. #include <NewPing.h> #define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor. #define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor. #define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm. NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. void setup() { Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results. } void loop() { delay(500); // Wait 500ms between pings (about 2 pings/sec). 29ms should be the shortest delay between pings. unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS). Serial.print("Ping: "); Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance and print result (0 = outside set distance range, no ping echo) Serial.println("cm"); } Και το script της processing, το οποίο παίρνει τις τιμές από το port του Arduino και προσπαθώ να το κάνω να παίξει με τον video player που φόρτωσα στην processing το video από το path στο pc μου, όταν λάβει από το port του Arduino μία τιμή μικρότερη του 100. Το πρόβλημα που αντιμετωπίζω αυτή τη στιγμή είναι ότι η τιμή που παίρνει το script είναι η τιμή που δηλώνω πάνω πάνω (val = 1000). Οπότε, για οποιαδήποτε τιμή βάζω από 0-100 στο val, αν πατήσω run, παίζει το βίντεο. Για οποιαδήποτε τιμή από 101 και πάνω δεν το παίζει. Εγώ θέλω να συμβαίνει ακριβώς αυτό, αλλά να μην παίρνει την τιμή που βάζω στο val. Να παίρνει όποια τιμή έχει το serial port του Arduino και να το κάνει αυτό. Όπως είπα δε ξέρω κώδικα και το παλεύω κομμάτι κομμάτι με google, tutorials και από forums για τέτοια πρότζεκτ κλπ. Αν κάποιος έχει να σχολιάσει, να προτείνει / διορθώσει κάτι για να πετύχω αυτό που περιγράφω, είμαι όλος αφτιά. Ευχαριστώ και πάλι για όποιον ασχοληθεί. import processing.serial.*; import processing.video.*; Serial myPort; // Create object from Serial class int val = 1000; // Data received from the serial port String PATH = "D:\\nikos\\NIKOS\\VIDEOS\\Inside.Man.2006.1080p.BluRay.x264.anoXmous_.mp4"; Movie mov; void setup() { size(1920, 816); frameRate(23.98); mov = new Movie(this, "PATH"); mov.speed(1); mov.volume(30); String COM1 = Serial.list()[0]; //change the 0 to a 1 or 2 etc. to match your port myPort = new Serial(this, COM1, 115200); } void movieEvent(Movie m) { m.read(); } void draw() { if ( myPort.available() > 0) { // If data is available, try { val = Integer.parseInt(myPort.readStringUntil('\n')); } catch (Exception ex) { // decide what to do if input wasn't a number. } println(val); } if (val <= 100) { //If the sensor detect object at less 100cm mov.play(); }else{ mov.pause(); } image(mov, 0, 0, width, height); } Επεξ/σία 31 Μαΐου 2018 από NIKOsVAIO
tsofras Δημοσ. 31 Μαΐου 2018 Δημοσ. 31 Μαΐου 2018 Οπότε θέλεις το val του sketch 2 να ισούται με το us του sketch 1 , σωστά? Προσπάθησε να κάνεις merge τα 2 sketches και εδώ είμαστε
NIKOsVAIO Δημοσ. 1 Ιουνίου 2018 Μέλος Δημοσ. 1 Ιουνίου 2018 2 λεπτά πριν, tsofras είπε Οπότε θέλεις το val του sketch 2 να ισούται με το us του sketch 1 , σωστά? Προσπάθησε να κάνεις merge τα 2 sketches και εδώ είμαστε Θεωρητικά ναι. Θέλω οι τιμές του Arduino να περνάνε στην processing. Αλλά τι εννοείς να τα κάνω merge? To 1o sketch του Arduino τρέχει ακριβώς όπως το βλέπεις και δίνει τιμές στο serial port. Όσο συμβαίνει αυτό λοιπόν, η processing θέλω να βλέπει το serial port του Arduino και να παίρνει την τιμή του. Έχω καταφέρει αυτή την επικοινωνία που περιγράφω. Δηλαδή, το sketch της processing βλέπει ότι το Arduino τρέχει και αναλόγως με το val παίζει ή όχι το βίντεο. Αν π.χ τραβήξω το Arduino από το pc, το sketch της processing δεν τρέχει. Εκεί που έχω σκαλώσει είναι να καταλάβει η processing την τιμή του Serial port του Arduino. Απ' ο,τι έχω καταλάβει με το ψάξιμο, το πρόβλημα είναι με το integer και το string κάπου. Δηλαδή δε μπορεί να πάρει σαν τιμή ακεραίου αυτά που βγαίνουν από το Arduino νομίζω, και τα βλέπει σαν strings. Φυσικά, όλα αυτά που σου λέω είναι με κάθε επιφύλαξη. Δε θέλω να σε μπερδέψω. Δε ξέρω αν καν βγάζω νόημα αυτή τη στιγμή. Το έχω κάψει λίγο...
tolhc1234 Δημοσ. 10 Ιουνίου 2018 Δημοσ. 10 Ιουνίου 2018 (επεξεργασμένο) Στο loop του Arduino κάνεις το παρακάτω Serial.print("Ping: "); Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance and print result (0 = outside set distance range, no ping echo) Serial.println("cm"); Όμως στο draw της processing try { val = Integer.parseInt(myPort.readStringUntil('\n')); Απ' ότι καταλαβαίνω η τιμή που θα έρθει στην processing είναι "Ping: 50cm" (π.χ. για uS / US_ROUNDTRIP_CM=50) Αυτό προφανώς δεν γίνεται parse σε integer Δοκίμασε απ΄ τον Arduino να στέλνεις μόνο το Serial.print(uS / US_ROUNDTRIP_CM); 2 4 σημειώσεις: 1. Δεν ξέρω αν είναι καλό το parseInt, ίσως να θες να δοκιμάσεις με float ή double (δεν θυμάμαι τι types έχει η processing) σε περίπτωση που έχεις δεκαδικά. 2. Στο sketch της processing έχεις αυτό readStringUntil('\n') , αλλά ο arduino δεν στέλνει ποτέ \n, οπότε ίσως θα πρέπει να κάνεις και ένα serial.prin("\n") μετά από κάθε print της τιμής που έχεις. 3. Το US_ROUNDTRIP_CM δεν βλέπω να το κάνεις κάπου define. Είναι στο NewPing.h? 4. Γενικά δες πρώτα απ' το serial του Arduino IDE τι τιμές σου βγάζει στα print. Ότι βλέπεις εκεί, αυτό διαβάζεις και στην processing Επεξ/σία 10 Ιουνίου 2018 από tolhc1234 extra σημειώσεις
NIKOsVAIO Δημοσ. 19 Ιουνίου 2018 Μέλος Δημοσ. 19 Ιουνίου 2018 Στις 10/6/2018 στις 4:30 ΜΜ, tolhc1234 είπε Στο loop του Arduino κάνεις το παρακάτω Serial.print("Ping: "); Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance and print result (0 = outside set distance range, no ping echo) Serial.println("cm"); Όμως στο draw της processing try { val = Integer.parseInt(myPort.readStringUntil('\n')); Απ' ότι καταλαβαίνω η τιμή που θα έρθει στην processing είναι "Ping: 50cm" (π.χ. για uS / US_ROUNDTRIP_CM=50) Αυτό προφανώς δεν γίνεται parse σε integer Δοκίμασε απ΄ τον Arduino να στέλνεις μόνο το Serial.print(uS / US_ROUNDTRIP_CM); 2 4 σημειώσεις: 1. Δεν ξέρω αν είναι καλό το parseInt, ίσως να θες να δοκιμάσεις με float ή double (δεν θυμάμαι τι types έχει η processing) σε περίπτωση που έχεις δεκαδικά. 2. Στο sketch της processing έχεις αυτό readStringUntil('\n') , αλλά ο arduino δεν στέλνει ποτέ \n, οπότε ίσως θα πρέπει να κάνεις και ένα serial.prin("\n") μετά από κάθε print της τιμής που έχεις. 3. Το US_ROUNDTRIP_CM δεν βλέπω να το κάνεις κάπου define. Είναι στο NewPing.h? 4. Γενικά δες πρώτα απ' το serial του Arduino IDE τι τιμές σου βγάζει στα print. Ότι βλέπεις εκεί, αυτό διαβάζεις και στην processing Φίλε μου σ'ευχαριστώ για τη βοήθεια. Το κατάφερα το πρότζεκτ, και το έχω ήδη ολοκληρώσει. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα