Как стать автором
Поиск
Написать публикацию
Обновить

Когда хочется снега…

Время на прочтение3 мин
Количество просмотров5.7K
Всем привет!

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


(КДПВ)

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



Правда пока я собирался с мыслями в предновогодней суете — всё немножко изменилось…



Но, не смотря на это, не могу не поделиться мыслью куда ещё можно засунуть закупленные на ebay и бесцельно валяющиеся ардуины. Тем более страна у нас большая и снега на всю не хватает :)
В общем сидел я, скучал по отсутствию снега за окном, а руки чесались чего-нибудь состряпать. Отсюда и родилась мысль собрать из говна и палок Arduino Nano, LCD экрана 16x2 и I2C-адаптера к нему вот такую развлекушку:



Приводить схемы подключения нарисованные во Fritzing не буду — кто с ардуиной знаком и так всё поймёт, а кто нет — дак тому полезно по-гуглить да по-яндексить. Но скетчем естественно поделюсь. За него прошу не пинать, ибо образования у меня сплошь гуманитарные.

Скетч
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>	// внешняя библиотека LCD по I2C

LiquidCrystal_I2C lcd(0x27,16,2);  // адрес экрана 0x27, символов 16, строк 2

int s1;	// позиция снежинки №1
int s2;
int s3;
int s4;
int s5;
int s6;
int s7;

int t;	// время задержки

	void setup()
	{
	  lcd.init();	// инициализируем экран
	  lcd.backlight();	// программно включаем фоновую подсветку
	  lcd.clear();	// чистим экран
	  
	  Serial.begin(9600);
	 
	  t = 600; // устанавливаем время задержки
	}

		void loop()
		{
			//----------Работаем с первой строкой LCD----------
			
			s1 = random(3);
			s2 = s1 + random(2,5);
			s3 = s2 + random(2,5);
			s4 = s3 + random(2,5);
			s5 = s4 + random(2,5);
			s6 = s5 + random(2,5);
			s7 = s6 + random(2,5);
			
			lcd.setCursor(0, 0);
			lcd.print("                ");  //затираем строку пробелами
			
			lcd.setCursor(s1, 0);
			lcd.write('*');

			lcd.setCursor(s2, 0);
			lcd.write('*');

			lcd.setCursor(s3, 0);
			lcd.write('*');

			lcd.setCursor(s4, 0);
			lcd.write('*');
			
			lcd.setCursor(s5, 0);
			lcd.write('*');

			lcd.setCursor(s6, 0);
			lcd.write('*');

			lcd.setCursor(s7, 0);
			lcd.write('*');    

		    Serial.print (s1);
            Serial.print (" ");
            Serial.print (s2);
            Serial.print (" ");
			Serial.print (s3);
            Serial.print (" ");
			Serial.print (s4);
            Serial.print (" ");
			Serial.print (s5);
            Serial.print (" ");
			Serial.print (s6);
            Serial.print (" ");
			Serial.print (s7);
			Serial.println ();
		    
		  	delay (t);
			
			//----------Работаем со второй строкой LCD----------
			
			lcd.setCursor(0, 1);
			lcd.print("                ");	//затираем строку пробелами
			
			lcd.setCursor(s1 + random (-1, 2), 1);
			lcd.write('*');
			
			lcd.setCursor(s2 + random (-1, 2), 1);
			lcd.write('*');

			lcd.setCursor(s3 + random (-1, 2), 1);
			lcd.write('*');

			lcd.setCursor(s4 + random (-1, 2), 1);
			lcd.write('*');
		 
			lcd.setCursor(s5 + random (-1, 2), 1);
			lcd.write('*');
			
			lcd.setCursor(s6 + random (-1, 2), 1);
			lcd.write('*');
			
			lcd.setCursor(s7 + random (-1, 2), 1);
			lcd.write('*');  
			   
			delay (t);
		}



К сожалению экранчики у меня в наличии только двухстрочные. :( На четырёхстрочном, я думаю, выглядеть будет гораздо интересней (код нужно будет немножко дописать). Кстати, если у вас такие есть — выкладывайте видео в комментариях. Ну и если кто код может сделать более красивым, тоже буду рад видеть в комментариях ;).

Библиотеку для экрана берём отсюда, тк с вашей может и не заработать (испробовано на кошках).
И напоследок видео:



Всем спасибо за внимание и С Новым Годом!

Теги:
Хабы:
Всего голосов 21: ↑12 и ↓9+3
Комментарии4

Публикации

Ближайшие события