Помогите разобраться. Я новичок. В чем разница между int, const и #define ... Вот примеры, и все работает: Код (C++): int LED_PIN = 9; int POT_PIN = 0; void setup() { pinMode(LED_PIN, OUTPUT); pinMode(POT_PIN,INPUT); } void loop() { int rotation, brightness; rotation = analogRead(POT_PIN); brightness = rotation / 4; analogWrite(LED_PIN, brightness); } Код (C++): #define LED_PIN 9 #define POT_PIN A0 void setup() { pinMode(LED_PIN, OUTPUT); pinMode(POT_PIN,INPUT); } void loop() { int rotation, brightness; rotation = analogRead(POT_PIN); brightness = rotation / 4; analogWrite(LED_PIN, brightness); } Что за что отвечает?
int (и остальные типы) -- переменная, которой выделяется место в оперативной памяти (в контексте AVR такая память называется SRAM -- её очень мало, если есть возможность, то лучше определить константой через #define или const). #define -- директива препроцессору, перед компиляцией препроцессор пройдется по всем исходникам и заменит переменную на значение. const int (и остальные типы с модификатором const) -- константа определенного типа, результат зависит от компилятора и опций сборки. Но в большинстве случаев Вы не заметите разницы между #define или const (дело вкуса, что использовать). PS: утверждения справедливы для С/С++ компиляторов из семейства GCC (хотя, наверно, можно применить и в отношении других С/С++ компиляторов)
Содержимое переменных (int, byte, long, float) можно изменить в ходе работы программы. Например, присвоить переменной temp значение 23,6 с датчика температуры. Константы изменять нельзя. Вообще нельзя. Табу. Их значение всегда такое, как присвоено в скетче. Например, размеры знакоместа для LCD дисплея: width = 16; height = 2; #define это синоним, для удобства программиста. Может быть не только числом, но и любым куском кода. При компиляции (переводу скетча в бинарный код) компилятор тупо меняет такой синоним на его содержимое. К примеру, объявление в начале скетча: Код (C++): #define BUTTON_PIN 4 // пин для кнопки #define SENSOR_PIN 5 // пин для магнитного датчика #define SIREN_PIN 8 // пин для транзистора, подключенного к сирене #define BUTTON_PRESSED (digitalRead(BUTTON_PIN)) // проверка нажатия кнопки #define SENSOR_ACTIVE (digitalRead(SENSOR_PIN)) // проверка датчика на двери #define SIREN_ON (digitalWrite(SIREN_PIN, HIGH)) // подаем питание на сирену #define SIREN_OFF (digitalWrite(SIREN_PIN, LOW)) // подаем питание на сирену позволит написать такой легкочитаемый даже через 3 года код: Код (C++): if (SENSOR_ACTIVE) SIREN_ON; if (BUTTON_PRESSED) SIREN_OFF; вместо классического: Код (C++): if (digitalRead(5)) { digitalWrite(8, HIGH); } if (digitalRead(4)) { digitalWrite(8, LOW); } Еще с помощью #define можно реализовать режим отладки - когда используется вывод нужных значений переменных в консоль, а при нормальной работе устройства, когда это режим отключен, в консоль ничего не выводится, и даже память не занимается неиспользуемыми библиотеками.
#define - это макрооопределение, позволяющее заменять объемный фрагмент кода более простой конструкцией. Причем в макроопределении можно использовать параметры. Константы - самое простое, но не единственное применение макроопределений. Например, можно сделать так: Код (C): #define WRITE_TO_SERIAL(text,val) {Serial.print(text); \ Serial.print(": "); \ Serial.println(val);} а потом, вместо того, чтобы повторять эту конструкцию, использовать такое: Код (C): WRITE_TO_SERIAL("text",122); , чтобы вывести значение с описанием. Это получается аналогично использованию inline функций, т.е. таких, которые не вызываются, а код их подставляется при компиляции в место вызова.