Processing
2024. 7. 5. 13:26ㆍLiDAR
✅ Processing 개발 환경 구축
✅ Processing
✅ Processing 오류 원인
✅ Processing 코딩
void setup() {
Serial.begin(9600);
}
void loop() {
// 프로세싱으로 값을 전달
Serial.write(0);
}
import processing.serial .*;
Serial port;
void setup() {
// 사용 가능한 시리얼 포트 검색
// Serial.list() : 사용 가능한 포트 리스트
for (int i = 0; i < Serial.list().length; i++) {
println("[" + i + "]" + Serial.list()[i]);
}
// 시리얼 포트 할당
port = new Serial(this, Serial.list()[1], 9600);
// 창 크기 설정
size(300, 300);
}
void draw() {
// 배경색 설정 (0 ~ 255)
background(150);
// 시리얼 포트로부터 데이터가 수신 되었다면
if (port.available() > 0) {
// 수신된 값을 읽어온다
int x = port.read();
if (x == 0) {
// 사각형 그리기 (좌상단 좌표 (x, y), 폭, 높이)
rect(100, 100, 50, 50);
} else {
// 타원 그리기 (중심점 좌표 (cx, cy), 폭 반지름, 높이 반지름, )
ellipse(100, 100, 50, 50);
}
}
}
void setup() {
Serial.begin(9600);
}
void loop() {
// 프로세싱으로 값을 전달
Serial.write(1);
}
import processing.serial .*;
Serial port;
void setup() {
// 사용 가능한 시리얼 포트 검색
// Serial.list() : 사용 가능한 포트 리스트
for (int i = 0; i < Serial.list().length; i++) {
println("[" + i + "]" + Serial.list()[i]);
}
// 시리얼 포트 할당
port = new Serial(this, Serial.list()[1], 9600);
// 창 크기 설정
size(300, 300);
}
void draw() {
// 배경색 설정 (0 ~ 255)
background(150);
// 시리얼 포트로부터 데이터가 수신 되었다면
if (port.available() > 0) {
// 수신된 값을 읽어온다
int x = port.read();
if (x == 0) {
// 사각형 그리기 (좌상단 좌표 (x, y), 폭, 높이)
rect(100, 100, 50, 50);
} else {
// 타원 그리기 (중심점 좌표 (cx, cy), 폭 반지름, 높이 반지름, )
ellipse(100, 100, 50, 50);
}
}
}
✅ LED 제어하기
void setup() {
Serial.begin(9600);
pinMode(8, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
int val = Serial.read();
if (val > 128) {
digitalWrite(8, HIGH);
} else {
digitalWrite(8, LOW);
}
}
}
import processing.serial .*;
Serial port;
void setup() {
// 사용 가능한 시리얼 포트 검색
// Serial.list() : 사용 가능한 포트 리스트
for (int i = 0; i < Serial.list().length; i++) {
println("[" + i + "]" + Serial.list()[i]);
}
// 시리얼 포트 할당
port = new Serial(this, Serial.list()[1], 9600);
// 창 크기 설정
size(300, 300);
}
void draw() {
// 현재 마우스 좌표를 출력
println("mouseX = " + mouseX + ", mouseY = " + mouseY);
}
import processing.serial .*;
Serial port;
void setup() {
// 사용 가능한 시리얼 포트 검색
// Serial.list() : 사용 가능한 포트 리스트
for (int i = 0; i < Serial.list().length; i++) {
println("[" + i + "]" + Serial.list()[i]);
}
// 시리얼 포트 할당
port = new Serial(this, Serial.list()[1], 9600);
// 창 크기 설정
size(300, 300);
}
void draw() {
// 현재 마우스 좌표를 출력
println("mouseX = " + mouseX + ", mouseY = " + mouseY);
background(mouseX);
port.write(mouseX);
}
void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
int val = Serial.read();
analogWrite(9, val);
// if (val > 128) {
// digitalWrite(9, HIGH);
// } else {
// digitalWrite(9, LOW);
// }
}
}
✅ 2개 이상의 센서 값 전송하기
void setup() {
Serial.begin(9600);
pinMode(8, INPUT);
}
void loop() {
int val1 = analogRead(A0);
int val2 = digitalRead(8);
// 읽은 값들을 프로세싱으로 전송
// 문자열로 만들어서 보내는 방식 "val1 : val2"
// 시작 비트 -> 값1, 값2 -> 종료 비트
// 255를 시작 비트로 사용
Serial.write(255);
// 데이터 전송
// 가변저항 값 전송 (0~253)
// map(변수, 원 시작값, 원 종료값, 목표 시작값, 목표 종료값)
Serial.write(map(val1, 0, 1024, 0, 253));
// 버튼 값 전송
Serial.write(val2);
// 254를 종료 비트로 사용
Serial.write(254);
}
import processing.serial .*;
Serial port;
// 시작, 다음
int start, next;
// 수신된 값 저장
int data1, data2;
// 각도 값
float rot = 0.0;
// 이미지 객체
PImage img;
void setup() {
// 사용 가능한 시리얼 포트 검색
// Serial.list() : 사용 가능한 포트 리스트
for (int i = 0; i < Serial.list().length; i++) {
println("[" + i + "]" + Serial.list()[i]);
}
// 시리얼 포트 할당
port = new Serial(this, Serial.list()[1], 9600);
// 창 크기 설정
// P3D : 3차원 화면
size(512, 512, P3D);
// 이미지 로드
img = loadImage("wind.png");
}
void draw() {
background(255);
image(img, 256 - img.width / 2, 256 - img.height / 2);
}
import processing.serial .*;
Serial port;
// 시작, 다음
int start, next;
// 수신된 값 저장
int data1, data2;
// 각도 값
float rot = 0.0;
// 이미지 객체
PImage img;
void setup() {
// 사용 가능한 시리얼 포트 검색
// Serial.list() : 사용 가능한 포트 리스트
for (int i = 0; i < Serial.list().length; i++) {
println("[" + i + "]" + Serial.list()[i]);
}
// 시리얼 포트 할당
port = new Serial(this, Serial.list()[1], 9600);
// 창 크기 설정
// P3D : 3차원 화면
size(512, 512, P3D);
// 이미지 로드
img = loadImage("wind.png");
}
void draw() {
background(255);
// 수신된 값을 읽어온다
while (port.available() > 0) {
// 시작/종료 비트 읽음
int data = port.read();
// 시작 비트라면
if (data == 255)
start = 1;
// 종료 비트라면
else if (data == 254)
start = 0;
// 시작 비트인 경우에 값 읽기
if (start == 1) {
// 첫 번째 값이라면 : 가변저항 값
// 값 범위가 0 ~ 253이므로 화면 크기 512 x 512에 맞추기 위해서 2를 곱한다
if (next == 1) data1 = data * 2;
// 두 번째 값이라면 : 버튼 값
else if (next == 2) data2 = data;
next++;
} else {
next = 0;
}
}
// 읽은 값을 이용해서 이미지를 제어
// 3D 화면에서 이미지 제어 시작
pushMatrix();
// 가변 저항 값으로 이미지 이동 (대각 방향)
translate(data1, data1, 0);
// 이미지 회전
rotateZ(rot);
image(img, - img.width / 2, - img.height / 2);
// 3D 화면에서 이미지 제어 종료
popMatrix();
// 버튼을 누른 경우 회전 각도 변경
if (data2 == 1) {
rot -= 0.05;
}
}
✅ 프로세싱 사용 사례
✅ 자이로 센서 - GY-521
#include<Wire.h>
// 자이로 센서 I2C주소
const int MPU = 0x68;
// 센서값 저장 : 자이로 센서 x,y,z, 온도 센서, 가속도 센서 x,y,z
// 2byte -> 14byte
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup() {
// I2C 통신 시작(0을 전송해서 시작)
Wire.begin();
// I2C주소 확인
Wire.beginTransmission(MPU);
// 자이로 센서 동작
Wire.write(0x6B);
// 0을 전송해서 시작
Wire.write(0);
// 1을 전송해서 종료
Wire.endTransmission(true);
Serial.begin(9600);
}
void loop() {
// 자이로 센서 연결
Wire.beginTransmission(MPU);
//데이터 저장 주소
Wire.write(0x3B);
// 0을 전송해서 I2C통신 유지
Wire.endTransmission(false);
//자이로 센서로부터 값을 읽어온다.
Wire.requestFrom(MPU,14,true);
// Wire.read(); :1byte읽기
// << 8 : 8비트 (1byte)만큼 왼쪽으로 쉬프트
// | Wire.read() : 다음 1byte를 읽어 이전 쉬프트란 값에 연결
// 2byte 데이터를 GX에 저장
GyX=Wire.read()<<8|Wire.read();
GyY=Wire.read()<<8|Wire.read();
GyZ=Wire.read()<<8|Wire.read();
Tmp=Wire.read()<<8|Wire.read();
AcX=Wire.read()<<8|Wire.read();
AcY=Wire.read()<<8|Wire.read();
AcZ=Wire.read()<<8|Wire.read();
//Serial.print(" | Tmp= "); Serial.print(Tmp/340.00+36.53);
int16_t GX2 = map(GyX, -32255, 32255, -180, 180);
int16_t GY2 = map(GyY, -32255, 32255, -180, 180);
int16_t GZ2 = map(GyZ, -32255, 32255, -180, 180);
Serial.print(" | GX2 = "); Serial.print(GX2);
Serial.print(" | GY2 = "); Serial.print(GY2);
Serial.print(" | GZ2 = "); Serial.println(GZ2);
delay(333);
}
'LiDAR' 카테고리의 다른 글
LiDAR 센서 이해하기 (0) | 2024.07.09 |
---|---|
ROS(Robot Operating System) (0) | 2024.07.08 |
RFID (0) | 2024.07.08 |
I2C 통신 (0) | 2024.07.04 |