<String 문자열 더하기>
더보기
String strData1 = "hello";
String strData2 = "arduino";
void setup(){
Serial.begin(9600);
}
void loop(){
String strData3 = strData1 + strData2;
Serial.println(strData3);
delay(2000);
}
▶ 공백 넣으려면 이렇게
String strData3 = strData1 + " " + strData2;
<String.equals() 함수를 사용하여 문자열을 비교해보기>
더보기
String strData1 = "hello arduino";
void setup(){
Serial.begin(9600);
}
void loop() {
if (strData1.equals("hi")==1)
{
Serial.println("hi를 찾았습니다.");
}
if (strData1.equals("hello")==1)
{
Serial.println("hello를 찾았습니다");
}
if (strData1.equals("hello arduino")==1)
{
Serial.println("hello arduino를 찾았습니다.");
}
delay(2000);
}
<문자열 길이 구하기>- .length() 함수
더보기
String strData1 = "hello arduino";
String strData2 = "hello";
String strData3 = "arduino";
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print(strData1 + "길이는 :");
Serial.println(strData1.length());
Serial.print(strData2 + "길이는 :");
Serial.println(strData2.length());
Serial.print(strData3 + "길이는 :");
Serial.println(strData3.length());
delay(2000);
}
<indexOf() 함수 사용하여 문자열 찾기>
더보기
String strData1 = "hello arduino python";
void setup(){
Serial.begin(9600);
}
void loop() {
Serial.print("hello의 위치: ");
Serial.println(strData1.indexOf("hello"));
Serial.print("arduino의 위치: ");
Serial.println(strData1.indexOf("arduino"));
Serial.print("python의 위치: ");
Serial.println(strData1.indexOf("python"));
Serial.print("hi의 위치: ");
Serial.println(strData1.indexOf("hi"));
delay(2000);
}
특정위치부터 찾으려면 > indexOf("찾을문자열", from)
더보기
String strData1 = "hello arduino python";
void setup(){
Serial.begin(9600);
}
void loop() {
if(strData1.indexOf("arduino")!= -1)
{
Serial.println("arduino를 찾았습니다.");
}
delay(2000);
}
<뒤에서부터 찾으려면, lastIndexOf>
더보기
String strData1 = "hello arduino python";
void setup(){
Serial.begin(9600);
}
void loop() {
Serial.print("hello의 위치(뒤에서부터): ");
Serial.println(strData1.lastIndexOf("hello"));
Serial.print("arduino의 위치(뒤에서부터): ");
Serial.println(strData1.lastIndexOf("arduino"));
Serial.print("python의 위치(뒤에서부터): ");
Serial.println(strData1.lastIndexOf("python"));
Serial.print("hi의 위치(뒤에서부터): ");
Serial.println(strData1.lastIndexOf("hi"));
delay(2000);
}
<슬라이싱>
더보기
String strData1 = "hello arduino python";
void setup(){
Serial.begin(9600);
}
void loop() {
Serial.print("6부터 끝까지: ");
Serial.println(strData1.substring(6));
Serial.print("6부터 13전까지: ");
Serial.println(strData1.substring(6,13));
Serial.print("0부터 5전까지: ");
Serial.println(strData1.substring(0,5));
delay(2000);
}
<string을 숫자형으로 변환하기 > toInt()>
더보기
String strData = "123";
void setup(){
Serial.begin(9600);
}
void loop() {
Serial.print("strData:");
Serial.print(strData);
Serial.print("size:");
Serial.println(sizeof(strData));
int numData=strData.toInt();
Serial.print("numData:");
Serial.print(numData);
Serial.print("size:");
Serial.println(sizeof(numData));
delay(2000);
}
<문자열을 float로, toFloat()>
더보기
String strPi = "3.141592";
void setup(){
Serial.begin(9600);
}
void loop() {
Serial.print("strPi:");
Serial.print(strPi);
Serial.print("size:");
Serial.println(sizeof(strPi));
float numPi=strPi.toFloat();
Serial.print("numData:");
Serial.print(numPi);
Serial.print("size:");
Serial.println(sizeof(numPi));
delay(2000);
}
소수점 2자리까지 나옴
> integer(2^16)보다 더 크게 하고 싶으면 float(2^32), float보다 하고 싶으면 double(2^64)
trim > 양쪽 끝, 앞뒤에 있는 공백을 제거함
<공백제거>
더보기
void setup(){
Serial.begin(9600);
}
void loop() {
String strData = " hello arduino python ";
Serial.print("strData:");
Serial.println(strData);
Serial.print("공백제거:");
strData.trim();
Serial.println(strData);
delay(2000);
}
<하나의 문자를 받아 RGB LED 제어하기>
더보기
#define LED_RED 5
#define LED_YELLOW 6
#define LED_GREEN 11
void setup(){
Serial.begin(9600);
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
}
void loop() {
if (Serial.available() > 0)
{
char sData = Serial.read();
if (sData == 'r')
{
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
}
else if (sData == 'y') {
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, HIGH);
digitalWrite(LED_GREEN, LOW);
}
else if (sData == 'g')
{
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, HIGH);
}
else if(sData == 'o')
{
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
}
else if(sData == 'a')
{
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_YELLOW, HIGH);
digitalWrite(LED_GREEN, HIGH);
}
}
}
<<<< RGB LED를 제어하는 통신규칙 만들기>>>>
1.
<\n (새줄, 엔터) 종료 문자까지 문자열을 입력받기>
더보기
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available() > 0)
{
String strRead = Serial.readStringUntil('\n');
Serial.print("read:");
Serial.print(strRead);
}
}
2. RGB=255,50,0 값 입력받아 255,50,0의 값 찾아 분리하기
더보기
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available() > 0)
{
String strRead = Serial.readStringUntil('\n');
if (strRead.indexOf("RGB=")!= -1)
{
int commaIndex1 = strRead.indexOf(",");
int commaIndex2 = strRead.indexOf(",", commaIndex1 + 1);
int redValue = strRead.substring(4, commaIndex1).toInt();
int greenValue = strRead.substring(commaIndex1 + 1,commaIndex2).toInt();
int blueValue = strRead.substring(commaIndex2 + 1, strRead.length()).toInt();
Serial.print("red:"); Serial.println(redValue);
Serial.print("green:"); Serial.println(greenValue);
Serial.print("blue:"); Serial.println(blueValue);
}
}
}
3. RGB=빨간,노랑,녹색 숫자값 입력받아 RGB LED 제어하기
더보기
#define LED_RED 5
#define LED_YELLOW 6
#define LED_GREEN 11
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available() > 0)
{
String strRead = Serial.readStringUntil('\n');
if (strRead.indexOf("RGB=")!= -1)
{
int commaIndex1 = strRead.indexOf(",");
int commaIndex2 = strRead.indexOf(",", commaIndex1 + 1);
int redValue = strRead.substring(4, commaIndex1).toInt();
int greenValue = strRead.substring(commaIndex1 + 1,commaIndex2).toInt();
int blueValue = strRead.substring(commaIndex2 + 1, strRead.length()).toInt();
redLedSet(redValue,greenValue,blueValue);
Serial.println("OKRGB");
}
}
}
void redLedSet(int red, int green, int blue){
analogWrite(LED_RED, red);
analogWrite(LED_YELLOW, green);
analogWrite(LED_GREEN,blue);
}
▷ RGB=255.0.0 빨간색만 / RGB=0.255.0 노랑만 / RGB=0,0.255 초록만/ 128.128.128 모두 중간밝기
<<<서보모터 제어하기>>>>>
1. 시리얼통신으로 서보모터 명령어 입력받아 시리얼 통신으로 값 전송하기>>>>>
- 메시지를 받아서 시리얼모니터에 출력하는 코드 작성
더보기
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available()>0)
{
String strRead = Serial.readStringUntil('\n');
if (strRead.indexOf("SERVO=")!=-1)
{
int servoDigree = strRead.substring(6,strRead.length()).toInt();
if(servoDigree<=180)
{
Serial.print("SERVO DIGREE:");
Serial.println(servoDigree);
}
else Serial.println("error digree");
}
}
}
2. 명령어 입력받아서 서보모터를 제어하는 코드를 추가합니다.
더보기
#include <Servo.h>
#define SERVO_PIN 8
Servo myservo;
void setup(){
Serial.begin(9600);
myservo.attach(SERVO_PIN);
}
void loop(){
if (Serial.available()>0)
{
String strRead = Serial.readStringUntil('\n');
if (strRead.indexOf("SERVO=")!=-1)
{
int servoDigree = strRead.substring(6,strRead.length()).toInt();
if(servoDigree<=180)
{
myservo.write(servoDigree);
Serial.println("OKSERVO");
}
else Serial.println("error digree");
}
}
}
180도를 넘으면 error 뜨고, 180도 이하에서는 각도가 제어되고 OKSERVO라는 응답이옴.