Что произойдет если создать директиву define high low
Перейти к содержимому

Что произойдет если создать директиву define high low

  • автор:

Эксперимент 2. Маячок с нарастающей яркостью

В этом эксперименте мы задаем различные уровни яркости светодиода.

Видеоурок

Прочтите перед выполнением

Список деталей для эксперимента

1 беспаечная макетная плата
1 резистор номиналом 220 Ом

Для дополнительного задания

еще 1 светодиод
еще 1 резистор номиналом 220 Ом
еще 2 провода

Принципиальная схема

Схема на макетке

Обратите внимание

Не любой порт Arduino поддерживает широтно-импульсную модуляцию, если вы хотите регулировать напряжение, вам подойдут пины, помеченные символом тильда «~». Для Arduino Uno это пины 3, 5, 6, 9, 10, 11

Скетч

// даём разумное имя для пина №9 со светодиодом // (англ. Light Emitting Diode или просто «LED») // Так нам не нужно постоянно вспоминать куда он подключён #define LED_PIN 9 void setup() { // настраиваем пин со светодиодом в режим выхода, // как и раньше pinMode(LED_PIN, OUTPUT); } void loop() { // выдаём неполное напряжение на светодиод // (он же ШИМ-сигнал, он же PWM-сигнал). // Микроконтроллер переводит число от 0 до 255 к напряжению // от 0 до 5 В. Например, 85 — это 1/3 от 255, // т.е. 1/3 от 5 В, т.е. 1,66 В. analogWrite(LED_PIN, 85); // держим такую яркость 250 миллисекунд delay(250); // выдаём 170, т.е. 2/3 от 255, или иными словами — 3,33 В. // Больше напряжение — выше яркость! analogWrite(LED_PIN, 170); delay(250); // все 5 В — полный накал! analogWrite(LED_PIN, 255); // ждём ещё немного перед тем, как начать всё заново delay(250); }

Пояснения к коду

Идентификаторы переменных, констант, функций (в этом примере идентификатор LED_PIN ) являются одним словом (т.е. нельзя создать идентификатор LED PIN ).

Идентификаторы могут состоять из латинских букв, цифр и символов подчеркивания _ . При этом идентификатор не может начинаться с цифры.

PRINT // верно PRINT_3D // верно MY_PRINT_3D // верно _PRINT_3D // верно 3D_PRINT // ошибка ПЕЧАТЬ_3Д // ошибка PRINT:3D // ошибка

Регистр букв в идентификаторе имеет значение. Т.е. LED_PIN , LED_pin и led_pin с точки зрения компилятора — различные идентификаторы

Идентификаторы, создаваемые пользователем, не должны совпадать с предопределенными идентификаторами и стандартными конструкциями языка; если среда разработки подсветила введенный идентификтор каким-либо цветом, замените его на другой

Директива #define просто говорит компилятору заменить все вхождения заданного идентификатора на значение, заданное после пробела (здесь 9 ), эти директивы помещают в начало кода. В конце данной директивы точка с запятой ; не допустима

Названия идентификаторов всегда нужно делать осмысленными, чтобы при возвращении к ранее написанному коду вам было ясно, зачем нужен каждый из них

Также полезно снабжать код программы комментариями: в примерах мы видим однострочные комментарии, которые начинаются с двух прямых слэшей // и многострочные, заключённые между /* */

// однострочный комментарий следует после двойного слеша до конца строки /* многострочный комментарий помещается между парой слеш-звездочка и звездочка-слеш */

комментарии игнорируются компилятором, зато полезны людям при чтении давно написанного, а особенно чужого, кода

Функция analogWrite(pin, value) не возвращает никакого значения и принимает два параметра:
pin — номер порта, на который мы отправляем сигнал

value — значение скважности ШИМ, которое мы отправляем на порт. Он может принимать целочисленное значение от 0 до 255, где 0 — это 0%, а 255 — это 100%

Вопросы по информатике. Arduino

.Какие из следующих идентификаторов корректны и не вызовут ошибку?
13pin
MOTOR_1
контакт_светодиода
sensor value
leftServo
my-var
distance_eval2
2.Что произойдет, если создать директиву #define HIGH LOW?
3.Почему мы не сможем регулировать яркость светодиода, подключенного к порту 7?
4.Какое усреднённое напряжение мы получим на пине 6, если вызовем функцию analogWrite(6, 153)?
5.Какое значение параметра value нужно передать функции analogWrite, чтобы получить усреднённое напряжение 2 В?

Лучший ответ

Мда.
Одни с боем выклянчивают денег у родителей для покупки
Arduino, что бы самостоятельно начать осваивать программирование
микроконтроллеров, другие самостоятельно думать не хотят,
информацию в интернете искать не хотят, хотят что бы за них
другие думали. Так не пойдет.

