arduino

[arduino] c언어

솧이 2022. 9. 14. 20:24

* 정수 / 정수 -> 정수

* 정수/ 실수 -> 실수

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