سلام وقت شما هم بخیر
با میکرو کنترل های AVR نمی تونید همزمان چند برنامه مختلف را انجام بدید!!! مگر در برنامه میکرو وقفه ایجاد کنید که اونم زیاد کاربردی نیست!!!
گفته های شما یک برنامه محسوب می شود. شما می توانید 8 سنسور را بصورت آنالوگ به آردوینو خود متصل کنید و همزمان مقادیر سنسور های خود را مشاهده کنید.
برای اینکه برنامه نویسی با آردوینو را مسلط بشید پیشنهاد میکنم از کتابخانه خود آردوینو استفاده کنید تو قسمت file بعد قسمت examples برنامه های مربوط به خواندن آنالوگ را کار کنید
برای این کار هم پیشنهاد میکنم قسمت بیسیک رفته قسمت آنالوگ رید سریال را باز کنید و تست کنید . در این برنامه یک سنسور آنالوگ را خوانده و مقدارهای آن را در قسمت سریال مانیتور نشان می دهد.

سوالات بعدی خود را مطرح کنید تا روی برنامه نویسی هم تسلط کامل پیدا کنید

نقل قول نوشته اصلی توسط Smead نمایش پست ها
سلام، وقت بخیر
من تو مبحث اردوینو مبتدی هستم و چیز زیادی بلد نیستم ولی برای یک کاری به شدت به اردوینو نیاز دارم.

بزارین اول با یک سوال شروع کنم... میشه با اردوینو Uno چند کار همزمان انجام داد؟ یعنی چند برنامه بدی بهش و برات چند کار همزمان انجام بده؟
اولین و مهم ترین کاری که میخوام انجام بده کنترل رطوبت و دما با سنسور DHT11 و نمایش دما و رطوبت روی صفحه نمایش OLED تک رنگ هستش و اینکه دما و رطوبتو در یک حد مشخصی نگهداره. یعنی به دوتا رله که یکی برای رطوبت ساز هست و یکی دیگه فن متصل بشه و وقتی دما و رطوبت بالا رفت فن شروع کنه به کار کردن و وقتی رطوبت از 75% پایینتر اومد رطوبت ساز رو فعال کنه و فن خاموش باشه.
از اونجایی که تو کد نویسی اردوینو حرفه ای هستم... رفتم سایت های خارجی و یه چرخ زدم و سورس کد وکتابخانه اینو پیدا کردم به شرح زیر(البته دارم سعی میکنم یاد بگیرم ولی این مورد اضطراریه) :
کد:
#include <U8glib.h>  // U8glib library
#include <dht.h>     // DHT library

#define dht_apin A5  // Analog pin to which the sensor is connected
dht DHT;
               /*Uncomment and comment*/
U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9, 8);  // DIN=13, CLK=11, CS=10, DC=9, Reset=8
//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9, 8); // DIN=13, CLK=11, CS=10, DC=9, Reset=8
//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9, 8); // DIN=13, CLK=11, CS=10, DC=9, Reset=8

void draw(void) 
{
   u8g.setFont(u8g_font_fub17r);   // select font
   u8g.drawStr(0, 20, "Temp: ");   // put string of display at position X, Y
   u8g.drawStr(0, 60, "Hum: ");
   u8g.setPrintPos(72, 20);        // set position
   u8g.print(DHT.temperature, 0);  // display temperature from DHT11 in Celsius
   u8g.println("C"); 
   u8g.setPrintPos(60, 60);        // set position
   u8g.print(DHT.humidity, 0);     // display humidity from DHT11
   u8g.println("%");
}
void setup(void) 
{

}

void loop(void)
{
   DHT.read11(dht_apin);  // Read apin on DHT11
   u8g.firstPage();  
   do 
{
   draw();
}  while( u8g.nextPage() );
   delay(2000);  // Delay of 2 sec before accessing DHT11 (min - 2sec)
}
                           /*END OF FILE*/
این برای همون سنسور و صفحه نمایش هست ولی مشکلی که داره اینه که هیچ کنترلی بر دما و رطوبت نداره، یعنی براش تعریف نشده که وقتی رطوبت بالای 80% رسید (ینی همون مقدار max سنسور) یا دما بالا رفت رله 1 رو فعال کنه تا درصد بیاد پایین و همینطور کمتر شدنی رله 2 رو فعال کنه....
ممنون میشم کمکم کنید اینم اضافه کنم، ولتاژ خود دستکاه ها که ربطی به مشخصات رله نداره؟ 220 هم باشه روشن میکنه؟

کارهای دیگه ای که میخوام انجام بده؛ اضافه کردن یک تایمر برای کنترل رله سوم که برای دستگاه دیگه هست. (روشن کردنش در بازه زمانی مشخص و طولانی مثلا ماهی دوبار به مدت 1 دقیقه)

و اخری وصل شه به سنسور فتوسل که رله 4 رو کنترل کنه برای کنترل لامپ و روشنایی. شب خاموش شه، روز روشن شه
با فعال شدن هر کدوم از عملیات هم رو صفحه OLED اهمی چیزی بنویسه.
و دوتا کلید هم باشه که یکیش خودش روشن شه و دیگری باهاش چیز دیگه رو روشن کنیم و واسه ایناهم نوشته بیاد.
امکانش هست همچین چیزی؟ یا باید چندتا اردوینو بگیرم؟ بنظرم تعداد پین هاش کفایت میکنه
پیشاپیش ممنونم.