ryco

مدیر کل
  • تعداد ارسال ها

    243
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    99

تمامی ارسال های ryco

  1. در این مبحث، چطور می تونیم توی رویداد یک آبجکت رو هم بفرستیم؟ برای مثال وقتی روی یکی از آیتم های لیست ویو کلیک کردیم، چطور اون آیتم رو به رویداد بفرستیم؟
  2. بسم الله الرحمن الرحیم سلام؛ به درخواست دوستان، یه سیستم زنگ هوشمند مدرسه قرار هست بسازیم. البته تو هوشمند بودنش شک دارم ولی خب از اونجا که هر کسی به هر چیزی که یه چیپ داشته باشه بهش عبارت #هوشمند می چسبونه، منم تصمیم گرفتم بهش بگم هوشمند. خب بریم سراغ لوازم مورد نیاز، نکته اینکه لازم نیست عینا همین ها رو بخرید، می توانید از مدل های مشابه هم استفاده کنید. اگر در خرید و انتخاب شک دارید، همینجا بپرسید! مواد لازم: 1. یک برد آردوئینو. من برای این کار UNO رو پیشنهاد میدم! چون به راحتی هم پروگرام میشه، تازه قیمتش هم خیلی کمه و برای کار ما هم کافیه! 2. ماژول ساعت فوق دقیق DS3231، یه ماژول قدرتمند و کم مصرف با قیمت ارزان! تا سال 2100 برنامه ریزی شده و علاوه بر ساعت، تاریخ رو هم داره که البته مورد نیاز ما نیست! از همه مهم تر یک باتری ساعت هم داره که در صورتی که برق قطع شد، زمان بندی ما به فنا نره . اگرچه تاریخش شاید برای مدارس مهم باشه تا در ایام تعطیل زنگ کار نکنه! ولی خب کلا از برق بکشیمش بیرون بهتره. 3. ماژول رله Relay Module: این رو برای مدیریت برق نیاز داریم! یدونه تک کاناله بخرید! خرج الکی هم نکنید! 4. مقداری سیم مناسب با ولتاژ 220 ولت و 5 ولت و همچنین به یک زنگ مدرسه هم نیاز داریم! حالا بریم سراغ وصل کردن این لوازم! توی UNO ما پایه SDA ماژول رو به پایه A4 و پایه SLC رو به پایه A5 آردوئینو وصل کردیم. VCC رو هم به 3.5 ولت و GND هم که تکلیفش مشخصه! من برای روشن کردن زنگ از پایه 6 دیجیتال استفاده کردم که به دلخواه خودتون می تونید از پایه دیجیتال دیگری هم استفاده کنید! یه سیم به پایه 6 وصل می کنید. این پایه در اصل رله رو کنترل می کنه، این پایه رو باید به پایه in رله متصل کنید. VCC و GND رله رو هم به پایه های مربوطه روی آردوئینو متصل کنید. در آخر کابل برق رو به رله وصل کنید. (سیم نول مستقیم به زنگ متصل می شه، رله رو سر راه سیم فاز قرار بدید تا مدار رو قطع و وصل کنه!). پایان! سعی کنید کار رو تمیز انجام بدید و قبل از لحیم کاری از بردبورد استفاده کنید تا صحت اتصالات رو بسنجید. اگر هم لحیم کاری بلد یستید، قبل از اینکه خودتون و وسایل رو بسوزونید برید به یه تعمیرکار لوازم الکترونیک رجوع کنید و جان خودتون رو نجات بدید! بگذریم! حالا نوبت برنامه نویسی هست. من برای این زنگ مدرسه اینترفیس خاصی در نظر نگرفتم و همونطور که گفتم موقع کامپایل دیگه زمان ها رو مشخص می کنیم! البته اگر می خواید از طریق راه دور و با بلوتوث زنگ ها رو کنترل کنید هم بگید تا انجامش بدیم ولی خب فکر کنم لازم نیست اصلا، چون زنگهای مدرسه ثابته و تغییر ندارند! 1. کابل USB رو به برد متصل کنید. 2. این کتابخونه رو دانلود کنید و در IDE آردوئینو اضافه و سپس به پروژه بیافزایید! 3. کدهای زیر رو وارد محیط برنامه نویسی کرده و آپلود کنید روی برد! //این همون کتابخونه است که دانلود کردیم! #include <DS3231.h> //این کتابخونه رو دستی اضافه کنید (بنویسیدش!) #include <Wire.h> //یک شی از RTCDateTime میسازیم تا زمان رو در اون ذخیره کنیم //و به جزییاتش دست پیدا کنیم RTCDateTime dt; // یک ساعت از کتابخونه مورد نظر می سازیم DS3231 clock; void setup() { // put your setup code here, to run once: Serial.begin(9600); // شروع به کار ماژول رو اعلام می کنیم Serial.println ("Initialize DS3231"); //ساعت شروع به کار می کند: clock.begin (); //زمان رو از کامپیوتر دریافت و تنظیم می کنیم: clock.setDateTime (__DATE__, __TIME__); //پایه 6 رو به عنوان پایه خروجی تنظیم می کنیم pinMode (6, OUTPUT); } void loop() { // put your main code here, to run repeatedly: // مقدار زمان رو در متغیر میریزیم و سپس چاپ می کنیم: dt = clock.getDateTime (); Serial.print ("Raw Time: "); Serial.print (dt.hour); Serial.print (":"); Serial.print (dt.minute); Serial.print (":"); Serial.print (dt.second); Serial.println (""); //یک تاخیر 1 ثانیه ای برای هر بار چاپ لحاظ می کینم: delay(1000); //یک شرط قرار دادیم که اگر ساعت 13 و دقیقه 23 و ثانیه کمتر از 5 // بود پایه 6 رو فعال کنه. if ( (dt.hour == 13) && (dt.minute == 23) && (dt.second < 5) ) { digitalWrite(6, HIGH); } else { //اگر هم نبود، عیر فعال کنه! digitalWrite(6, LOW); } } نکته: برای اینکه بتونید خروجی رو ببینید، CTRL + Shift + M رو بزنید! سعی کردم مستند نویسی کنم تا هم با کدها آشنا بشید و هم اینکه بتونید تغییرات دلخواه رو بدید، اگر سوالی بود در خدمتم! فایل پروژه رو هم در انتها می تونید دانلود کنید. school.ino
  3. سلام؛ چگونه می توانم از طریق کد نویسی یک هات اسپات ایجاد کنم؟! می خواهم یک هات اسپات دلخواه ایجاد کرده و یک روتر ایجاد کنم. اشتراک گذاری اینترنت مد نظرم نیست و تنها اتصال دستگاه ها و تبادل اطلاعات برایم مهم هست.
  4. سلام؛ برد Uno یکی از محبوب ترین بردهایی است که تولید شده و البته همانطور که از نامش پیداست (UNO در ایتالیایی یعنی عدد یک) آغازگر انقلاب آردوئینو بوده است. بردی ارزان (حدود 20 هزار تومان) که بر پایه mega328 توسعه یافته و بر همین اساس امکانات خوبی را برای ما فراهم می کند: 14 پین برای ورود و خروج اطلاعات که 6 تا از آنها به عنوان pwm نیز قابل استفاده هستند یک مزیت برای هر کاربری است که تعداد زیادی ورودی و خروجی در مدار خود دارد. وجود پورت USB از نوع مینی علاوه بر آسان کردن پروگرام این برد، تغذیه آن را هم از طریق طیف وسیعی از منبع تغذیه های موجود در بازار (شارژر موبایل!) امکان پذیر کرده است. البته جک مادگی ضخیم شارژ همچنان بر روی این برد قابل مشاهده است، تا در صورت نیاز به درگاه USB بتوانید همچنان برد را تغذیه کنید. پین هدرISCP و کلید ریسیت هم از سایر چیزهایی است که در این برد وجود دارد. برای راه اندازی این برد به صورت پایدار به اختلاف پتانسیل مابین 6 تا 20 ولت نیاز دارید، البته اگر ولتاژ را به بیش از 12 ولت برسانید، به علت افزایش دمای چیپ بهتر است از یک سینک یا خنک کننده دیگر استفاده کنید. بهتر است بگوییم بهترین بازه عملیاتی این برد در ولتاژ 7 تا 12 ولت قرار دارد. حافظه این برد 32 کیلوبایت هست که کاملا کافی به نظر می رسد! 2 کیلوبایت SRAM و 1 کیلو بایت EEPROM هم در اختیار شماست (البته من نمی دونم دقیقا کاربردشون چیه!). در آخر هم خوب است بدانید که با دو پین RX و TX می توانید از ماژول های رادیویی مثل بلوتوث هم استفاده کنید!
  5. سلام؛ احتمالا برای شما هم این سوال پیش آمده باشد که چه زمانی باید از بردهای رسپبری پای و چه زمانی از بردهای (یا ماژول‌های) آردوئینو استفاده کرد. با این که این یک قانون نیست اما در کلیت می‌تواند راهگشا باشد. هر گاه نیاز بر این باشد که شما اطلاعاتی را از محیط دریافت کنید یا کاری بر روی سیستم انجام دهید، بهتر است از بردهای آردوئینو و ماژول‌های آن استفاده کنید. و هر گاه نیاز به پردازش این اطلاعات دارید یا می‌خواهید دستورات پیچیده‌ای برای اعمال به بردهای آردوئینو بدهید، باید از رسپبری پای یا سایر بردهای دارای سیستم عامل استفاده کنید. البته واضح هست که برد رسپبری پای خود می‌تواند به وسیله سنسور، برخی از اطلاعات را دریافت کند، اما ماژول‌های موجود برای بردهای آردوئینو بسیار گسترده تر و ارزانتر هستند. همچنین باید به این نکته هم توجه کرد که گوشی موبایل هم می‌تواند تبدیل به واحد پردازشی سیستم ما شود. پس با رسپبری پای تمام اطلاعات را از آردوئینو دریافت و پردازش کنید.
  6. سلام! قصد دارم وقتی برنامه اجراست، برخی از کارها توسط کیبورد صورت بگیره و به عبارتی با زدن کلیدی مانند بالا (Up) عملی خاص صورت بگیره. من طبق اسناد مایکروسافت پروژه ساخته و تست کردم، اما هنگام فشار کلیدهای کیبورد، رویداد keydown اجرا نمیشه! Microsoft Document, Keyboard Events private void grdMain_KeyDown(object sender, KeyRoutedEventArgs e) { switch (e.Key) { case VirtualKey.Up: break; case VirtualKey.Down: break; case VirtualKey.Left: break; case VirtualKey.Right: break; } } <Grid Name="grdMain" Loaded="grdMain_Loaded" KeyDown="grdMain_KeyDown" KeyUp="grdMain_KeyUp" Background="Red"> </Grid>
  7. با توجه به فیلتر/تحریم بودن سرویس دهنده، آیا راه حلی هست که بتونیم بدون فیلتر از این ابزار استفاده کنیم؟
  8. سلام؛ داشتن یک کیبورد اختصاصی می تواند برای خیلی ها مفید و کارآمد باشد، کیبوردی که تنها برای یک عملیات یا برنامه خاص، فعالیت شما را ساده تر و حرفه ای تر می کند، یک کیبورد مخصوص بازی، کیبورد پخش چند رسانه ای، کیبورد برای کنترل رسپبری پای و یا حتی یک کلید برای تایپ ; در محیط ویژوال استدیو! خب، به موارد زیر برای انجام این پروژه نیازمندیم: 1. یک برد آردوئینو که از USB پشتیبانی کند و دارای پردازنده ATmega32u4 باشد! (مانند:Leonardo, Micro, یا Due board). 2. کابل USB 3. سیم 4. بردبورد 5. کلید فشاری در بعد نرم افزاری: 1. IDE Arduino از لحاظ برنامه نویسی با کار پیچیده ای روبرو نیستیم، می توانید یک کلید تعریف کنید که تنها حرف R را تایپ کند یا یک کلید ترکیبی از Ctrl + C بسازید که عملیات کپی را انجام دهد. حتی به سادگی می توانید عملیات را زمان بندی کنید تا با فشار کلید، یک سری عملیات ها (فشار کلید) انجام شود. در اینجا ما برای فهم بهتر پروژه دو مثال می زنیم، ابتدا بیایید یک کلید را به برد خود متصل کنیم! این تصویر هم توسط Fritzing ایجاد شده! که بعدا مفصل در موردش صحبت خواهیم کرد. همانطور که می بینید، ما 2D را به وسیله دکمه به GND متصل می کنیم تا عملیات فیزیکی فشار دکمه کیبورد را ایجاد کنیم. اکنون بورد خود را به وسیله USB به رایانه خود متصل کنید و IDE Arduino رو اجرا کنید. در گام اول، کتابخانه کیبورد را به پروژه با تایپ عبارت زیر اضافه می کنیم: #include "Keyboard.h" در void setup، پین 2 را به عنوان ورودی تعریف می کنیم و کیبورد را فراخوانی می کنیم، با این فراخوانی، برد شما به عنوان یک کیبورد شناسایی خواهد شد! void setup() { // make pin 2 an input and turn on the // pullup resistor so it goes high unless // connected to ground: pinMode(2, INPUT_PULLUP); // initialize control over the keyboard: Keyboard.begin(); } و حالا در حلقه، با توجه به اینکه در حال فشار دکمه هستیم یا خیر، کلید مورد نظر را فراخوانی می کنیم. برای تشخیص در حال فشرده شدن کلید می توان از یک شرط ساده استفاده کرد: void loop() { while (digitalRead(2) == HIGH) { // do nothing until pin 2 goes low delay(500); } خب اکنون می خواهیم کلید ; را بسازیم: Keyboard.press(';'); delay(100); Keyboard.releaseAll(); به همین سادگی ما یک کلید را ساختیم که با فشار آن و نگه داشتنتش، هر دهم ثانیه، یکبار ; را تایپ می کند. اما اگر بخواهید از کلید Ctrl استفاده کنید، باید آن را تعریف کنید، در کیبوردهایی که از ویندوز (و همچنین لینوکس) پشتیبانی می کنند، این کلید به صورت زیر تعریف می شود: char ctrlKey = KEY_LEFT_GUI; هر چند لازم نیست (آخه کاربرای مک کجا از این کارا می کنند؟! ) اما برای مک به صورت زیر است: char ctrlKey = KEY_LEFT_CTRL; دیگر چیزی تغییر نمی کند جز اینکه باید قبل از کلید c، کلید ctrl را فشار دهیم! // Copy: Keyboard.press(ctrlKey); Keyboard.press('c'); delay(100); Keyboard.releaseAll(); به همین سادگی! می توانید عملیات های پیچیده دیگری رو هم تعریف کنید! #لذت_ببرید اما کدها به صورت کامل: تک کلید: #include "Keyboard.h" void setup() { // make pin 2 an input and turn on the // pullup resistor so it goes high unless // connected to ground: pinMode(2, INPUT_PULLUP); // initialize control over the keyboard: Keyboard.begin(); } void loop() { while (digitalRead(2) == HIGH) { // do nothing until pin 2 goes low } delay(500); Keyboard.press('n'); delay(100); Keyboard.releaseAll(); } و برای کپی: #include "Keyboard.h" void setup() { // make pin 2 an input and turn on the // pullup resistor so it goes high unless // connected to ground: pinMode(2, INPUT_PULLUP); // initialize control over the keyboard: Keyboard.begin(); } void loop() { while (digitalRead(2) == HIGH) { // do nothing until pin 2 goes low } delay(1000); // Copy for Win/Linux: Keyboard.press(ctrlKey); Keyboard.press('n'); delay(100); Keyboard.releaseAll(); }
  9. بسم الله الرحمن الرحیم سلام؛ اینبار هم یه آموزش جدید و اما جذاب داریم براتون که میدونم هر کسی انجامش بده، حسابی بهش خوش میگذره و در آینده هم با خلاقیت و پشتکارش می تونه کارهای بزرگی بکنه. این یک آموزش پایه است، بنابراین پیشرفتش و شاخوبرگ دادنش دست خودتونه! خب، قصد داریم گوشی ویندوزیمون (یا هر دستگاهی که قابلیت اجرای برنامه های یونیورسال و دارای سخت افزار بلوتوث هست) رو به آردوئینو متصل کنیم و با ارسال دستوری، یک لامپ رو روشن کنیم. برای این کار نیاز به چند وسیله مختلف داریم: 1. دستگاه با قابلیت اجرای ویندوز 10 دارای سخت افزار بلوتوث 2. برد آردوئینو؛ من از برد آردوئینو UNO استفاده کردم. 3. ماژول بلوتوث مناسب با برد آردوئینو؛ من برای بردم از برد HC-05 همراه با برد راه اندازش استفاده کردم. 4. یک LED معمولی 5. برد بورد برای قرار دادن قطعات 6. منبع تغذیه 5 ولتی (شارژر موبایل ها اکثرا مناسب هستند) 7. مقداری سیم و در بعد نرم افزاری هم به: 1. ویژوال استدیو 2017 2. IDE آردوئینو (لینک دانلود) نیاز داریم. خب بعد جمع کردن پیش نیازها، وقتشه که اولین پروژه رو شروع کنیم. ویژوال استدیو رو اجرا و یک پروژه جدید Blank App (Windows Universal) ایجاد می کنیم. بعد از ایجاد پروژه، از طریق Nuget، پکیج Windows Remote Arduino رو دریافت و نصب کنید، ترجیحا جهت محکم کاری، یکبار پروژه رو rebuild کنید. پس از این کار در منوی سولوشن، روی Package.appxmanifest راست کلیک کنید و گزینه View Code رو بزنید. می خواهیم قابلیت ها (نیازها) رو معرفی کنیم. تمامی موارد زیر رو در زیر تگ <Capabilities> وارد کنید: برای اتصال از طریق بلوتوث: <DeviceCapability Name="bluetooth.rfcomm"> <Device Id="any"> <Function Type="name:serialPort"/> </Device> </DeviceCapability> و <Capability Name="privateNetworkClientServer"/> <Capability Name="internetClientServer"/> خب، فعلا کارمون با ویژوال تمومه! میریم سراغ پروگرام کردن آردوئینو: IDE مربوطه رو نصب و اجرا کنید، برد خودتون رو با کابل USB به سیستم متصل کنید. توجه کنید که در این حالت نباید ماژولهای گیرنده داده مثل بلوتوث به بردتون متصل باشه، چون در فرایند پروگرام کردن دچار خطا خواهید شد. از منوی Tools > Board، برد خودتون رو انتخاب کنید. سپس از منوی Tools > Port، پورتی رو که برد از طریق اون به سیستم متصل هست رو انتخاب کنید. و در آخر از مسیر File > Examples > Firmata، StandardFirmata را انتخاب کنید. این کدهای آماده، تمام نیازهای ما برای اتصال به تک تک پایه ها و دریافت و ارسال داده رو برطرف می کند. حالا وقتشه این کدها رو بر روی برد آپلود کنیم. کافیه دکمه "Upload" (دکمه فلش رو به راست) رو فشار بدیم و منتظر پایان فرآیند باشیم. یک نکته ظریف اما مهم اینجا وجود داره، و اون هم مربوط به نرخ باند ماژول بلوتوث هست. باید در دیتاشیت ماژولی که خریدید نگاه کنید و عدد مربوطه رو پیدا کنید. برای ماژل من 57600 هست. بعد از پیدا کردن نرخ مناسب، در کدهای StandardFirmata سرچ کنید و مقدار زیر رو به نرخ مناسب ماژولتون تغییر بدید: Firmata.begin(57600); تمام! در پست بعدی، بخش پایانی کار رو توضیح خواهم داد. پس با ما همراه باشید. رزرو..........
  10. آموزش iot

    همه چیز درست به نظر میرسه! ماژول بلوتوث رو درست متصل کردید؟ بیاید به تلگرام من (آدرس تلگرامم در پروفایلم هست).
  11. آموزش iot

    سلام؛ بردتون که چیز خوبیه، گویا اصلی هست (برای من اصلی نیست مثل اینکه!) دوست عزیز، تو کدی که اسم بلوتوث رو نوشتید، باید اسم دستگاه لوتوثی خودتون رو بنویسید! conn = new BluetoothSerial("Dev B"); نحوه بدست آوردنشم کامل تو آموزش توضیح دادم. خواهش می کنم. اینجا جمع شدیم به هم کمک کنیم!!
  12. آموزش iot

    سلام! آهان! امیدوارم مشکلی نباشه، اگه روشنه که مشکلی نیست! یک عکس از بردتون بدید تا بهتر راهنمایی کنم! منظوری نداشتم ، اشتباه لپی بوده! منظورم اینه که پایه رو درست متصل کردید؟ توی کدها، پایه مربوطه رو معرفی کردید؟
  13. آموزش iot

    سلام! خب اول چرا لحیم کاری کردید؟! شما تا لحظه آخر نباید این کار رو انجام بدید. اما حالا، شما ال ای دی رو به صورت مستقیم به باتری وصل کنید، ببینید درسته؟! ال ای دی رو به پایه درست وصل کردید؟ کدخا رو دست وصل کردید؟! در صورت درست بودن کد، باید هنگام ارسال دستور، یه ال ای دی روی برد روشن بشه!
  14. آموزش iot

    سلام دوست عزیز. در خود IDE آردوئینو کد وجود داره! به مسیر برویدFile > Examples > Firmata، StandardFirmata، پنجره جدیدی باز میشه که حاوی کدهاست. و در مورد سوال قبلتون، چون ویندوز IOT همیشه آخرین SDK رو داره، بنابراین هر کدوم از نسخه های ویژوال که از اون SDK پشتیبانی می کنن می تونن کاربردی باشند. در مورد آموزش های بیشتر هم چشم.
  15. آموزش iot

    بسم الله الرحمن الرحیم قسمت دوم: سلام دوستان خوبم، خب امروز یک قسمت دیگه از کار رو انجام میدیم. به قسمت های مهم رسیدیم. درحال حاضر باید، یک ال ای دی رو به پایه های برد آردوئینو متصل کنیم. من برای این کار، پایه 5 دیجیتال رو در نظر گرفتم که تنها دارای حالت روشن و خاموش هست. از گراند (GND) هم یک سیم به پایه منفی میرسونیم. اتصال ماژول بلوتوث هم ساده است، ولی یک نکته کوچک هست. پایه های مثبت و منفی را به پایه های همنام در برد متصل کنید، اما در مورد دو پایه دیگر، پایه TX ماژول را به RX برد و RX ماژول را به TX برد متصل کنید (برعکس). در اصل ما فرستنده برد رو به گیرنده ماژول و فرستنده ماژول رو به گیرنده برد متصل کردیم. حالا برد رو به منبع تغذیه متصل کنید. (عکس از سایت مایکی هست، ولی به همین نحو باید وصل کنید) حالا ویژوال رو باز کنید و پروژه ای رو که قبلا ساختیم رو باز کنید. یک متغیر از نوع BluetoothSerial و یکی هم از نوع RemoteDevice میسازیم: namespace Pilot { /// <summary> /// An empty page that can be used on its own or navigated to within a Frame. /// </summary> public sealed partial class MainPage : Page { BluetoothSerial conn; RemoteDevice uno; public MainPage() { this.InitializeComponent(); } } } گام بعدی، بلوتوث رو متصل می کنیم و در گام بعد اون رو به RemoteDevice میدهیم: public MainPage() { this.InitializeComponent(); conn = new BluetoothSerial("Dev B"); uno = new RemoteDevice(conn); } } Dev B اسم بلوتوث من هست. چیزی که منو به دردسر انداخت همین بود، چون توی دستگاه اسم بلوتوث ماژول HC-05 بود. برای اطلاع از نام بلوتوث، بعد از پیر کردن ماژول با ویندوز، به تنظیمات بلوتوث برید. در قسمت Com Ports می تونید اسم دستگاه رو ببینید (مقابل Outgoing و در میان دو ''). اگر هم چیز خاصی نبود، همون اسم اصلی رو قرار بدید. خب بریم ادامه بدیم: حالا اگر همه جیز به خوبی پیش رفت و دستگاه متصل بود، باید یک متد ایجاد کنیم و کارامون رو پیش ببریم: public MainPage() { this.InitializeComponent(); conn = new BluetoothSerial("Dev B"); uno = new RemoteDevice(conn); conn.ConnectionEstablished += Conn_ConnectionEstablished; } private void Conn_ConnectionEstablished() { throw new NotImplementedException(); } و در نهایت، استارت تبادل داده ها رو میزنیم! نرخ داده ها رو که در قسمت قبل یادتون هست؟ public MainPage() { this.InitializeComponent(); conn = new BluetoothSerial("Dev B"); uno = new RemoteDevice(conn); conn.ConnectionEstablished += Conn_ConnectionEstablished; conn.begin(57600, 0); } private void Conn_ConnectionEstablished() { //کارهایی که در صورت اتصال باید انجام بشه، مثلا فعال سازی دکمه روشن و خاموش کردن ال ای دی } خب، همه چیز به خوبی پیش رفت، حالا یه دکمه میسازیم که به وسیله اون بتونیم فرامین مربوط به روشن و خاموش کردن ال ای دی رو بفرستیم. <Page x:Class="Pilot.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Pilot" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Button Name="btnOn" Click="btnOn_Click" Content="ON" Width="70" HorizontalAlignment="Center"/> <Button Name="btnOff" Click="btnOff_Click" Content="OFF" Width="70" HorizontalAlignment="Center"/> </StackPanel> </Page> حالا باید دستورات نهایی رو وارد کنیم! در مورد نوع دستورات، طی پست بعدی صحبت می کنم. اما فعلا چون یک پایه دیجیتالی رو انتخاب کردیم، پس دستورات رو به صورت زیر می فرستیم: برای روشن کردن: uno.digitalWrite(5, PinState.HIGH); خاموش کردن: uno.digitalWrite(5, PinState.LOW); و در نهایت کدهای ما به این صورت خواهد بود: using Microsoft.Maker.RemoteWiring; using Microsoft.Maker.Serial; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 namespace Pilot { /// <summary> /// An empty page that can be used on its own or navigated to within a Frame. /// </summary> public sealed partial class MainPage : Page { BluetoothSerial conn; RemoteDevice uno; public MainPage() { this.InitializeComponent(); conn = new BluetoothSerial("Dev B"); uno = new RemoteDevice(conn); conn.ConnectionEstablished += Conn_ConnectionEstablished; conn.begin(57600,0); } private void Conn_ConnectionEstablished() { } private void btnOn_Click(object sender, RoutedEventArgs e) { uno.digitalWrite(5, PinState.HIGH); } private void btnOff_Click(object sender, RoutedEventArgs e) { uno.digitalWrite(5, PinState.LOW); } } } برنامه رو تست کنید! مطمئنا اولین بار که ال ای دی رو روشن می کنید، لذت غیر قابل انکاری (در حد اختراع خود لامپ ) خواهید برد! موفق باشید!
  16. سلام؛ اگر شما هم با پنل GridView کار کرده باشید، حتما در نمایش آیتم ها در صفحات مختلف دچار مشکل فضای خالی در طرفین آیتم ها شدید. متاسفانه این کنترل به خوبی بهینه نشده و کاملا رسپانسیو عمل نمی کند. بنابراین باید از راه حلی دیگر این مشکل رو جبران کنیم تا آیتم ها تمام عرض پنل رو بپوشانند و فضای خالی آزار دهنده ای جلوی چشم مخاطب قرار نگیرد. اما حالا بریم سراغ توضیحات: ابتدا در xml کنترل گرید ویو، کدهای زیر رو اضافه می کنیم، تا عرض هر آیتم به اندازه فضای آزاد برسه: GridView.ItemContainerStyle> <Style TargetType="GridViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Stretch" /> </Style> </GridView.ItemContainerStyle> به این منظور باید در رویداد SizeChanged گرید ویو میزان عرض هر آیتم رو بصورت دستی تغییر بدیم. من برای این کار تعداد ستون هایی رو که می خوام در عرض صفحه میشه نمایش داد رو محاسبه می کنم و سپس این عرض "حداکثری" رو به آیتم ها می دم. من عرض حداکثری هر آیتم رو 850 انتخاب کردم: private void gvFave_SizeChanged(object sender, SizeChangedEventArgs e) { var columns = Math.Ceiling(ActualWidth / 850); ((ItemsWrapGrid)gvFave.ItemsPanelRoot).ItemWidth = e.NewSize.Width / columns; } به همین سادگی می تونید از شر فضای خالی راحت بشید. اگر سوالی بود در خدمتم. با تشکر
  17. فایلی از نوع APPXBUNDLE File (.appxbundle) هست. اونو باید منتقل کنید.
  18. سلام من یک گرید به صورت زیر دارم: <Grid Name="gView" Visibility="Collapsed" Grid.Row="1" ScrollViewer.VerticalScrollBarVisibility="Visible"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition/> </Grid.RowDefinitions> <Image Name="imgTitle" MaxHeight="450"/> <TextBlock Name="tbTitlePost" Margin="60,8" TextAlignment="Center" TextWrapping="Wrap" Grid.Row="1" FontFamily="ms-appx:/Other/yekan.ttf#B Yekan" Foreground="#FFE2BC12"/> <WebView ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Grid.Row="2" Name="myView" GotFocus="myView_GotFocus" LoadCompleted="MyView_LoadCompleted" /> </Grid> می خوام با لود شدن اطلاعت در وب ویو، پیج مورد نظر به صورت کلی اسکرول بشه. در اصل اسکرول وب ویو حذف و از طریق گرید gView صورت بگیره. راه حل چیست؟ من از این راه حل استفاده کردم، ولی تاثیری نداشت. http://www.c-sharpcorner.com/UploadFile/269510/disable-webview-scrolling-in-windows-store-apps/
  19. سلام؛ من می خوام از فونت یکان، برای نمایش متون در وب ویو برنامه استفاده کنم. متاسفانه از هر روشی رفتم، موفق نشدم. این کلاسی هست که برای این کار نوشتم: class WebContentHelper { public static string HtmlHeader() //adapt parametres { var head = new StringBuilder(); head.Append("<head>"); head.Append("<meta name=\"viewport\" content=\"initial-scale=1, maximum-scale=1, user-scalable=0\"/>"); head.Append("<script type=\"text/javascript\">" + "document.documentElement.style.msScrollTranslation = 'vertical-to-horizontal';" + "</script>"); //horizontal scrolling //head.Append("<meta name=\"viewport\" content=\"width=720px\">"); head.Append("<style>"); head.Append("@font-face {" + "font-family: 'yekan'" + " url('/other/yekan.ttf') format('ttf');" + "}" + "h1, h2, h3, h4, h5, h6, p{font-family:yekan;}" + "p{font-size{15px;}" + "h1{font-size:25px;}"); head.Append("html { -ms-text-size-adjust:150%;}"); head.Append(string.Format("body {{background:white;color:black;font-size:15px;margin:20;padding:0;display: block;" + "height: 100%;" + "overflow-x: scroll;" + "position: relative;" + "width: 100%;" + "z-index: 0;}}" + "article{{column-fill: auto;column-gap: 80px;column-width: auto; column-height:100%; height:630px;" + "}}" + "img,p.object,iframe {{ max-width:100%; height:auto }}")); head.Append(string.Format("a {{color:blue}}")); head.Append("</style>"); // head.Append(NotifyScript); head.Append("</head>"); return head.ToString(); } public static string WrapHtml(string htmlSubString) { var html = new StringBuilder(); html.Append("<html>"); html.Append(HtmlHeader()); html.Append("<body><article class=\"content\">"); html.Append("<p dir=\"rtl\" align=\"right\">"); html.Append(htmlSubString); html.Append("</p>"); html.Append("</article></body>"); html.Append("</html>"); return html.ToString(); } } متن دلخواه رو باید به متد WrapHtml بدم و بعد در وب ویو به نمایش بذارم: string Content = WebContentHelper.WrapHtml(value); myView.NavigateToString(Content); نمیدونم مشکل چی هست!! اگر کسی عیبی در کدهای من می بینه بفرماید!!
  20. اورمان جان این مبحث رو مطالعه بفرما: https://www.win-nevis.com/topic/345-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87-%D8%AF%D8%B1-%D9%84%D9%88%DA%A9%D8%A7%D9%84-%D9%81%D9%88%D9%84%D8%AF%D8%B1/ با لوکال ستینگ می تونی ذخیره کنی!
  21. سلام؛ اینترنت اشیاء یک بخش بسیار هیجان انگیز از دنیای دیجیتالی ماست که برنامه نویس ها بیشتر از هر کسی می تونند از اون بهره برداری کنند. تا قبل از اینکه بردهای آماده ای مانند رسپبری پای یا آردوئینو به بازار بیان، مهندسین الکترونیک می توانستند سهم بیشتری از این بازار رو کسب کنند اما حالا شما بردهایی آماده دارید که منتظر دمیده شدن روح (برنامه) در کالبدشان هستند تا آنچه می خواهید را برای شما به اجرا در آورند. غیر از بردهای نامبرده شده، بردهای دیگری از شرکت های مختلق مثل اینتل و حتی مایکروسافت هم وجود دارد که به دو دلیل گران قیمت بودن و همچنین در دسترس نبودنشون در ایران، بردهای رسپبری پای خواهان بیشتری چه در ایران و چه در خارج از کشور دارند. توجه کنید که بردهای بر پایه آردوئینو قابلیت اجرای ویندوز اینترنت اشیاء رو ندارند ولی برای بسیاری از کارها در کنار رسپبری پای بهشون نیاز دارید. هم اکنون قیمت یک بورد رسپبری پای 3 حدود 165 تومان هست که با توجه به امکاناتی که به شما می دهد واقعا ارزان محسوب می شود. نسخه سوم علاوه بر بهبودهای پردازشی و گرافیکی، از بلوتوث داخلی و Wi-Fi داخلی نیز بهره می برد که اون رو به یک انتخاب فوق العاده تبدیل می کند. بیش از این مقدمه رو کش نمی دهم، امیدوارم شما هم به جمع ما بپیوندید و چیزهای شگفت انگیزی خلق کنید. بریم سراغ اصل مطلب: آموزش نصب ویندوز 10 iot روی رسپبری پای 3 توی نت که گشتم متاسفانه مطلب مناسبی پیدا نکردم و فقط وبسایتی رو دیدم که این آموزش به همراه محتواش رو به قیمت 30 هزار تومان به فروش می رساند. شاید به خاطر برخی نکات ریزی است که برای جستجو آن باید ساعتی را در نت به مطالعه بپردازید. به هر صورت ما طبق فلسفه انجمن، این آموزش رو رایگان تقدیم به علاقه مندان می کنیم و هر نکته ای را که در این مسیر با آن برخورد کردم رو حتما بیان می کنم. در مرحله اول توجه کنید که برای نصب windows 10 iot به یک میکرو اس دی کارت پر سرعت نیاز دارید. حداقل اس دی کارت شما باید کلاس 10 U1 را داشته باشد تا بتواند به راحتی ویندوز را اجرا کند، در غیر این صورت منتظر اجرای ویندوز نباشید. موضوع بعد که ممکن است کمتر کسی به اون توجه داشته باشد، منبع تغذیه است. من از یک منبع تغذیه 5 ولتی با خروجی 2 تا 2.1 آمپری استفاده کردم. این منبع تغذیه ویندوز را بوت می کند اما خبری از تامین نیاز کیبورد و ماوس نیست! برای اینکه بتوانید از ماوس و کیبورد استفاده کنید به یک منبع تغذیه 2.5 آمپری نیاز دارید. نکته اینکه در سایر سیستم عامل ها شما این همه دردسر ندارید، با این حال اگر سیستمی می خواهید که برنامه یونیورسال شما را به خوبی اجرا کند، پس به این لوازم نیاز داریدو مطمئن باشید شیمان نخواهید شد (حداقل من نشدم!). با چیزهایی که می دانید می توانید دستگاه های فوق العاده ای را بسازید. خب؛ حالا که لوازم رو تهیه کردید به سراغ نصب ویندوز می رویم. در قدم اول باید Windows 10 IoT Core را از سایت مایکروسافت دانلود و نصب کنید. در تمام طول نصب ویندوز 10 اینترنت اشیاء به اینترنت نیاز هست. Download Windows 10 IoT Core بعد از دانلود آن را نصب و سپس اجرا کنید؛ از قسمت سمت چپ گزینه Setup new Device را انتخاب کنید. مطابق تصویر اطلاعات را انتخاب کنید، در قسمت Wi-Fi networc Connection باید شبکه وایفایی را که می خواهید رسپبری شما به آن متصل شود را انتخاب کنید. مسلما نیاز هست که دستگاهی که بر روی آن داشبورد را نصب کرده اید به آن شبکه متصل باشد تا بتوانید پروفایل آن را داشته باشید. نکته: اگر به یک شبکه وایفای متصل هستید و با این حال در این قسمت چیزی نمی بینید بهتر است یک بار سیستم خودتان را ریسیت کنید و برنامه را مجددا اجرا کنید. حالا SD Card خودتون رو به سیستمتون متصل کنید و سپس تیک گزینه i Accept ... رو بزنید و در نهایت کلید دانلود را بزنید و منتظر بمانید دانلود و نصب به اتمام برسد. بعد از اتمام، اس دی کارت را به رسپبری متصل کنید، یک صفحه کلید و یک خروجی تصویر را هم به رسپبری متصل کنید. توجه کنید که اگر کیبوردی به دستگاه متصل نکنید رسپبری تصویری را بر روی نمایشگر نمایش نخواهد داد (!!). پس از اتصال همه موارد، در آخر منبع تغذیه را وصل کنید و منتظر بمانید تا ویندوز بوت شود. اگر تصویر بوت ویندوز 10 را ندیدید، پس باید در فایل کانفیگ ویندوز 10 اشیا تغییراتی را ایجاد کنید. اس دی کارت را از طریق سیستمتان باز کنید و در صفحه اصلی به دنبال فایل Config.txt باشید. آن را باز کرده و عدد مقابل با hdmi_group را به 1 برگردانید. ذخیره کنید و مجددا اس دی کارت را به رسپبری برگردانید و آن را روشن کنید. init_uart_clock=16000000 kernel_old=1 safe_mode_gpio=8 max_usb_current=1 gpu_mem=32 hdmi_force_hotplug=1 core_freq=250 framebuffer_ignore_alpha=1 framebuffer_swap=1 disable_overscan=1 hdmi_group=2 display_rotate=0 hdmi_mode=4 پایان.
  22. خب در روشی که من دارم، میام با استفاده از لوکال ستینگ یک متغیری رو در صورت تکمیل مرحله (مثلا لاگین شدن یا اینکه دیدن کامل راهنمای برنامه یا...) ذخیره می کنم، و هر بار در اجرای برنامه چک می کنم که آیا این متغیر وجود داره؟ اگر وجود داره یعنی این که برنامه قبلا اجرا شده و دیگه نیازی به این مراحل نیست. در گام اول یک متغیر لوکال ستینگ تعریف می کنیم: Windows.Storage.ApplicationDataContainer myData = Windows.Storage.ApplicationData.Current.LocalSettings; حالا در متد لود نخستین صفحه ای که اجرا میشه میایم بررسی می کنیم آیا این متغییر مقداری دارد یا خیر؟ مسلما وقتی فقط تعریف می کنیم و هنوز به اون مقداری نداده ایم، مقدار آن null هست، پس اگر مقدارش نال باشه، اولین اجرای ماست و اگر مقداری در آن باشه یعنی اجرا شده. برای این که مقداری رو از لوکال ستینگ بخونید، نیاز به یک کلمه کلیدی دارید که دلخواه و غیر تکراری باشه، مثلا من FirstRun رو نوشتم. حالا هر جایی در برنامه (حتی پروژه هایی دیگر در سولوشن) لازم داشتید اطلاعات مربوطه رو بخونید یا ویرایش کنید یا مقدار بدید کافیه یک متغیر لوکال ستینگ با هر نامی بسازید ولی باید از همون کلمه کلیدی (FirstRun مثلا) استفاده کنید. private void Page_Loaded(object sender, RoutedEventArgs e) { string firstrun; if (myData.Values["FirsRun?"] == null) { Firs run and navigate to Login Page } else { not First and navigate to other page } همونطور که از کد بالا مشخص هست، برای خوندن یا نوشتن مقدار اون کلمه کلیدی به صورت زیر عمل می کنیم: myData.Values["FirstRun?"] مثال: خواندن: string X = myData.Values["FirstRun?"].ToString(); نوشتن: myData.Values["FirstRun?"] = "not First :D"; پس وقتی فرایندی که خواستید تکمیل شد، می تونید یک مقدار داخل کلمه کلیدی بریزید تا در شرط بررسی بشه. این اطلاعات حتی با آپدیت هم پاک نمیشه، تنها راه پاک کردنش از طریق کد نویسی یا پاک کردن برنامه است. بنابراین می تونید به راحتی ورژن برنامه رو هم چک کنید. کافیه اون رو هم در یک کلید ذخیره کنید: myData.Values["Ver"] = "1.2.43.55";
  23. سلام؛ برای انتقال به صفحه واک ثرو، راه های زیادی هست، یکیش به قول شما گرفتن ورژن برنامه است. برای گرفتن ورژن برنامه می تونید از دستور زیر استفاده کنید: فضای نامی: using Windows.ApplicationModel; متدی که ورژن رو بر می گردونه: public static string GetAppVersion() { Package package = Package.Current; PackageId packageId = package.Id; PackageVersion version = packageId.Version; return string.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision); } یا : string appVersion = string.Format("Version: {0}.{1}.{2}.{3}", Package.Current.Id.Version.Major, Package.Current.Id.Version.Minor, Package.Current.Id.Version.Build, Package.Current.Id.Version.Revision); اما من از روش دیگری استفاده می کنم، که اگر بخواهید توضیح میدم خدمت شما.
  24. سلام؛ من می خوام همچین چیزی رو ایجاد کنم اما به مشکل برخوردم: از ScrollViewer که استفاده می کنم، وب ویو به نمایش در نمیاد و اگر هم از ListView استفاده کنم، وب ویو رو هم باید اسکرول کنم و همچنین ارتفاعش بسیار اندک هست. راهکارتون برای این کار چیست؟ با تشکر
  25. سلام؛ وقتی داری قالب لیستت رو ایجاد میکنی، اگر کلمه کلیدی دیتایی رو که بایند می کنی رو هم هم بایند کنی به سادگی می تونی تغییرات رو اعمال کنی. برای مثال اگر من از دیتابیسم بخوام داده بایند کنم، تگ لیست آیتم رو برابر اون قرار میدم. در قسمت بک اند کافیه در رویداد سوایپ مربوطه sender رو به آیتم لیستی که داری (مثلا ListViewItem) تبدیل کنی و تگ رو بگیری و عملیات حذف رو انجام بدی و مجددا اطلاعات رو به لیستت بدی.