के बाद फ्रीज करता है मैं I²C सेटअप का प्रयास कर रहा हूं जिसमें एक मास्टर Arduino दो दासों को नियंत्रित करता है।Arduino I²C स्टार्टअप
मैं I²C के लिए दो 2000 ओम pullup प्रतिरोधों उपयोग कर रहा हूँ और सभी बोर्डों Arduino Duemilanoves हैं। I²C सेटअप और नियंत्रण सेटअप दोनों एक दूसरे से डिस्कनेक्ट होने पर ठीक से काम करते हैं, लेकिन जब पहले wire.write
फ़ंक्शन को कॉल किया जाता है तो Arduinos कनेक्ट होने पर अप्रतिबंधित हो जाता है। मैं धारावाहिक संदेश प्राप्त करना बंद कर देता हूं, दास Arduinos मास्टर से संदेश प्राप्त करना बंद कर देता है, और मैं बटन का उपयोग कर सिस्टम चालू और बंद करने की क्षमता खो देता है।
मैंने प्रत्येक wire.write
फ़ंक्शन के बाद छोटी देरी जोड़ने का प्रयास किया है और समस्या को ठीक करने के प्रयास में विभिन्न प्रकार के पुलअप प्रतिरोधकों का उपयोग किया है, लेकिन कुछ भी काम नहीं करता है। मैं इसे कैसे ठीक करूं?
मास्टर कोड:
#include <Wire.h>
int potPin1 = 0; // Select the input pin for the potentiometer
int potPin2 = 1;
int potVal1; // Variable to store the value coming from the sensor
int potVal2;
int times=0; // All the below variables are used to control an on-off button
int state=0;
int lastState=0;
boolean pot=false;
void setup()
{
pinMode(13, OUTPUT); //LED that turns on when system is activated
pinMode(3, INPUT); //Button that turns on system
Serial.begin(9600);
Wire.begin();
}
void loop(){
state=digitalRead(3);
if(state != lastState){
if(state==HIGH){
times++;
Serial.println(times);
}
else{
Serial.println("off");
}
}
lastState=state;
if(times%2 ==1)
{
turnPotOn();
}
else
{
turnPotOff();
}
// इस मुद्दे पर पाश ऊपर के सभी कोड और बंद बटन प्रेस प्रणाली बदल जाता है। // निम्नलिखित कोड I²C से potentiometer रीडिंग के आधार पर मेल खाता है।
if(pot==true)
{
potVal1 = analogRead(potPin1); // Read the value from the sensor
potVal2 = analogRead(potPin2);
if((potVal1>700) && (300<potVal2) && (potVal2<700))
{
arduino1_motor1();
}
else if ((potVal1<330) && (336<potVal2) && (potVal2<683))
{
arduino1_motor2();
}
else if ((potVal2>683) && (330<potVal1) && (potVal1<640))
{
arduino2_motor3();
}
else if ((potVal2<336) && (330<potVal1) && (potVal1<640))
{
arduino2_motor4();
}
else if ((potVal2<336) && (potVal1<330))
{
arduino12_motor24();
}
else if ((potVal2>683) && (potVal1>640))
{
arduino12_motor23();
}
else if ((potVal2>683) && (potVal1<640))
{
arduino11_motor23();
}
else if ((potVal2<336) && (potVal1>330))
{
arduino11_motor24();
}
else
{
arduino12_still();
}
}
else
{
// arduino1_still();
// arduino2_still();
Serial.println("OFF");
}
}
void turnPotOff()
{
digitalWrite(13, LOW);
pot=false;
}
void turnPotOn()
{
digitalWrite(13, HIGH);
pot=true;
}
void arduino1_motor1()
{
Wire.beginTransmission(5);
Wire.write('A');
Wire.endTransmission();
arduino2_still();
Serial.println("A1 in M1 d");
}
void arduino1_motor2()
{
Wire.beginTransmission(5);
Wire.write('B');
Wire.endTransmission();
arduino2_still();
Serial.println("A1 in m2 d");
}
void arduino12_still()
{
arduino1_still();
arduino2_still();
Serial.println("A1 & A2 stl");
}
void arduino2_motor3()
{
arduino1_still();
Wire.beginTransmission(10);
Wire.write('M3');
Wire.endTransmission();
Serial.println("A2 in M3 d");
}
void arduino2_motor4()
{
arduino1_still();
Wire.beginTransmission(10);
Wire.write('D');
Wire.endTransmission();
Serial.println("A2 in M4 d");
}
void arduino12_motor24()
{
Wire.beginTransmission(5);
Wire.write('B');
Wire.endTransmission();
Wire.beginTransmission(10);
Wire.write('D');
Wire.endTransmission();
Serial.println("A1 & A2 in M2 and M4 d");
}
void arduino12_motor23()
{
Wire.beginTransmission(5);
Wire.write('B');
Wire.endTransmission();
Wire.beginTransmission(10);
Wire.write('C');
Wire.endTransmission();
Serial.println("A1 & A2 in M2 and M3 d");
}
void arduino11_motor24()
{
Wire.beginTransmission(5);
Wire.write('A');
Wire.endTransmission();
Wire.beginTransmission(10);
Wire.write('D');
Wire.endTransmission();
Serial.println("A1 & A2 in M1 and M4 d");
}
void arduino11_motor23()
{
Wire.beginTransmission(5);
Wire.write('A');
Wire.endTransmission();
Wire.beginTransmission(5);
Wire.write('C');
Wire.endTransmission();
Serial.println("A1 & A2 in M1 and M3 d");
}
void arduino1_still()
{
Wire.beginTransmission(5);
Wire.write('S');
Wire.endTransmission();
}
void arduino2_still()
{
Wire.beginTransmission(10);
Wire.write('S');
Wire.endTransmission();
}
दास 1 कोड:
#include <Servo.h>
#include <Wire.h>
Servo myservo1;
Servo myservo2;
void setup()
{
Serial.begin(9600); // setup serial
myservo1.attach(2);
myservo2.attach(3);
Wire.begin(5);
Wire.onReceive(receiveEvent);
}
void loop()
{
}
void receiveEvent(int howMany)
{
while(Wire.available())
{
char v = Wire.read();
if(v == 'A')
{
myservo1.write(0);
myservo2.write(180);
Serial.println("Arduino 1 in motor 1 direction");
}
else if(v == 'B')
{
myservo1.write(180);
myservo2.write(0);
Serial.println("Arduino 1 in motor 2 direction");
}
else
{
myservo1.write(90);
myservo2.write(85);
Serial.println("Arduino 1 still");
}
}
}
दास 2:
ठीक है तो यह जा रहा है:
#include <Servo.h>
#include <Wire.h>
Servo myservo3;
Servo myservo4;
void setup()
{
Serial.begin(9600); // Setup serial
myservo3.attach(2);
myservo4.attach(3);
Wire.begin(10);
Wire.onReceive(receiveEvent);
}
void loop()
{
}
void receiveEvent(int howMany)
{
while(Wire.available())
{
char v = Wire.read();
if(v == 'C')
{
myservo3.write(0);
myservo4.write(180);
Serial.println("Arduino 2 in motor 3 direction");
}
else if(v == 'D')
{
myservo3.write(180);
myservo4.write(0);
Serial.println("Arduino 2 in motor 4 direction");
}
else
{
myservo3.write(90);
myservo4.write(90);
Serial.println("Arduino 2 still");
}
}
}
क्या आपके पास ई सिग्नल अखंडता निर्धारित करने और हार्डवेयर समस्याओं को रद्द करने के लिए एक ऑसिलोस्कोप तक पहुंच है? – cowboydan
मैंने एक ऑसिलोस्कोप के साथ अपना सेटअप चेक नहीं किया है, लेकिन मैंने i2c सेटअप को अतिरिक्त घटकों (potentiometers, एलईडी, बटन, आदि) और i2c के बिना अतिरिक्त घटकों के बिना परीक्षण किया है और दोनों प्रणालियों को अलग-अलग काम करने के लिए पाया है। – pongAssist
क्या आप कह सकते हैं कि I2C गुलाम पते कहां सेट हैं? क्या वे हार्डवेयर में सेट हैं? मैं Arduino दासों में से एक को हटाने की कोशिश करता हूं और जवाब देने के लिए सिर्फ एक प्राप्त करने का प्रयास करता हूं। – cowboydan