코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
i2c 통신이문제인지 코딩에문제인지 잘모르겠어요
매드닥터 | 2023-07-01
|
|
---|---|
현재 i2c통신을 사용하고싶은데 SDA SCL선만연결하면 슬레이브쪽의 아두이노가 멈춤니다. 제가만들려고하는것은 슬레이브쪽의 아두이노가 초음파와 서보모터를움직이며 초음파센서20CM이내에 탐지되었을때만 마스터 아두이노에게 정보를송신하는것인데 잘안됩니다. 밑에 코딩도같이올려서 보여드립니다 도와주세요
오른쪽 슬레이브아두이노 #include <Wire.h> #define TRIGGER_PIN 6 Servo servo; void setup() { servo.attach(SERVO_PIN); Wire.begin(MASTER_ADDRESS); // 슬레이브 주소 설정 Serial.begin(9600); // 시리얼 통신 시작 void loop() { if (angle >= 90 && angle <= 180) { // 거리가 20cm 이내인 경우에만 정보를 전송 int measureDistance() { duration = pulseIn(ECHO_PIN, HIGH); return distance; void sendInformation() { Serial.print("Name: ");
왼쪽슬레이브 아두이노 #include <Wire.h> #define TRIGGER_PIN 6 Servo servo; void setup() { servo.attach(SERVO_PIN); Wire.begin(MASTER_ADDRESS); // 슬레이브 주소 설정 Serial.begin(9600); // 시리얼 통신 시작 void loop() { if (angle >= 0 && angle <= 90) { // 거리가 20cm 이내인 경우에만 정보를 전송 int measureDistance() { duration = pulseIn(ECHO_PIN, HIGH); return distance; void sendInformation() { Serial.print("Name: ");
마스터아두이노 #include <Wire.h>
#define SLAVE_ADDRESS_1 9 // 첫 번째 슬레이브 아두이노 주소
#define SLAVE_ADDRESS_2 10 // 두 번째 슬레이브 아두이노 주소
void setup() {
Wire.begin(); // I2C 통신 초기화
Serial.begin(9600); // 시리얼 통신 시작
}
void loop() {
Wire.requestFrom(SLAVE_ADDRESS_1, 3); // 첫 번째 슬레이브 아두이노로부터 3바이트 데이터 요청
String receivedData1 = "";
while (Wire.available()) {
char receivedChar = Wire.read();
receivedData1 += receivedChar;
}
Wire.requestFrom(SLAVE_ADDRESS_2, 3); // 두 번째 슬레이브 아두이노로부터 3바이트 데이터 요청
String receivedData2 = "";
while (Wire.available()) {
char receivedChar = Wire.read();
receivedData2 += receivedChar;
}
// 첫 번째 슬레이브 아두이노 데이터 처리
String name = receivedData1.substring(0, 1);
int angle = receivedData1.substring(2, 3).toInt();
int distance = receivedData1.substring(4, 5).toInt();
// 데이터 출력
Serial.print("Name: ");
Serial.print(name);
Serial.print(", Angle: ");
Serial.print(angle);
Serial.print(" degrees, Distance: ");
Serial.print(distance);
Serial.println(" cm");
// 두 번째 슬레이브 아두이노 데이터 처리
name = receivedData2.substring(0, 1);
angle = receivedData2.substring(2, 3).toInt();
distance = receivedData2.substring(4, 5).toInt();
// 데이터 출력
Serial.print("Name: ");
Serial.print(name);
Serial.print(", Angle: ");
Serial.print(angle);
Serial.print(" degrees, Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(1000); // 1초 대기
}
|
|
이전글 | 센서 측정값이 일정시간 유지되어야 알림이 울리게 하는법 ㅠㅠ ... | 2023-06-30 |
다음글 | 아두이노로 웹서버 만들기 질문 | 2023-09-22 |