* 정수 / 정수 -> 정수
* 정수/ 실수 -> 실수
void setup()
{
//정수
//int, long, short
//실수
//float, double
int n;
Serial.println(n); //초기화 안하면 쓰레기값(garbage value) : 메모리에 남아있는 쓰레기값
n = 100;
Serial.println(n);
int m = n / 3; // 정수 / 정수 => 정수
Serial.println(m); // 33.333.. 이 아니라 33 출력 (소수점 이하 절삭)
m = n / 3.0; // 정수 / 실수 => 실수, 실수와의 연산 결과는 언제나 실수 하지만 m은 정수로 선언했기에 정수로 나온다
Serial.println(n / 3.0); // 드디어 소수점 33.33이 나온다
float d = n / 3.0;
Serial.println(d); // 33.33
int input = 1000;
Serial.println(input / 1023); // 0 나온다
Serial.println(input / 1023.0); // 0.98
Serial.println((float)input / 1023); //형변환 연산자 사용 (명시적 형변환)
// 0 ~ 1023 => 0 ~ 2000으로 변환하려면? 매핑하기!
int output = (float)input / 1023 * 2000;
// -> 실수값이 정수로 형변환된다. c언어이기에 가능한 것 괴랄맞아
Serial.println(output);
}
* 배열
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
//상수 (CONSTANT VALUE)
//한번 초기화되면 값의 변경이 불가하다
float PP = 3.14;
PP = 1.2345;
//에러 안난다
const float PPP = 3.14;
// PPP = 1.2345;
//에러 난다. 상수는 값 변경 불가능
//배열
int led[6] = {3, 5, 6, 9, 10, 11}; //정수값 6개를 담는 배열 led 선언
for(int i = 0; i < 6; i++) {
Serial.println(led[i]);
}
float arr1[3] = {0.11, 2.33, 314.}; // c언어는 arr.length 없음
for(int i = 0; i < 3; i++) {
Serial.println(arr1[i]);
}
int arr2[4] = {100}; //배열초깃값을 하나만? 그러면 나머지는 0으로 초기화된다
for(int i = 0; i < 3; i++) {
Serial.println(arr2[i]);
}
}
* 문자열
// 배열과 문자열(string)
// C언어 에선 "문자열" 의 정체는 'char [] 배열' 이다
// C언어의 "문자열"은
// 끝이 '\0' (null 문자) 로 끝나는 'char [] 배열' 이다
void setup()
{
Serial.begin(9600);
//문자타입 vs 문자열
char ch1 = 'a';
Serial.println(ch1); //문자 하나를 담는 데이터타입 char. char 리터럴은 홑따옴표를 사용한다
//문자열
//char 배열로 문자열 표현
char str1[10] = "arduino";
Serial.println(str1);
Serial.println(sizeof(str1)); //배열의 크기
Serial.println(strlen(str1)); //문자열의 크기
char str2[] = "bread";
Serial.println(str2);
Serial.println(sizeof(str2)); //배열의 크기
Serial.println(strlen(str2)); //문자열의 크기
//순환문 사용하여 문자열 출력
int i = 0;
while(str2[i] != '\0') {
Serial.print(str2[i]);
i++;
}
Serial.println();
str2[2] = 'x' //배열 변경이 가능하다
Serial.println(str2);
str2[5] = 'z'; //널문자를 z로 변경하면?
Serial.println(str2); //breadz?
//기본 문자열 배열에 문자열 대입
//str2 = "good"; 불가!!!
strcpy(str2, "good");
Serial.println(str2)l
//문자열 포맷팅
char str3[50];
sprintf(str3, "hello arduino");
Serial.println(str3);
int year = 2022, month = 9, day = 14;
sprintf(str3, "%d-%d-%d", year, month, day);
Serial.println(str3);
sprintf(str3, "%d-%02d-%d", year, month, day); //두칸으로 출력하고 빈공간은 0으로 채운다
Serial.println(str3);
// sprintf의 포맷문자열 안에 들어가는 서식지정자(format specifier) 들
// %d : 10진수 정수로 출력
// %c : 문자로 출력
// %s : 문자열 출력
// %f : 실수로 출력
// %x : 16진수 정수로 출력
// %% : % 출력y); //두칸으로 출력하고 빈공간은 0으로 채운다
sprintf(str3, "%d, %d, %d", year, month, day);
Serial.println(str3);
char str4[] = "James";
char str5[] = "Bond";
sprintf(str3, "my name is %s %s. %d old", str4, str5, 52);
Serial.println(str3);
float f1 = 3.141592;
float f2 = 123.4567;
sprintf(str3, "%f -- %f", f1, f2); //"3.141592 -- 123.4567" 로 결과가 나와야 하는데
Serial.println(str3); //?--? 이렇게 나온다
//실수를 문자열 서식화할 때 dtostrf() 함수 사용. (double to string formatted)
char str6[20], str7[20];
dtostrf(f1, 8, 3, str6); //f1값을 총 8자리 문자열로 만듦 소수점 이하는 3자리
Serial.println(str6);
//두번째엔 소수점을 포함한 전체자릿수, 소수점 자릿수, str3에 담겠다
dtostrf(f2, 5, 2, str7);
Serial.println(str7);
sprintf(str3, "%s -- %s", str6, str7); //"3.141592 -- 123.4567" 로 결과가 나와야 하는데
Serial.println(str3);
//문자열 붙이기 strcat()
strcpy(str3, "hello");
Serial.println(str3);
//serial.println(str3 + "world"); //에러
strcat(str3, "world");
Serial.println(str3);
'arduino' 카테고리의 다른 글
[arduino] 아날로그 LED 막대 (0) | 2022.09.14 |
---|---|
[arduino] 가변저항 LED 깜빡임 (0) | 2022.09.14 |
[arduino] 가변저항 - 아날로그 입력 (0) | 2022.09.14 |
[arduino] PIR 센서 (0) | 2022.09.14 |
[arduino] slide switch 버튼 (0) | 2022.09.14 |