تجربه برنامه نویسی با بلوک دینو حالا تبدیل به یک تجربه ایده آل برای همه کسانی شده که قصد دارند با آردوینو کار کنند و چناچه سرعت و سادگی را بخواهند بلوک دینو میتواند اولین گزینه برای آنها باشد ، در آموزش های قبلی چندین پروژه با این اکوسیستم ایجاد کردیم اما حالا قصد داریم ماژول که بلوک دینو پشتیانی میکند را بررسی کنیم RGB جالبی که بلوک دینو پشتیانی میکند.
مقدمه
در این بخش می خواهیم راه اندازی RGB با بلوک دوینو را انجام بدیم RGB در واقع سه رنگ قرمز ، سبز و آبی تولید میکند که البته امکان اضافه کردن رنگ های بیشتر به آن وجود دارد در ابتدا شکل و پایه های یک RGB را بررسی می کنیم.
همانطور که در بالا می بینید چهار پایه RGB دارد که لازم است بگوییم این یک دیوید آند مشترک میباشد و همچنین بلندترین پایه هم باید در به زمین وصل شود و همانطور که دقت کردید سه رنگ سیز ، قرمز ، آبی تولید میکند اما میتوان ماکزیمم تا 6 رنگ به آن اضافه کرد تا تبدیل به یک رقص نور ایده آل شود ما در این پروژه قصد داریم با استفاده از pwm این ماژول را راه اندازی کنیم در تصویر زیر شکل خروجی سیگنال و میزان نور خروجی نشان داده شده است.
شماتیک پروژه
در ابتدا شماتیک پروژه را با fritzing طراحی کردیم که در تصویر زیر مشخص است، ما در این پروژه قصد داریم از pwm استفاده کنیم برای این کار پورت 9 و 11 ماژول uno را انتخاب کردیم .
برنامه نویسی پروژه در بلوک دینو
برای برنامه نویسی و راه اندازی RGBشما باید ابتدا وارد بخش grove شوید در مورد این بخش در مطلب قبلی توضیح دادیم حالا قصد داریم ماژول RGBرا مثل تصویر زیر انتخاب کنیم.
بعد از انتخاب ماژول سورس کد خروجی RGBتوسط پلتفرم بلوک دینو کانفیگ و شما می توانید به سورس کد دسترسی داشته باشید در واقع الگوریتم اصلی پروژه توسط خود بلوک دینو تولید و شما می توانید با توجه به الگوریتم خود بخش های دیگری را اضافه کنید،برای مثال شما میتوانید تعداد رنگ های ماژول را به 5 تا برسانید و آن را در یک حلقه بگذاریو و راه های دیگری که می توان انجام داد ما در این پروژه قصد داریم 5 رنگ را نمایش دهیم در ابتدا پس از انتخاب ماژول شما روی چرخ که کنار بلوک ماژول وجود دارذد میزنید و سپس مثل تصویر زیر بلوک itemرا به بلوک اصلی ماژول متصل می کنید.
بعد از انتخاب رنگ ها به روش بالا حالا شما نیاز دارید در برنامه خود یک تابع تعریف کنید تا بتوانید خروجی آنالوگ ماژول را برای سه رنگ اصلی نمایش دهید برای تعریف تابع کافی است شما به تب function بروید و تابع را انتخاب کنید
در تصویر بالا ما نیازی به استفاده از تابع بازگشتی (return) نداریم بنا بر این بلوک اول را انتخاب می کنیم اکنون وقت کانفیگ بلوک مورد نظر است برای کانفیگ کافی است یکبار روی تنطیمات کلیک کنید و مانند تصویر زیر ورودی ها را انتخاب کنید.
اگر بخواهیم برنامه بالا را بررسی کنیم تا اینجا مازول توسط خود پلتفرم کانفیگ شده ما تابع تعریف کردیم که بتوانیم سه رتگ اصلی را با pwm دریافت کنیم همانطور که حدس میزنید ما نیاز داریم خروجی آنالوگ را مشخص کنیم برای این کار به تب input/output می روید و تابع analogWriteرا انتخاب می کنید.
سورس کد خروجی برنامه بالا به شکل زیر می باشد.
سورس کد خروجی
#define uint8 unsigned char
#define uint16 unsigned int
#define uint32 unsigned long int
void ClkProduce_9(void)
{
digitalWrite(9, LOW);
delayMicroseconds(20);
digitalWrite(9, HIGH);
delayMicroseconds(20);
}
void Send32Zero_9(void)
{
uint8 i;
for (i=0; i<32; i++)
{
digitalWrite(10, LOW);
ClkProduce_9();
}
}
uint8 TakeAntiCode(uint8 dat)
{
uint8 tmp = 0;
if ((dat & 0x80) == 0)
{
tmp |= 0x02; //bitwize oratore//
}
if ((dat & 0x40) == 0)
{
tmp |= 0x01; // bitwize orprator//
}
return tmp;
}
// gray data
void DatSend_9(uint32 dx)
{
uint8 i;
for (i=0; i<32; i++)
{
if ((dx & 0x80000000) != 0)
{
digitalWrite(10, HIGH);
}
else
{
digitalWrite(10, LOW);
}
dx <<= 1;
ClkProduce_9();
}
}
// data processing
void DataDealWithAndSend_9(uint8 r, uint8 g, uint8 b)
{
uint32 dx = 0;
dx |= (uint32)0x03 << 30; // highest two bits 1,flag bits
dx |= (uint32)TakeAntiCode(b) << 28;
dx |= (uint32)TakeAntiCode(g) << 26;
dx |= (uint32)TakeAntiCode(r) << 24;
dx |= (uint32)b << 16;
dx |= (uint32)g << 8;
dx |= r;
DatSend_9(dx);
}
void loop(){
Send32Zero_9(); // begin
DataDealWithAndSend_9(255, 0, 0); // red color//
DataDealWithAndSend_9(0, 255, 0); // green color//
DataDealWithAndSend_9(102, 255, 255); // blue color//
DataDealWithAndSend_9(102, 51, 0); // brown color//
DataDealWithAndSend_9(204, 51, 204); // pincal color//
Send32Zero_9(); // send to update data
}
void setup()
{
pinMode(11, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
}
void set_color(int redValue, int greenValue, int blueValue) {
analogWrite(9, redValue);
analogWrite(10, greenValue);
analogWrite(11, blueValue);
}
8 دیدگاه. ارسال دیدگاه جدید
سلام میتونیم به ۱۵RGB تا رنگ اضافه کنیم؟
در ضمن مطالبتون بد نیست
سلام و درود خداداد عزیز، بله شما طبق متن بالا میتونید پس از انتخاب ماژول رنگ های مورد نظرتون رو اضافه کنید فقط دقت کنید سه رنگ اصلی دیفالت باید قرمز ، آبی ، سبز باشه اما توجه داشته باشید اگر قصد دارید سخت افزار رقص نور شما بدون مشکل پیاده شود حتما جریان خروجی را کنترل کنید شاد و موفق باشید
سلام مطالبتون خوشحالم کرد تونستم بزارم ولی چرا نورش کمه؟
سلام میم عزیز
باعث خشنودی هستش.
نور کجا کمه؟
نور LED RGB کمه و در ضمن LED درسته چرا خوب و من با توجه به مطالب اینکارو کردم
مقدار مقاومت را کاهش بدین
با سلام بنده رنگ بیشتر را میخواستم درست بکنم با این ال ای دی ار جی بی ، ولی رنگها خوب ترکیب نمیشن تو ال ای دی مثلا رنگ قهوهای یا زرد یا خاکستری راخوب نمایش نمیده ، مثل تلویزیون که قشنگ ترکیب هر رنگ بوجود میاره اصلا خوب نیست ترکیب رنگ ، آیا راهی داره تو سایت نوشته بود میشود از ار جی بی هر رنگی را بدست آورد با ترکیب این سه رنگ پس چرا نمیشه ممنون
درود
با PWM امکانش هست.