Азбука Ардуино
Модератор: Gnat
Азбука Ардуино
MOT, Правильно!
А теперь попробуйте вместо переменных поставить оператор подмены #define и посмотрите как изменится размер скетча.
А теперь попробуйте вместо переменных поставить оператор подмены #define и посмотрите как изменится размер скетча.
С уважением Владимир.
- Andrey.I
- Сообщения: 1734
- Зарегистрирован: Вт июл 02, 2013 1:21 pm
- Откуда: Москва
- Контактная информация:
Азбука Ардуино
Ошибка нашлась, странно, что её при компиляции не видно. Наверное подобные вещи трудно найти, если при написании программы ошибся.
Так же публикую и прячу потом правильный ответ гляну.
Так же публикую и прячу потом правильный ответ гляну.
С уважением, Андрей
- Andrey.I
- Сообщения: 1734
- Зарегистрирован: Вт июл 02, 2013 1:21 pm
- Откуда: Москва
- Контактная информация:
Азбука Ардуино
Глянул, вроде как правильно.
...а тут без изменений, что то не так?
С уважением, Андрей
- MOT
- Сообщения: 2278
- Зарегистрирован: Сб дек 16, 2017 7:58 pm
- Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир
Азбука Ардуино
Andrey.I, Андрей я не знаю как в этом компиляторе (может он упрощённый какой-нибудь), но по идее должно быть предупреждение и при согласии дальше компилировать происходит "явное преобразование или сужение типов". Если я не прав - Владимир SmartAvit поправит меня.
С уважением, Виктор Евгеньевич
Accept Corp.
Accept Corp.
Азбука Ардуино
Как вы правильно заметили Arduino IDE отслеживает только ошибки синтаксиса скетча, а если вы напишите - byte a = 1000; то Arduino IDE ошибку не заметит, а в случае byte a = 100: будет ошибка.
А теперь рассмотрим числовые переменные и арифметические операции с ними.
В не так давно мы рассматривали пример в котором переменная увеличивала свое значение на 100, Period = Period +100 при прохождение этой строки в скетче переменная увеличивается на 100 (было 200 стало 300 далее при следующем цикле 400, 500 и т.д.)
Строка начинается с переменной Period далее идет знак присвоения значения, далее идет число или выражение Period +100 которое присваивается переменной Period, в результате в следующем цикле переменная Period имеет значение на 100 больше.
Знак равно в данном случае выполняет операцию присваивания, он присваивает переменной Period новое значение, определяемое тем, что находится между знаком равенства и точкой с запятой Period +100.
В нашем случае переменной (Period), будет присвоено (=) значение определяемое как значение старого значения +100.
Надеюсь я доступно объяснил операцию присвоения переменной нового значения.
Давайте попробуем при помощи Arduino преобразовать температуру из Цельсия в Фаренгейт для чего исходное значение температуры нужно умножить на 9 далее разделить на 5 и прибавить 32.
void setup()
{
Serial.begin(9600); // Настройка скорости порта
int temp_C = 256;// Присвоение значения переменной название переменной можно записывать так для наглядности
int temp_F = temp_C *9/5+ 32;
Serial.println(temp_F); // Вывод в окно Serial Monitor значения вычисления
}
void loop()
{}
Попробуйте написать скетч для обратного преобразования градусов - Фаренгейт в Цельсия
Обратите внимание на строчку
int temp_C = 256;
в этой строке мы выполнили две операции во первых объявили переменную а во вторых присвоили ей значение 256, по сути это могло бы выглядеть так
int temp_C;
temp_C = 256;
также и в этой строке
int temp_F = temp_C *9/5+ 32;
или
int temp_F;
temp_F = temp_C *9/5+ 32;
Первый вариант более продвинутый )
Каждая переменная объявляется всего один раз
int temp_C;
int temp_F;
в нашем случае это переменные int c именем temp_C и temp_F
Но самим переменным можно сколько угодно присваивать новые значения
temp_C = 256;
temp_C = 2;
temp_C = -1000;
temp_C = С+1;
Для понимания приоритета выполнения арифметических вычислений можно написать так
temp_F= ((temp_C*9)/5)+32;
Сложная задача попробуйте самостоятельно сделать скетч в котором будет идти циклическое преобразование температуры из Цельсия в Фаренгейт от абсолютного нуля с шагом в 10 градусов и данные будут выводится в окно Serial Monitor.
А теперь рассмотрим числовые переменные и арифметические операции с ними.
В не так давно мы рассматривали пример в котором переменная увеличивала свое значение на 100, Period = Period +100 при прохождение этой строки в скетче переменная увеличивается на 100 (было 200 стало 300 далее при следующем цикле 400, 500 и т.д.)
Строка начинается с переменной Period далее идет знак присвоения значения, далее идет число или выражение Period +100 которое присваивается переменной Period, в результате в следующем цикле переменная Period имеет значение на 100 больше.
Знак равно в данном случае выполняет операцию присваивания, он присваивает переменной Period новое значение, определяемое тем, что находится между знаком равенства и точкой с запятой Period +100.
В нашем случае переменной (Period), будет присвоено (=) значение определяемое как значение старого значения +100.
Надеюсь я доступно объяснил операцию присвоения переменной нового значения.
Давайте попробуем при помощи Arduino преобразовать температуру из Цельсия в Фаренгейт для чего исходное значение температуры нужно умножить на 9 далее разделить на 5 и прибавить 32.
void setup()
{
Serial.begin(9600); // Настройка скорости порта
int temp_C = 256;// Присвоение значения переменной название переменной можно записывать так для наглядности
int temp_F = temp_C *9/5+ 32;
Serial.println(temp_F); // Вывод в окно Serial Monitor значения вычисления
}
void loop()
{}
Попробуйте написать скетч для обратного преобразования градусов - Фаренгейт в Цельсия
Обратите внимание на строчку
int temp_C = 256;
в этой строке мы выполнили две операции во первых объявили переменную а во вторых присвоили ей значение 256, по сути это могло бы выглядеть так
int temp_C;
temp_C = 256;
также и в этой строке
int temp_F = temp_C *9/5+ 32;
или
int temp_F;
temp_F = temp_C *9/5+ 32;
Первый вариант более продвинутый )
Каждая переменная объявляется всего один раз
int temp_C;
int temp_F;
в нашем случае это переменные int c именем temp_C и temp_F
Но самим переменным можно сколько угодно присваивать новые значения
temp_C = 256;
temp_C = 2;
temp_C = -1000;
temp_C = С+1;
Для понимания приоритета выполнения арифметических вычислений можно написать так
temp_F= ((temp_C*9)/5)+32;
Сложная задача попробуйте самостоятельно сделать скетч в котором будет идти циклическое преобразование температуры из Цельсия в Фаренгейт от абсолютного нуля с шагом в 10 градусов и данные будут выводится в окно Serial Monitor.
С уважением Владимир.
- Andrey.I
- Сообщения: 1734
- Зарегистрирован: Вт июл 02, 2013 1:21 pm
- Откуда: Москва
- Контактная информация:
Азбука Ардуино
Попробовал на практике полученные знания реализовать. Остался кусочек ленты RGB (делал на даче подсветку), блок питания 12В 5А нашелся в хозяйстве, подкупил транзисторы IRF520. Спаял, за недолгое время, транзисторный ключ на три канала. Сему ключа содрал с китайского модуля
и подключил к Ардуинки. Заработало! Можно сказать лабораторную работу провел.
Скетч
Было бы не плохо регулировать яркость, тогда на RGB ленте можно сделать плавные переходы одних цветов в другие.
Лента яркая, камеру телефона засвечивает.
SmartAvit,
С задачкой думаю к завтрашнему вечеру справлюсь, сегодня уже отдыхать надо.
и подключил к Ардуинки. Заработало! Можно сказать лабораторную работу провел.
Скетч
Лента яркая, камеру телефона засвечивает.
SmartAvit,
С задачкой думаю к завтрашнему вечеру справлюсь, сегодня уже отдыхать надо.
С уважением, Андрей
Азбука Ардуино
Andrey.I, Круто получилось, как дойдём до урока ШИМ будет плавный переход и больше цветов можно будет получить
С уважением Владимир.
Азбука Ардуино
В языке С++ очень много команд которые понимает Arduino, давайте рассмотрим некоторые из них и как они работают в скетче.
До настоящего времени мы рассматривали варианты скетча, в которых строки программ выполнялись друг за другом.
Если же нам нужно выполнение определенных строк программы при определенных условиях мы можем использовать команду if .
Рассмотрим это на примере скетча, в котором светодиоды мигают с каждым циклом все реже но при достижения некоторого предела происходит возврат в начало программы, для этого будем использовать команду if .
int Led = 13;
int Period = 10;
void setup()
{
pinMode(Led, OUTPUT);
}
void loop()
{
digitalWrite(Led, HIGH);
delay(Period);
digitalWrite(Led, LOW);
delay(Period);
Period = Period + 10;
if (Period > 500) // Если период больше 500
{
Period = 10; // Присваиваем периоду значение 10
}
}
Проверяется условие если переменная if (Period > 500) больше 500 выполняются команды в фигурных скобках, переменной Period = 10; снова присваивается значение 10 и цикл повторяется с начала пока значение переменной Period не станет снова больше 500.
Операторы можно использовать
< меньше
> больше
<= меньше или равно
>= больше или равно
== равно
!= не равно
Урок простой надеюсь всем всё понятно.
Попробуйте самостоятельно сделать этот скетч с переменной частотой мигания для шести светодиодов.
До настоящего времени мы рассматривали варианты скетча, в которых строки программ выполнялись друг за другом.
Если же нам нужно выполнение определенных строк программы при определенных условиях мы можем использовать команду if .
Рассмотрим это на примере скетча, в котором светодиоды мигают с каждым циклом все реже но при достижения некоторого предела происходит возврат в начало программы, для этого будем использовать команду if .
int Led = 13;
int Period = 10;
void setup()
{
pinMode(Led, OUTPUT);
}
void loop()
{
digitalWrite(Led, HIGH);
delay(Period);
digitalWrite(Led, LOW);
delay(Period);
Period = Period + 10;
if (Period > 500) // Если период больше 500
{
Period = 10; // Присваиваем периоду значение 10
}
}
Проверяется условие если переменная if (Period > 500) больше 500 выполняются команды в фигурных скобках, переменной Period = 10; снова присваивается значение 10 и цикл повторяется с начала пока значение переменной Period не станет снова больше 500.
Операторы можно использовать
< меньше
> больше
<= меньше или равно
>= больше или равно
== равно
!= не равно
Урок простой надеюсь всем всё понятно.
Попробуйте самостоятельно сделать этот скетч с переменной частотой мигания для шести светодиодов.
С уважением Владимир.
- Andrey.I
- Сообщения: 1734
- Зарегистрирован: Вт июл 02, 2013 1:21 pm
- Откуда: Москва
- Контактная информация:
Азбука Ардуино
А я на этом остановился, дальше не пошел, это еще не разглядывал . Написал себе алгоритм (похожий на ваш) но мигает не так как прошу, длинный скетч, но кое что получается. Времени маловато и спать хочется .
Василий Васильевич. Моя галерея.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.
- Andrey.I
- Сообщения: 1734
- Зарегистрирован: Вт июл 02, 2013 1:21 pm
- Откуда: Москва
- Контактная информация:
Азбука Ардуино
Попробовал
С переменной лонг попробовал, там ждать долго, два с лишним миллиарда всё таки но если шаг сделать 1000000, то как раз быстренько до обнуления дойдем. Попробовал усложнить задачку, выводить так, чтобы каждому значению С соответствовало своё значение F, получилось.
С уважением, Андрей
- Andrey.I
- Сообщения: 1734
- Зарегистрирован: Вт июл 02, 2013 1:21 pm
- Откуда: Москва
- Контактная информация:
Азбука Ардуино
Василий Васильевич, догоняйте, а то кто будет подсказывать, если вдруг что не получиться.
Парни, если, кто просто читает и думает, что всё понятно и всё получится. Будьте уверены, это не так. Обязательно нужна практика, нужно пробовать самостоятельно делать, чтобы прошло через руки и голову. Это также, как с усилителем Юрия Васильевича, пока читаешь всё понятно, а как только начинаешь делать куча вопросов.
С уважением, Андрей
- Andrey.I
- Сообщения: 1734
- Зарегистрирован: Вт июл 02, 2013 1:21 pm
- Откуда: Москва
- Контактная информация:
Азбука Ардуино
Andrey.I, Андрей отлично, все правильно и видео с треком отличное.
С уважением Владимир.