anastasios59 Δημοσ. 5 Αυγούστου 2018 Δημοσ. 5 Αυγούστου 2018 (επεξεργασμένο) Εργάζομαι σε Λύκειο, είμαι φυσικός και ασχολήθηκα το φετινό καλοκαίρι, για πρώτη φορά, με το Arduino. Έχω ετοιμάσει ορισμένα projects για τους μαθητές σχετικά με το Arduino παρότι οι γνώσεις μου στον προγραμματισμό είναι περιορισμένες. Ανάμεσα στα projects που έχω επιλέξει είναι και το παρακάτω, που βρήκα σε μια εφαρμογή που κατέβασα από το κινητό και αφορά γράφημα. Όμως έχω ένα θέμα και ελπίζω να με βοηθήσετε να το ξεπεράσω. Συνδέω το Arduino uno με τον υπολογιστή. Ανοίγω το Processing 3.3.7 και φορτώνω τον κώδικα. Όμως έχω θέματα σφαλμάτων που φαίνονται στα συνημμένα "σφάλματα¨και "κονσόλα". Ο κώδικας και το κύκλωμα φαίνονται στα συνημμένα "code" και "circuit" αντίστοιχα. Όταν κάνω copy-paste του κώδικα από το word (όπου είναι γραμμένος) στο Processing κάνω Ctrl+T (μου το ζητάει για να ισιώσει τον πρώτο καμπύλο χαρακτήρα στο ('\n'). Σας ευχαριστώ. κονσόλα.docx σφάλματα.docx circuit.docx code.docx Επεξ/σία 5 Αυγούστου 2018 από anastasios59
Predatorkill Δημοσ. 5 Αυγούστου 2018 Δημοσ. 5 Αυγούστου 2018 (επεξεργασμένο) Κατεβασε το notepad++ και γραφε εκει τον κωδικα, ή χρησιμοποιησε το ide που σου δινει το arduino. To word βαζει σκουπιδια στο copy-paste. https://www.arduino.cc/en/Main/Software https://notepad-plus-plus.org/download/v7.5.8.html Επεξ/σία 5 Αυγούστου 2018 από Predatorkill
anastasios59 Δημοσ. 6 Αυγούστου 2018 Μέλος Δημοσ. 6 Αυγούστου 2018 Ευχαριστώ πολύ που μου απαντήσατε. Έγραψα τον κώδικα στο Processing και όταν τον έτρεξα μου έβγαλε τα προβλήματα όπως φαίνονται στα συνημμένα. Αν μπορείτε πείτε μου αυτό που πρέπει να διορθώσω στον κώδικα. κονσόλα 2.docx σφάλματα 2.docx
Moderators Kercyn Δημοσ. 6 Αυγούστου 2018 Moderators Δημοσ. 6 Αυγούστου 2018 Βάλε τον κώδικά σου σε code tags εδώ στο φόρουμ, είναι πολύ πιο εύκολα προσβάσιμος έτσι και αυξάνεις τις πιθανότητες να σε βοηθήσει κάποιος.
Predatorkill Δημοσ. 6 Αυγούστου 2018 Δημοσ. 6 Αυγούστου 2018 (επεξεργασμένο) Το float ειναι αριθμος με υποδιαστολη, εσυ του περνας ακεραιο γι αυτο βγαζει το σφαλμα. Εχω πολλα χρονια να γραψω arduino αλλα δε νομιζω να κανω λαθος. Δες εδω πως χρησιμοποιεται η map: https://www.arduino.cc/reference/en/language/functions/math/map/ (Τα docs τους λενε οτι θελει ακεραιο οποτε συμβαινει το αναποδο απο αυτο που εγραψα πιο πανω, του δινεις float ενω θελει ακεραιο. Διαβασε το και λογικα θα βγαλεις ακρη) Αναφορά σε κείμενο The map() function uses integer math Επεξ/σία 6 Αυγούστου 2018 από Predatorkill
anastasios59 Δημοσ. 6 Αυγούστου 2018 Μέλος Δημοσ. 6 Αυγούστου 2018 (επεξεργασμένο) /*Processing code for this example //Graphing sketch //This program takes ASCII-encoded strings //from the serial port at 9600 baud and graphs them. It expects values in the //range 0 to 1023, followed by a newline, or newline and carriage return. //Created 20 Apr 2005 //Updated 18 Jan 2008 //by Tom Igoe //This example code is in the public domain. */ import processing.serial.*; Serial myPort; //The serial port int xPos = 1; //horizontal position of the graph void setup () { //set the window size: size(400, 300); //List all the available serial ports //if using Processing 2.1 or later, use Serial.printArray() println(Serial.list()); //I know that the first port in the serial list on my mac //is always my Arduino, so I open Serial.list()[0]. //Open whatever port is the one you’re using. myPort=new Serial(this, Serial.list() [0], 9600); //don’t denerate a serialEvent() unless you get a newline character: myPort.bufferUntil('\n'); //set initial background: background(0); } void draw () { //everything happens in the serialEvent() } void serialEvent (Serial myPort) { //get the ASCII string: String inString=myPort.readStringUntil ('\n'); if (inString !=null) { //trim off any whitespace: inString=trim(inString); //convert to an int and map to the screen height: float inByte=float(inString); inByte=map (inByte, 0, 1023, 0, height); //draw the line: stroke(127,34,255); line(xPos, height, xPos, height – inByte); //at the edge of the screen, go back to the beginning: if (xPos>=width){ xPos =0; background(0); } else { //increment the horizontal position: xPos++; } } } Ευχαριστώ για το ενδιαφέρον σας Οι γνώσεις μου στον προγραμματισμό είναι περιορισμένες, όπως σας έχω προαναφέρει. Θα ήθελα κάποιος, αν μπορεί, να ελέγξει τον κώδικα , που αφορά γραφική παράσταση τιμών ενός ποτενσιόμετρου. Το κύκλωμα είναι συνημμένο στο πρώτο κείμενο που ανάρτησα. Τα σφάλματα που μου δείχνει τo Processing φαίνονται στα αρχεία "κονσόλα 2" και "σφάλματα 2", που ΄βρίσκονται στο δεύτερο κείμενο που ανάρτησα. Όλα αυτά γίνονται γιατί θεωρώ το συγκεκριμένο project χρήσιμο να το παρουσιάσω, υπό μορφή επίδειξης, στους μαθητές μου, σαν ένα έναυσμα για πιο απαιτητικό προγραμματισμό. Θα ήθελα συγκεκριμένες παρεμβάσεις, αν αυτό είναι εφικτό, στον κώδικα και όχι γενικές γιατί σε αυτό το επίπεδο προγραμματισμού δυσκολεύομαι πολύ. import processing.serial.*; Serial myPort; //The serial port int xPos = 1; //horizontal position of the graph void setup(){ //set the window size: size(400,300); //List all the available serial ports //if using Processing 2.1 or later, use Serial.printArray() println(Serial.list()); //I know that the first port in the serial list on my mac //is always my Arduino, so I open Serial.list()[0]. //Open whatever port is the one you're using. myPort=new Serial(this, Serial.list() [0], 9600); //don't denerate a serialEvent() unless you get a newline character: myPort.bufferUntil('\n'); //set initial background background(0); } void draw(){ //everything happens in the serialEvent() } void serialEvent (Serial myPort){ //get the ASCII string: String inString=myPort.readStringUntil('\n'); if(inString !=null){ //trim off any whitespace: inString=trim(inString); //convert to an int and map to the screen height: float inByte=float(inString); inByte = map(inByte, 0, 1023, height); //draw the line: stroke(127,34,255); line(xPos, height, xPos, height-inByte); //at the edge of the screen, go back to the beginning: if(xPos>=width){ xPos=0; background(0); } else{ //increment the horizontal position: xPos++; } } } Επεξ/σία 7 Αυγούστου 2018 από anastasios59 Νομίζω ότι έβαλα τον κώδικα σε code tags. Τέλος στην κονσόλα γράφει: the method map(float,float,float,float) in the type PApplet is not applicable for the arguments (float,int.int,int)
Fortistis Δημοσ. 6 Αυγούστου 2018 Δημοσ. 6 Αυγούστου 2018 (επεξεργασμένο) Κάνε edit το μήνυμά σου και βάλε τον κώδικα σε code tags. Στην console σου γράφει το μήνυμα λάθους. Κάνε copy/paste το ακριβές μήνυμα λάθους που παίρνεις. Επεξ/σία 6 Αυγούστου 2018 από Fortistis
anastasios59 Δημοσ. 7 Αυγούστου 2018 Μέλος Δημοσ. 7 Αυγούστου 2018 Επανέρχομαι παραθέτοντας πάλι τον κώδικα όπως μου ζητήσατε. Ξαναπληκτρολόγησα τον κώδικα στο Processing.Στην κονσόλα του Processing τώρα εμφανίζεται η ένδειξη COM1 COM3. Από το περιβάλλον IDE γνωρίζω ότι το Arduino είναι συνδεδεμένο στη θύρα COM3. Μήπως πρέπει να γίνει κάποια αντίστοιχη ρύθμιση στο Processing; Αν ναι πως πρέπει να ενταχθεί στον κώδικα; Αν μπορείτε να είστε συγκεκριμένοι γιατί με τις γνώσεις που έχω δεν μπορώ να παρακολουθήσω σε αυτό το επίπεδο τον προγραμματισμό. import processing.serial.*; Serial myPort; int xPos=1; void setup() { size(400,300); println(Serial.list()); myPort=new Serial(this, Serial.list()[0],9600); myPort.bufferUntil('\n'); background(0); } void draw() {} void serialEvent (Serial myPort) { String inString = myPort.readStringUntil('\n'); if(inString!=null){ inString=trim(inString); float inByte=float(inString); inByte=map(inByte,0,1023,0,height); stroke(127,34,255); line(xPos,height,xPos,height-inByte); if(xPos>=width){ xPos=0; background(0); } else { xPos++; } } }
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα