Здравствуйте. Решил разобрать библиотеку ultrasonic.h. Понятно все кроме выражения: Ultrasonic(uint8_t sigPin) : Ultrasonic(sigPin, sigPin) {}; Код (C++): #ifndef Ultrasonic_h #define Ultrasonic_h /* * Values of divisors */ #define CM 28 #define INC 71 class Ultrasonic { public: Ultrasonic(uint8_t sigPin) : Ultrasonic(sigPin, sigPin) {}; Ultrasonic(uint8_t trigPin, uint8_t echoPin, unsigned long timeOut = 20000UL); unsigned int distanceRead(); unsigned int distanceRead(uint8_t und); void setTimeout(unsigned long timeOut) {timeout = timeOut;} private: uint8_t trig; uint8_t echo; boolean threePins = false; unsigned long timeout; unsigned int timing(); }; #endif // Ultrasonic_h Я так понимаю это конструктор класса Ultrasonic, который присваивает значение sigPin к uint8_t sigPin, но что делает и куда записывается второй аргумент(sigPin)? И если я ошибаюсь, тогда что это? На всякий случай оставляю код основного файла. Код (C++): #include <Arduino.h> #include "Ultrasonic.h" Ultrasonic::Ultrasonic(uint8_t trigPin, uint8_t echoPin, unsigned long timeOut) { trig = trigPin; echo = echoPin; threePins = trig == echo ? true : false; pinMode(trig, OUTPUT); pinMode(echo, INPUT); timeout = timeOut; } unsigned int Ultrasonic::timing() { if (threePins) pinMode(trig, OUTPUT); digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); if (threePins) pinMode(trig, INPUT); return pulseIn(echo, HIGH, timeout); // duration } unsigned int Ultrasonic::distanceRead() { /* * If the unit of measure is not passed as a parameter, * by default, it will return the distance in centimeters. * To change the default, replace CM by INC. */ return distanceRead(CM); } unsigned int Ultrasonic::distanceRead(uint8_t und) { return timing() / und / 2; //distance by divisor }
Это конструктор, который вызывает вторую перегрузку конструктора. То бишь следующую строчку, с одинаковыми двумя первыми аргументами.