Данила ОрловУченик (104) 4 года назад

пошел домой

Остальные ответы

Вопросы для проверки себя

Эксперимент 3. Светильник с управляемой яркостью

← Маячок с нарастающей яркостью | Оглавление | Терменвокс →

В этом эксперименте мы меняем яркость светодиода, вращая ручку переменного резистора.

Прочтите перед выполнением

  • Делитель напряжения

Список деталей для эксперимента

  • 1 плата Arduino Uno
  • 1 беспаечная макетная плата
  • 1 светодиод
  • 1 резистор номиналом 220 Ом
  • 6 проводов «папа-папа»
  • 1 потенциометр

Достарыңызбен бөлісу:

Arduino.ru

то встает вопрос можно ли поменять глобально на нескольких пинах значения HIGH и LOW для того что бы не переписывать и что бы код остался читабельным и логически правильным. Может функцию какую дописать по типу

if(digitalRead(pin) == invertFunc(HIGH)) < //do_something >invertFunc(arg) < if(arg==HIGH) < arg=LOW; return arg; >if(arg==LOW) < arg=HIGH; return arg; >>

Может кто подскажет другое решение что бы минимизировать движения, покупать другой блок реле не выход)

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 17:42
Зарегистрирован: 19.10.2016

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 17:43
Зарегистрирован: 12.12.2018
sadman41 пишет:

не понял, можно объяснить?

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 17:46

Jeka_M аватар

Зарегистрирован: 06.07.2014

Zara других вариантов нет: либо переписывать участки программы, либо инвертировать сигнал аппаратно.

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 17:47
Зарегистрирован: 19.10.2016

Предполагается, что люди, задающие вопрос в разделе «программирование», догадаются в гугле поискать #define

А если нет, так и нет.

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 17:49
Зарегистрирован: 12.12.2018
sadman41 пишет:

Предполагается, что люди, задающие вопрос в разделе «программирование», догадаются в гугле поискать #define

А если нет, так и нет.

что оно делает я знаю, не понял почему у вас константа с одним именем имеет разные значения, или это просто для примера

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 17:58
Зарегистрирован: 19.10.2016

Просто для примера — как инвертируются значения без всяких функций.

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 21:04

Jeka_M аватар

Зарегистрирован: 06.07.2014

Для Zara: всё равно придётся вручную менять в программе HIGH на ON в нужных местах. И это займёт столько же времени, сколько поменять HIGH на LOW. Применить директиву #define имеет смысл если Вы планируете периодически менять модуль реле с другим управляющим логическим уровнем. Если же это нужно сделать однократно, то смысла не имеет.

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 18:32
Зарегистрирован: 01.10.2015

А просто писать изначально нужно по нормальному, что бы потом не бегать и не менять по всей программе, при этом ещё и забыть где-нибудь. (

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 18:56

ЕвгенийП аватар

Зарегистрирован: 25.05.2015
Zara пишет:

можно ли поменять глобально на нескольких пинах значения HIGH и LOW для того что бы не переписывать и что бы код остался читабельным

Для того, чтобы код был читабельным, его нужно переписать. Тогда и с изменениями проблемы не будет от слова совсем.

Вот скажите, на кой, простите мой французский, хер, Вы включаете реле конструкцией

Это по-Вашему читабельно?

Всегда делайте по уму:

static const bool bRealyOn = HIGH; inline void turnRelayOn(const int8_t pin) < digitalWrite(pin, bRealyOn); >inline void turnRelayOff(const int8_t pin)

и везде используйте turnRelayOn и turnRelayOff !

А если и приспичит изменить логику, так в одном месте одну константу поменять и всего делов.

Не ленитесь, перепишите.

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 21:03
Зарегистрирован: 12.12.2018
ЕвгенийП пишет:
Zara пишет:

можно ли поменять глобально на нескольких пинах значения HIGH и LOW для того что бы не переписывать и что бы код остался читабельным

Для того, чтобы код был читабельным, его нужно переписать. Тогда и с изменениями проблемы не будет от слова совсем.

Вот скажите, на кой, простите мой французский, хер, Вы включаете реле конструкцией

Это по-Вашему читабельно?

Всегда делайте по уму:

static const bool bRealyOn = HIGH; inline void turnRelayOn(const int8_t pin) < digitalWrite(pin, bRealyOn); >inline void turnRelayOff(const int8_t pin)

и везде используйте turnRelayOn и turnRelayOff !

А если и приспичит изменить логику, так в одном месте одну константу поменять и всего делов.

Не ленитесь, перепишите.

Круто, спасибо) по неопытности все)

  • Войдите на сайт для отправки комментариев

