Προς το περιεχόμενο

Ports και c++


papalive

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα.

 

Ξέρει κανείς πως θα μπορέσω να επικοινωνήσω με τις θύρες του υπολογιστή ώστε π.χ να ανάβω μια λάμπα????? Τι συσκευή θα χρειαστώ για την συνδεση με την λάμπα??

 

Το θέμα μου έχει να κάνει με το "Εξυπνο Σπίτι".

 

Θα ήθελα και βοηθεια με δυο τρία λόγια για την επικοινωνία σε c++ με τα ports η με το wifi.

Δημοσ.
Καλησπέρα.

 

Ξέρει κανείς πως θα μπορέσω να επικοινωνήσω με τις θύρες του υπολογιστή ώστε π.χ να ανάβω μια λάμπα????? Τι συσκευή θα χρειαστώ για την συνδεση με την λάμπα??

 

Το θέμα μου έχει να κάνει με το "Εξυπνο Σπίτι".

 

Θα ήθελα και βοηθεια με δυο τρία λόγια για την επικοινωνία σε c++ με τα ports η με το wifi.

 

Φίλε μου, οι C/C++ και καμία γλώσσα απο αυτές που ξέρω δεν ανάβει λάμπες :-)

Θα πρέπει να σχεδιάσεις ενα δικό σου "κύκλωμα" με κάποιον μικροεπεξεργαστή που θα προγραμματίσεις να κάνει αυτήν την δουλειά. Βέβαια, αυτό δεν ειναι τοσο απλό οσο μπορεί να ακούγεται, και θέλει λιγάκι διάβασμα, και να γνωρίζεις τα βασικα.

 

Αν παρόλα αυτα επιμένεις να το κάνεις υπάρχουν άπειρα HOWTO στο Γούγλη για να μάθεις πως να κανεις design τέτοιου είδους κυκλώματα.

Δημοσ.
Φίλε μου, οι C/C++ και καμία γλώσσα απο αυτές που ξέρω δεν ανάβει λάμπες :-)

Θα πρέπει να σχεδιάσεις ενα δικό σου "κύκλωμα" με κάποιον μικροεπεξεργαστή που θα προγραμματίσεις να κάνει αυτήν την δουλειά. Βέβαια, αυτό δεν ειναι τοσο απλό οσο μπορεί να ακούγεται, και θέλει λιγάκι διάβασμα, και να γνωρίζεις τα βασικα.

 

Αν παρόλα αυτα επιμένεις να το κάνεις υπάρχουν άπειρα HOWTO στο Γούγλη για να μάθεις πως να κανεις design τέτοιου είδους κυκλώματα.

 

 

Εγω νόμιζα πως με μια εντολή στον Builder ανάβεις οσες λάμπες θέλεις.

 

Εδω και κάποιες ημέρες παλεύω να καταλάβω τι "παίζει" με το πρωτόκολλο X10 και

πως επικοινωνεί ασύρματα ή ενσήρματα με άλλες συσκευές.

 

Ρίξε μια ματιά:http://www.smarthome.gr/product.asp?PID=SH3010&lang=1

 

1)Μέσω c++ μπορείς να επικοινωνήσεις με τις θύρες ? ( Ξέρω πως με το MatLab είναι καλύτερη και ευκολότερη η επικοινωνία αλλά θέλω C++ ).Εχεις κανένα tutorial με κώδικα όμως γιατί πιέζομαι απο το χρόνο.

2)Μάλλον μιλάς για Μικροελεγκτές PIC και όχι Μικροεπεξεργαστές.

 

Τελος πάντων μπορείς να βοηθησεις στα 1 και 2 ?

Δημοσ.
Εγω νόμιζα πως με μια εντολή στον Builder ανάβεις οσες λάμπες θέλεις.

 

Εδω και κάποιες ημέρες παλεύω να καταλάβω τι "παίζει" με το πρωτόκολλο X10 και

πως επικοινωνεί ασύρματα ή ενσήρματα με άλλες συσκευές.

 

Ρίξε μια ματιά:http://www.smarthome.gr/product.asp?PID=SH3010&lang=1

 

1)Μέσω c++ μπορείς να επικοινωνήσεις με τις θύρες ? ( Ξέρω πως με το MatLab είναι καλύτερη και ευκολότερη η επικοινωνία αλλά θέλω C++ ).Εχεις κανένα tutorial με κώδικα όμως γιατί πιέζομαι απο το χρόνο.

2)Μάλλον μιλάς για Μικροελεγκτές PIC και όχι Μικροεπεξεργαστές.

 

Τελος πάντων μπορείς να βοηθησεις στα 1 και 2 ?

 

:-) 2) ναι μικροελεγκτές εννoούσα, αλλα το ακατάλληλο τις ώρας δεν βοηθαει την συγκεντρωση μου.

 

Οσο για το 1) η μόνη θύρα που μπορείς απευθείας να μιλήσεις είναι οι COM και Parallel port, όπως επίσης και με Ethernet. Για USB Ports χρειάζεσαι drivers που να μιλάνε με το device(αν η κατασκεύη ειναι δική σου) ή το αντίστοιχο SDK τις εταιρίας που κανει το device (αν υπάρχει).

 

Για Serial port http://www.robbayer.com/files/serial-win.pdf . (Αυτό ειναι για Windows)

 

Για X10 http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en012050

Δημοσ.
:-) 2) ναι μικροελεγκτές εννoούσα, αλλα το ακατάλληλο τις ώρας δεν βοηθαει την συγκεντρωση μου.

 

Οσο για το 1) η μόνη θύρα που μπορείς απευθείας να μιλήσεις είναι οι COM και Parallel port, όπως επίσης και με Ethernet. Για USB Ports χρειάζεσαι drivers που να μιλάνε με το device(αν η κατασκεύη ειναι δική σου) ή το αντίστοιχο SDK τις εταιρίας που κανει το device (αν υπάρχει).

 

Για Serial port http://www.robbayer.com/files/serial-win.pdf . (Αυτό ειναι για Windows)

 

Για X10 http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en012050

 

 

Απο όσα κατάλαβα ειναι αστα να πάνε.Θέλει αρκετή δουλειά τουλάχιστον να κάτσεις ο ίδιος να το φτιάξεις.Μάλλον στον σύνδεσμο που σου έδωσα η συσκευή περιέχει τέτοια σκηνικά για την επικοινωνία.

Δημοσ.
Απο όσα κατάλαβα ειναι αστα να πάνε.Θέλει αρκετή δουλειά τουλάχιστον να κάτσεις ο ίδιος να το φτιάξεις.Μάλλον στον σύνδεσμο που σου έδωσα η συσκευή περιέχει τέτοια σκηνικά για την επικοινωνία.

 

Απο όσο βλέπω στο Link λέει οτι περιλαμβάνει το Software για να το ρυθμίσεις οπως εσυ θέλεις. Οπότε, δεν θα μπλέξεις καν με προγραμματισμό.

Δημοσ.

Αγόρασε κάτι τέτοιο ώστε να μπορείς να βάλεις στο PC μια συσκευή η οποία ανοιγοκλείνει ρελέ.

Από εκεί και πέρα στείλε εντολές με σειριακή και τέλος.

Εδώ από άλλο site

Τα δύο site που σου δείχνω είναι απολύτως αξιόπιστα και εγώ έχω αγοράσει και από τα δύο.

Δημοσ.
Απο όσο βλέπω στο Link λέει οτι περιλαμβάνει το Software για να το ρυθμίσεις οπως εσυ θέλεις. Οπότε, δεν θα μπλέξεις καν με προγραμματισμό.

 

Κοίτα εγω έχω στο μυαλό μου να φτιάξω το software για το "Εξυπνο Σπίτι" αρχικά και μόνο για τα φώτα ( υπάρχει η δυνατότητα και για την πισίνα π.χ για τον φούρνο κτλ... )

 

δες και εδω:http://www.smarthome.gr/light_domotica.asp

 

Βασικά δύο τρόποι υπάρχουν για την επικοινωνία του υπολογιστή με την συσκευή που ρυθμίζει τα φώτα. 1) Μεσω των ports 2) Μεσω wifi ( ΟΧΙ για όλες τις συσκευές που εχει το παραπάνω site και επίσης δεν μπορούν να συνδεθούν όλες με το pc )

 

Επειδή με τα ports ομως θα πρέπει να τραβάω καλώδια κτλ και είναι λίγο ξενέρωτο αν γνωρίζεται τίποτα για την μετάδοση δεδομένων μέ wifi ? ?

Ολα τα δεδομένα που πρέπει να σταλούν απο τον υπολογιστή ουσιαστικά μέσω wifi είναι ένα string με bits 0 και 1 σύμφωνα με το πρότυπο X10.Η συσκευή απο την άλλη πλευρά διαθέτει όλα όσα χρειάζονται ? ( για να δώσει ρεύμα π.χ στην λάμπα ? ).

 

Ξέρω πως είναι ενδιαφέρον να ασχοληθείς με τους μικροελεγκτές αλλά μάλλον θα το κάνω αν δεν μπορέσω ασύρματη επικοινωνία.Αρα λοιπον εκει πρέπει να στραφούμε και ζητάω τις απόψεις σας.

Δημοσ.
το wifi δεν είναι οικονομική λύση για τέτοια δουλειά. Με rfid γίνεται για ασύρματα, zigbee και τέτοια

 

 

Μήπως εχει κανείς ετοιμο κώδικα για μετάδοση απο το port σε VISTA???

Μην ξεπατωθώ και για αυτό καθώς αλλος είναι ο σκοπός μου.

 

 

Ρίξτε μια ματιά και πείτε μου την γνώμη σας.Βασικά τον βρήκα τον κώδικα αλλά γιατί δουλεύει μόνο στο COM3 και όχι στο COM1 + COM2 στο pc μου?

 

Και κάτι αλλο ( μην γελάσετε ) :COM3 είναι η θύρα που συνδέω τον εκτυπωτη ετσι?

//---------------------------------------------------------------------------

 

#include <vcl.h>

#include<iostream.h>

 

 

//Για το opening port

#include<windows.h>

 

#pragma hdrstop

 

#include <tchar.h>

//---------------------------------------------------------------------------

 

#pragma argsused

int _tmain(int argc, _TCHAR* argv[])

{

 

 

//Αρχή opening port

//Το COM1 είναι το αρχείο που θέλω να ανοίξω

//GENERIC_READ | GENERIC_WRITE δείχνει εάν είναι για ανάγνωση

//ή γραφή ή και τα δύο

//τα αλλα δύο μηδενικά πάντα πρέπει να είναι 0

//OPEN_EXISTING χρησιμοποιείται για να ανοίξουν το αρχείο τα Windows

 

HANDLE hSerial;

hSerial = CreateFile("COM3",

GENERIC_READ | GENERIC_WRITE,

0,

0,

OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL,

0);

if(hSerial==INVALID_HANDLE_VALUE){

cout << "aaaa";

 

}

 

if(GetLastError()==ERROR_FILE_NOT_FOUND){

cout << "\nbbbb";

//serial port does not exist. Inform user.

}//Τέλος opening port

// error opening port; abort

 

 

 

 

//ΑΦΟΥ ΥΠΟΘΕΤΟΥΜΕ ΠΩΣ ΑΝΟΙΞΕ Η ΘΥΡΑ ΤΩΡΑ ΠΡΕΠΕΙ ΝΑ ΟΡΙΣΟΥΜΕ ΣΤΟΝ HANDLE

//ΤΙΣ ΠΑΡΑΜΕΤΡΟΥΣ ΤΗΣ ΕΠΙΚΟΙΝΩΝΙΑΣ ΟΠΩΣ baut rate e.t.c

//TA Windows χρησιμοποιούν μια δομη για ολα αυτα η οποία

//ονομάζεται DCB

 

 

//μηδενιζω τα περιεχομενα της δομής

DCB dcbSerialParams={0};

 

 

//κλήση της GetCommState(HANDLESerial είναι ο HANDLE, &dcbSerialParams είναι ολόκληρη η δομή)

if (!GetCommState(hSerial, &dcbSerialParams)) {

//error getting state

}

 

 

//Απόδοση τιμών στα δεδομένα της struct DCB

dcbSerialParams.BaudRate=CBR_19200;

dcbSerialParams.ByteSize=8;

dcbSerialParams.StopBits=ONESTOPBIT;

dcbSerialParams.Parity=NOPARITY;

 

//έλεγχος με SET

if(!SetCommState(hSerial, &dcbSerialParams)){

//error setting serial port state

}

 

getchar();

return 0;

}

//---------------------------------------------------------------------------

 

Δημοσ.

Κάντε κανενα σχόλιο ρε παιδιά!!!

 

Τον κώδικα αυτό πως θα μπορέσω να δω αν λειτουργεί ? Πρέπει να βάλω καμία ταπα στο port?

Δημοσ.
Κάντε κανενα σχόλιο ρε παιδιά!!!

 

Τον κώδικα αυτό πως θα μπορέσω να δω αν λειτουργεί ? Πρέπει να βάλω καμία ταπα στο port?

 

Tί τάπα ?

 

Εγώ θυμάμαι όταν έπαιζα με drivers για την πάράλληλη ( για να χειρίζομαι από το pc ένα τηλεκατευθυνόμενο παιδικό jeepaki :-D ) στο Linux τεστάριζα το αποτέλεσμα με led-άκια. Βάζεις το led-άκι στο Ground και στο Output και αν ανάβει τότε το συγκεκριμένο pin έχει 1 αλλιώς 0.

Δημοσ.
Tί τάπα ?

 

Εγώ θυμάμαι όταν έπαιζα με drivers για την πάράλληλη ( για να χειρίζομαι από το pc ένα τηλεκατευθυνόμενο παιδικό jeepaki :-D ) στο Linux τεστάριζα το αποτέλεσμα με led-άκια. Βάζεις το led-άκι στο Ground και στο Output και αν ανάβει τότε το συγκεκριμένο pin έχει 1 αλλιώς 0.

 

 

Η τάπα είναι τάπα πως να σου πω.Βραχυκυκλώνεις κάποια pins και οταν στέλνεις δεδομένα επιστρέφονται και βλέπεις πως δουλεύει.Είναι σιδερένιο ντικείμενο και το κουμπώνεις πάνω στην θύρα.Σαν του εκτυπωτή το βύσμα που το κουμπώνεις στο pc αλλά χωρίς τον εκτυπωτη!!!

 

Τωρα φτιαχνω με αντικειμενοστρεφή τρόπο ( C++ ) το προγραμματάκι αλλά δεν ξέρω πως θα δω αν δουλεύει.Θα ανεβάσω τον κώδικα σε καμια ώρα απο τώρα.

 

Εχω ομως ενα πρόβλημα .Χτυπάει ο Builder εδώ - >

 

if (!ReadFile(hComm, lpBuf, READ_BUF_SIZE, &dwRead, &osReader)) {

 

και μου βγάζει μήνυμα Undefined Symbol 'hComm'

 

μήπως ξέρεις σε ποια βιβλιοθήκη ( header αρχείο ) βρίσκεται ????

 

τον κώδικα τον πήρα απο εδώ :

http://msdn.microsoft.com/en-us/library/ms810467.aspx#serial_topic4

Δημοσ.

μήπως ξέρεις σε ποια βιβλιοθήκη ( header αρχείο ) βρίσκεται ????

 

Βεβαίως! Σε καμία εσύ πρέπει να το δηλώσεις έτσι

>
HANDLE hComm;
hComm = CreateFile( gszPort,  
                   GENERIC_READ | GENERIC_WRITE, 
                   0, 
                   0, 
                   OPEN_EXISTING,
                   FILE_FLAG_OVERLAPPED,
                   0);

 

Αναφέρεται στο link που μου έδωσες http://msdn.microsoft.com/en-us/library/ms810467.aspx#serial_topic3

Δημοσ.
Βεβαίως! Σε καμία εσύ πρέπει να το δηλώσεις έτσι

>
HANDLE hComm;
hComm = CreateFile( gszPort,  
                   GENERIC_READ | GENERIC_WRITE, 
                   0, 
                   0, 
                   OPEN_EXISTING,
                   FILE_FLAG_OVERLAPPED,
                   0);

 

Αναφέρεται στο link που μου έδωσες http://msdn.microsoft.com/en-us/library/ms810467.aspx#serial_topic3

 

 

Απροσεξία !!! Εχεις δίκιο αλλά επίσης χτυπάει και στις άλλες παραμέτρους!!!!

Θα πρέπει να τις δηλώσω λογικά στα private της κλάσης μου αλλά τι τιμές ΚΑΙ ΤΙ ΤΥΠΟΥ θα πρέπει να ειναι οταν κληθεί η συνάρτηση ->

if (!ReadFile(hComm, lpBuf, READ_BUF_SIZE, &dwRead, &osReader)) { ??????

 

Επίσης επειδή το ολο σύστημα χρησιμοποιεί μια struct ( την DCB ) και σε κάποια σημεία πρέπει να την αρχικοποιήσω με 0 δεν δέχεται την αρχικοποίηση τύπου ->

 

dcbSerialParams={0};

 

dcbSerialParams.BaudRate=CBR_19200;

dcbSerialParams.ByteSize=8;

dcbSerialParams.StopBits=ONESTOPBIT;

dcbSerialParams.Parity=NOPARITY;

 

οπότε αναγκαστικά την αρχικοποίησα έτσι ->

 

dcbSerialParams.BaudRate=0;

dcbSerialParams.ByteSize=0;

dcbSerialParams.StopBits=0;

dcbSerialParams.Parity=0;

 

dcbSerialParams.BaudRate=CBR_19200;

dcbSerialParams.ByteSize=8;

dcbSerialParams.StopBits=ONESTOPBIT;

dcbSerialParams.Parity=NOPARITY;

 

ΒΟΗΘΕΙΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑΑ

openPortClassCppFile.txt

openPortHeaderFile.txt

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...