zigmundbalash: (Default)
[personal profile] zigmundbalash
Сегодня продолжу освоение платформы Arduino, взяв за основу предыдущую схему с тремя диодами http://zigmund-balash.livejournal.com/341329.html. Автономное мигание, конечно интересно, но для будущих опытов с разными датчиками, вроде температуры или освещенности, нужно уметь выводить куда-то данные с этих датчиков. Самое простое — вывести их на последовательный порт Serial. Но перед тем, как начать выводить данные, поупражняюсь в их вводе, тем более что уже готовая схема для этого очень подходит. Это вообще очень удобно — брать уже что-то работающее и учить это делать что-то еще или что-то иначе. Так и поступлю.

Итак, схема с тремя светодиодами старая. Только «землю» я взял не из пина PWR.GND, а с пина GND рядом с DIGITAL.13 пином. Понятно, что счетчик заработал, правда не сразу — я при новой сборке подключил два из трех резисторов к той же ножке диода, что и землю. Stupid me. Поправил — замигало.

Монитор порта запускается из той же среды разработки IDE нажатием Ctrl-Shift-M или через меню Инструменты->Монитор_Порта. Удобно, не нужны никакие отдельные утилиты вроде PuTTY.

Для справки по работе с передачей данных смотрю сюда: https://www.arduino.cc/en/Tutorial/ReadASCIIString, но у меня будет упрощенный набор команд управления. Я буду отсылать одну букву из набора {'r', 'g', 'b'} и она будет включать или выключать диод. то есть, говоря умно, инвертировать его свечение.

Программа выглядит так:
//объявляем переменные с номерами пинов
int r = 11;
int g = 12;
int b = 13;
String str;
int r_state = LOW;
int g_state = LOW;
int b_state = LOW;

void setup() //процедура setup
{
Serial.begin(9600); // Включаем порт
//объявляем используемые порты
pinMode(r, OUTPUT);
pinMode(g, OUTPUT);
pinMode(b, OUTPUT);
}

void loop() //процедура loop
{
while (Serial.available() > 0) { // Считываем команду
str = Serial.readString();
if(str.length() > 0) // Защита от пустых строк
{
if(str[0] == 'r')
{
r_state = (r_state == HIGH ? LOW : HIGH); // инверсия красного
digitalWrite(r, r_state); //включаем красный
}
if(str[0] == 'g')
{
g_state = (g_state == HIGH ? LOW : HIGH);
digitalWrite(g, g_state); //включаем зеленый
}
if(str[0] == 'b')
{
b_state = (b_state == HIGH ? LOW : HIGH);
digitalWrite(b, b_state); //включаем синий
}
}
}
}


Видео не прилагаю, так как там ничего интересного. Отсылаю буквы, включаю и выключаю диоды. Эту программу можно усложнять, но мне пока хватит. Наблюдаемая странность — если быстро отправлять по букве, то плата не успевает это обработать, куда-то теряются следующие буквы, только первая влияет. Но я подумаю об этом после.

Еще замечание. При отправке на плату данных на ней мигает светодиод RX. Вангую, что когда позже буду отправлять что-то с платы, то будет мигать TX. Это магия.

И еще. По видео закрадывается крамольная мысль завести треногу и снимать для Youtube видео этих опытов. Но я пока с собой справляюсь.

Profile

zigmundbalash: (Default)
Zigmund Balash

October 2018

S M T W T F S
 123456
78 910111213
141516 17181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 14th, 2025 06:34 pm
Powered by Dreamwidth Studios