Вс, 19/05/2019 — 21:07
Зарегистрирован: 12.12.2018
Green пишет:

А просто писать изначально нужно по нормальному, что бы потом не бегать и не менять по всей программе, при этом ещё и забыть где-нибудь. (

Это да, тут вы правы, но нельзя вот взять и написать без опыта что то прям вот хорошее, как нельзя сделать космический корабль если только вчера колесо изобрел

  • Войдите на сайт для отправки комментариев

Пнд, 20/05/2019 — 09:37

ЕвгенийП аватар

Зарегистрирован: 25.05.2015
Zara пишет:
нельзя сделать космический корабль если только вчера колесо изобрел

Ну, если изобрёл, то всё в итоге получится. Хуже, когда за космических корабль берутся люди никогда ничего не изобретшие и не способные изобрести.

  • Войдите на сайт для отправки комментариев

Пнд, 20/05/2019 — 10:54

DetSimen аватар

Зарегистрирован: 25.01.2017

#define HIGH LOW

  • Войдите на сайт для отправки комментариев

Пнд, 20/05/2019 — 11:34
Зарегистрирован: 17.08.2015
DetSimen пишет:

#define HIGH LOW

угу. а классический #define true false ещё круче.

  • Войдите на сайт для отправки комментариев

Пнд, 20/05/2019 — 12:01
anatoli_nik
Зарегистрирован: 17.01.2019

В начале программы опрашиваешь все входы и пихаешь в переменные, потом что-то делаешь, а в конце программы из переменных пихаешь на выходы. В итоге искать по всей программе не нужно. Как пример:

#define pin_knopka_pusk 2 #define pin_knopka_stop 3 #define pin_puskatel 4 boolean knopka_pusk; boolean knopka_stop; boolean puskatel; //************************ void inputRead() < knopka_pusk=!digitalRead(pin_knopka_pusk); //инверсное чтение для удобства восприятия knopka_stop=!dgitalRead( pin_knopka_stop); //инверсное чтение для удобства восприятия >void outputWrite() < digitalWrite(pin_puskatel, puskatel); //прямой вывод //digitalWrite(pin_puskatel, !puskatel); //инверсный вывод >//*************************** void setup() < pinMode(pin_knopka_pusk, INPUT_PULLUP); pinMode(pin_knopka_stop, INPUT_PULLUP); pinMode(pin_puskatel, OUTPUT); >void loop() < inputRead(); //читаем входы //что-то делаем if (knopka_pusk&&(!knopka_stop)) puskatel = HIGH; else if (knopka_stop) puskatel = LOW; outputWrite(); //пишем выходы >
  • Войдите на сайт для отправки комментариев

Пнд, 20/05/2019 — 12:13

andycat аватар

Зарегистрирован: 07.09.2017
ЕвгенийП пишет:

Всегда делайте по уму:

static const bool bRealyOn = HIGH; inline void turnRelayOn(const int8_t pin) < digitalWrite(pin, bRealyOn); >inline void turnRelayOff(const int8_t pin)

и везде используйте turnRelayOn и turnRelayOff !

Красиво, спасибо, пригодится.

  • Войдите на сайт для отправки комментариев

Пнд, 20/05/2019 — 12:23
Зарегистрирован: 19.10.2016

Интересный факт — само имя переменной как бы подразумевает невысказанный программистом вопрос: действительно ли On равно HIGH. Что даже придаёт некий философский смысл функциям, заставляющий задуматься — On или не On.

  • Войдите на сайт для отправки комментариев

Пнд, 20/05/2019 — 18:08
Зарегистрирован: 01.10.2015

Ага, толи дело оn(LED), off(LED) — всё ясно как божий день, какие вопросы?

  • Войдите на сайт для отправки комментариев

Сб, 01/06/2019 — 19:41
Зарегистрирован: 16.11.2017

дефайнить конечно удобно, а решение от Евгения П. — вообще красиво. Но что делать с «маленькими хитростями»? Типа тех, что компилятор относится спокойно и к HIGH и к true, и к любому числу больше 0.

К примеру, digitalWrite(led, true), digitalWrite(led, HIGH), digitalWrite(led, 8) — засветит светодиод, а digitalWrite(led, false), digitalWrite(led, LOW), digitalWrite(led, 0) — погасит. Очень удобно использовать без доп. обработки или доп.переменных в коде. Если нужно перевернуть, работает даже такое digitalWrite(led, !8) — выключит, а digitalWrite(led, !0) — включит.

У меня в одном проекте управление DTMF так сделано — 0 выключить, а 9 — включить. В digitalWrite() просто передаю второе число из кода управления, удобно, зараза.

А вот как такое задефайнить или перевернуть наоборот? Мне не надо, но просто интерсно.

  • Войдите на сайт для отправки комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *