Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
γεια σας
Καλούς χαιρετισμούς.. !!
I (Somanshu Choudhary) για λογαριασμό των τεχνολογικών επιχειρήσεων Dcube που θα ελέγχουν τα Relays μέσω πρωτοκόλλου I2C χρησιμοποιώντας Arduino nano και MCP23008.
Βήμα 1: Επισκόπηση
- Η συσκευή MCP23X08 παρέχει παράλληλη επέκταση I/O 8 bit, γενικής χρήσης, για εφαρμογές διαύλου I2C ή SPI.
- Το MCP23X08 αποτελείται από πολλαπλούς καταχωρητές διαμόρφωσης 8 bit για επιλογή εισόδου, εξόδου και πολικότητας. Η κύρια μονάδα συστήματος μπορεί να ενεργοποιήσει το I/O είτε ως είσοδο είτε ως έξοδο, γράφοντας τα bits διαμόρφωσης I/O. Τα δεδομένα για κάθε είσοδο ή έξοδο διατηρούνται στον αντίστοιχο καταχωρητή εισόδου ή εξόδου. Η πολικότητα του καταχωρητή θύρας εισόδου μπορεί να αντιστραφεί με τον καταχωρητή αντιστροφής πολικότητας. Όλοι οι καταχωρητές μπορούν να διαβαστούν από τον κύριο σύστημα.
- ΣΥΝΔΕΣΜΟΣ ΔΕΔΟΜΕΝΩΝ:
Βήμα 2: Τι χρειάζεστε / Σύνδεσμοι
1. Arduino Nano LINK:
2. Ασπίδα για Arduino Nano LINK:
3. Καλώδιο USB τύπου A έως Micro Type B 6 πόδια μακριά
4. Σύνδεσμος καλωδίου I²C:
5. Οκτώ ελεγχόμενα ρελέ SPDT I²C
6. Προσαρμογέας LINK:
Βήμα 3: Διάγραμμα κυκλώματος
Βήμα 4: Προγραμματισμός - Ι
- Σε αυτόν τον κώδικα, χρησιμοποιώ το Παράδειγμα προγραμματισμού λειτουργιών
- Χρησιμοποίησα διαφορετικές καρτέλες για τον ορισμό των λειτουργιών και την κλήση λειτουργιών
ΚΩΔΙΚΟΣ ΚΑΤΩ ΠΙΝΑΚΑΣ q:
// Απλός κώδικας κλήσης λειτουργίας
#include void setup ()
{
// διεύθυνση I2C του MCP23008
#define MCP_ADDR 0x20
// Εγγραφείτε στο I2C Bus ως κύριο
Wire.begin ();
// Ξεκινήστε σειριακή επικοινωνία και ορίστε ρυθμό baud
Serial.begin (9600);
// Ξεκινήστε τη μετάδοση με δεδομένη συσκευή στο δίαυλο I2C
Wire.beginTransmission (MCP_ADDR);
// Επιλέξτε μητρώο IODIR - I/O DIRECTION REGISTER
Wire.write (0x00);
// Επιλέξτε την απαιτούμενη λειτουργία (έξοδος)
Wire.write (0x00);
// Επιλέξτε καταχωρητής ΔΙΑΜΟΡΦΩΣΗΣ
Wire.write (0x05);
// Επιλέξτε την απαιτούμενη λειτουργία
Wire.write (0x0E);
// τερματισμός μετάδοσης
Wire.endTransmission ();
}
κενός βρόχος ()
{
a1_on ();
καθυστέρηση (1000)?
a1_off ();
καθυστέρηση (1000)?
a2_on ();
καθυστέρηση (1000)?
a2_off ();
καθυστέρηση (1000)?
a3_on ();
καθυστέρηση (1000)?
a3_off ();
καθυστέρηση (1000)?
a4_on ();
καθυστέρηση (1000)?
a4_off ();
καθυστέρηση (1000)?
a5_on ();
καθυστέρηση (1000)?
a5_off ();
καθυστέρηση (1000)?
a6_on ();
καθυστέρηση (1000)?
a6_off ();
καθυστέρηση (1000)?
a7_on ();
καθυστέρηση (1000)?
a7_off ();
καθυστέρηση (1000)?
a8_on ();
καθυστέρηση (1000)?
a8_off ();
}
ΚΩΔΙΚΟΣ ΚΑΤΩ ΠΙΝΑΚΑΣ q1:
// Αυτός ο κωδικός είναι για το ρελέ 1 on και off στο πλοίο
void a1_on () {
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x01);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
void a1_off ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
ΚΩΔΙΚΟΣ ΚΑΤΩ ΠΙΝΑΚΑΣ q2:
// Αυτός ο κωδικός είναι για το ρελέ 2 on και off στο πλοίο
void a2_on () {
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x02);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
void a2_off ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
ΚΩΔΙΚΟΣ ΚΑΤΩ ΠΙΝΑΚΑΣ q3: // Αυτός ο κωδικός είναι για το ρελέ 3 on και off στο πλοίο
void a3_on ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x04);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
void a3_off ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
Βήμα 5: Προγραμματισμός - II
ΚΩΔΙΚΟΣ ΚΑΤΩ ΠΙΝΑΚΑΣ q4:
// Αυτός ο κωδικός είναι για το ρελέ 4 on και off στο πλοίο
άκυρο a4_on ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x08);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
void a4_off ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
ΚΩΔΙΚΟΣ ΚΑΤΩ ΠΙΝΑΚΑΣ q5:
// Αυτός ο κωδικός είναι για το ρελέ 5 on και off στο πλοίο
void a5_on ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x10);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
void a5_off ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
ΚΩΔΙΚΟΣ ΚΑΤΩ ΠΙΝΑΚΑΣ q6: // Αυτός ο κωδικός είναι για το ρελέ 6 on και off στο πλοίο
void a6_on ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x20);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
void a6_off ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
ΚΩΔΙΚΟΣ ΚΑΤΩ ΠΙΝΑΚΑΣ q7: // Αυτός ο κωδικός είναι για το ρελέ 7 on και off στο πλοίο
void a7_on () {
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x40);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
void a7_off ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
ΚΩΔΙΚΟΣ ΚΑΤΩ ΠΙΝΑΚΑΣ q8: // Αυτός ο κωδικός είναι ενεργοποιημένος και απενεργοποιημένος ρελέ 8 επί του σκάφους
void a8_on () {
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x80);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
void a8_off ()
{
// Έναρξη μετάδοσης
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
καθυστέρηση (1800)?
Wire.requestFrom (MCP_ADDR, 1)?
int GPIO = Wire.read ();
Wire.endTransmission ();
// Έξοδος στην οθόνη
Serial.print ("τιμή GPIO:");
Serial.println (GPIO, BIN);
}
Βήμα 6: Βίντεο
Για περαιτέρω απορίες Μη διστάσετε να επισκεφθείτε τον ιστότοπό μας:
www.dcubetechnologies.com