جدول المحتويات:

ضوء مزاج Android يتم التحكم فيه صوتيًا: 11 خطوة (مع صور)
ضوء مزاج Android يتم التحكم فيه صوتيًا: 11 خطوة (مع صور)

فيديو: ضوء مزاج Android يتم التحكم فيه صوتيًا: 11 خطوة (مع صور)

فيديو: ضوء مزاج Android يتم التحكم فيه صوتيًا: 11 خطوة (مع صور)
فيديو: كود سري في الآلة الحاسبة في هاتفك هيبهرك 2024, شهر نوفمبر
Anonim
التحكم الصوتي Android Mood Light
التحكم الصوتي Android Mood Light
التحكم الصوتي Android Mood Light
التحكم الصوتي Android Mood Light

كنت بحاجة إلى إنشاء فصل دراسي لمجموعة Maker المحلية الخاصة بنا. شيء يضمن حتى للزائرين لأول مرة فوزًا واضحًا ومكافأة كبيرة بدون ضجة أو ضجة أو أدوات أو مواد متخصصة. احتاج الطلاب إلى أخذ شيء وظيفي وممتع إلى المنزل يمكنهم إظهاره لأصدقائهم ، والقيام بذلك بعد ظهر أحد الأيام - وكان يجب أن يكون مجانيًا. (وأتمنى إعادتهم للمزيد ، أو لفصل ذي صلة) لذلك قمت بإنشاء هذا المشروع.

قم بتحويل هاتفك أو جهازك اللوحي القديم إلى لوحة تحكم بإضاءة الحالة المزاجية ولوحة الحالة. مجانا!!! من السهل القيام به في فترة ما بعد الظهر - لا توجد خبرة مطلوبة (الأحد ، الأحد)

يمكن لأي شخص لديه جهاز Android والوصول إلى جهاز كمبيوتر برمجة تطبيق يتم التحكم فيه صوتيًا في غضون ساعة أو ساعتين. يستخدم برنامج MIT App Inventor المجاني ، لذلك لا توجد تكلفة. يمكنهم بسهولة تخصيصه ، ثم إضافة براعتهم الخاصة إلى غطاء أو علبة. ويمكنهم إعادة نفس الشيء إلى الفصل ومواصلة توسيع وتحسين مشاريعهم لعدة أشهر.

يوفر المشروع نقطة انطلاق جيدة للبرمجة ، ولكنه لا يكفي لإرضاء الأشخاص حقًا - فهو مصمم لإعادة الأشخاص إلى الفصل الدراسي التالي. أنا أعلم الشر. لكنه يقود الناس إلى Arduino ، مما يؤدي إلى Raspberry Pi ، مما يؤدي إلى الإلكترونيات واللحام. إذا كانوا سعداء بالتطبيق الأساسي ولا يرغبون في البرمجة بعد الآن ، فيمكنهم أيضًا إنشاء حالة مخصصة لذلك عندما يعودون إلى Maker Group للحصول على دروس في النسيج والخياطة والورق والرسم والأعمال الخشبية والإطار- صنع أو حتى تصميم وطباعة ثلاثية الأبعاد.

متطلبات أساسية

  • هاتف أو جهاز لوحي قديم يعمل بنظام Android (حاليًا 2.3 أو أحدث)
  • خدمة الإنترنت
  • حساب مخترع التطبيق (مجاني)
  • على نحو مفضل ، جهاز كمبيوتر مثبت عليه متصفح Chrome

تحضير

يجب أن تكون على دراية ببرنامج App Inventor التابع لمعهد ماساتشوستس للتكنولوجيا. هناك الكثير من التعليمات حول هذا الموضوع (بعضها متقدم جدًا). لكن أفضل مكان لتعلم App Inventor هو على موقع الويب الخاص بهم وسلسلة ممتازة من البرامج التعليمية. يتعلم معظم الناس المفاهيم الأساسية في غضون دقائق. بعد كل شيء ، هذا هو نفس المتجر الذي أنشأ بيئة برمجة Scratch ، وتطبيق برمجة LEGO Mindstorms الأصلي. إذا كنت أكبر من أن تعرف شيئًا عن هذه الأشياء ، فاطلب من ابنك في المدرسة المحلية مساعدتك.

إذا كنت تقوم بتدريس الفصل ، فمن المحتمل أن تكون على دراية بمعظم المكونات والأوامر. يكاد يكون من المؤكد أن يطلب شخص ما في الفصل القيام بشيء مختلف عما هو موضح في هذا البرنامج التعليمي. يمكنك الالتزام بالبرنامج النصي وفعل ما هو معروض هنا فقط. لكنني لاحظت أننا نحصل على معدل أعلى بكثير من الزائرين العائدين عندما نتمكن من مساعدة الجميع في إنشاء نسخة فريدة بميزات "متقدمة" يمكنهم عرضها لأصدقائهم.

لذا تعرّف على الأساسيات ، ثم عد إلى البرنامج التعليمي خطوة بخطوة.

الخطوة 1: التصميم والإعداد

Image
Image
التصميم والإعداد
التصميم والإعداد

قم بإنشاء لوحة قماشية

  • في وضع "المصمم" ، انتقل إلى لوحة "الرسم والرسوم المتحركة".
  • اسحب "لوحة قماشية" إلى الشاشة.
  • اضبط عرض وارتفاع اللوحة على "Fill Parent"
  • سننشئ الكود لتغيير لون اللوحة في خطوات لاحقة.

إنشاء التعرف على الصوت

  • من لوحة "الوسائط" ، اسحب "SpeechRecognizer" إلى الشاشة.
  • هذا هو المكون الذي سيستمع لأوامرنا الصوتية.
  • سنقوم بتهيئة هذا العنصر لاحقًا.

خلق القدرة على الكلام

  • أيضًا من لوحة "الوسائط" ، اسحب كائن "TextToSpeech" إلى الشاشة.
  • سنستخدم هذا المكون لإنشاء مطالبات منطوقة للمستخدم.
  • سيتم أيضًا تكوين هذا العنصر لاحقًا في البرنامج التعليمي.

لقد قمنا للتو بتثبيت المكونات الأساسية لتطبيقنا - كل ذلك في بضع ثوانٍ. ننتقل الآن إلى تكوينها وترميزها. لذلك ، نحتاج إلى التبديل إلى وضع "الكتل". انظر في الزاوية العلوية اليمنى من الشاشة وانقر فوق الزر Blocks. إذا كنت تريد العودة إلى وضع المصمم ، فما عليك سوى النقر فوق الزر المصمم.

الخطوة 2: ابدأ تشغيل SpeechRecognizer

ابدأ تشغيل SpeechRecognizer
ابدأ تشغيل SpeechRecognizer

تذكر: قم بالتبديل إلى وضع "BLOCKS": تأكد من التبديل إلى وضع الحظر بالنقر فوق الزر الموجود في الزاوية اليمنى العليا من الشاشة. ستظهر مجموعة جديدة من اللوحات. سنستخدم هذه اللوحات والكتل لبرمجة ضوء الحالة.

نريد أن نبدأ الاستماع للأوامر بمجرد فتح التطبيق. للقيام بذلك سنقوم "باستدعاء" كائن SpeechRecognizer عندما يتم "تهيئة" الشاشة الأولى. قام AppInventor تلقائيًا بإنشاء "شاشة" لنا. يحتوي كل تطبيق على شاشة واحدة على الأقل ، وبعضها يحتوي على عدة شاشات. نحن بحاجة فقط إلى الافتراضي.

تهيئة الشاشة

  • انقر فوق كائن الشاشة في القائمة اليمنى.
  • من القائمة المنبثقة ، اسحب الكائن "عند بدء تشغيل الشاشة" إلى الجزء الرئيسي.

ابدأ تشغيل أداة التعرف على الكلام

  • انقر فوق الكائن "SpeechRecognizer" في القائمة اليسرى
  • اسحب الكائن "call SpeechRecognizer getText" إلى الجزء الرئيسي
  • قم بتوصيل هذا الأمر داخل كتلة تهيئة الشاشة

الآن ، يبدأ البرنامج تلقائيًا في الاستماع إلى الأوامر الصوتية (getText) بمجرد تحميل الشاشة الأولى (التهيئة). بعد ذلك ، نخبر الكمبيوتر بما يجب فعله عندما يسمع الأوامر.

الخطوة 3: إنشاء شجرة القرار

إنشاء شجرة القرار
إنشاء شجرة القرار
إنشاء شجرة القرار
إنشاء شجرة القرار
إنشاء شجرة القرار
إنشاء شجرة القرار

يستمع الكمبيوتر الآن للأوامر الصوتية ، لذا نحتاج بعد ذلك إلى تحديد ما يجب فعله بعد سماع كلمات معينة. في هذا المشروع ، سنستخدم في الغالب أسماء الألوان مثل الأزرق والأخضر والأصفر. عندما يسمع الكمبيوتر هذه الكلمات ، فإنه سيغير لون كائن Canvas.

نقوم بذلك عن طريق الاختبار لمعرفة ما إذا كان الأمر الصوتي يتطابق مع أي كلمات حددناها. إذا كان الأمر الصوتي يتطابق مع كلمة محددة مسبقًا ، فنحن نريد أن يتخذ الكمبيوتر إجراءات معينة - مثل تغيير لون اللوحة وإعطاء بعض الملاحظات اللفظية. إذا لم يتم العثور على تطابق ، نحتاج إلى إخبار المستخدم بحدوث خطأ ما.

نبدأ بإنشاء إطار فارغ لإجراء جميع الاختبارات والإجراءات.

ماذا تفعل بعد الحصول على أمر صوتي

  • انقر فوق SpeechRecognizer في القائمة اليسرى
  • اسحب قالب "بعد الحصول على النص" على الجزء الرئيسي
  • (ضع الكتلة مباشرة على المسرح ، وليس داخل الكتلة السابقة)

إنشاء خانات اختبار

  • انقر فوق التحكم في قسم المدمج في القائمة اليمنى
  • اسحب كتلة أوامر If-Then إلى الجزء الرئيسي
  • قم بتوصيل كتلة If-then داخل كتلة afterGettingText
  • انقر فوق رمز الترس الأزرق في كتلة If-then
  • من النافذة المنبثقة التي تظهر ، اسحب عدة كتل فرعية Else-If إلى كتلة if-then الرئيسية
  • اسحب أيضًا مجموعة فرعية أخرى إلى نهاية القائمة

في الخطوة التالية ، سنبدأ في ملء هذه الخانات الفارغة بالاختبارات والإجراءات - قلب البرنامج.

الخطوة 4: اختبار المباريات

اختبار للمباريات
اختبار للمباريات
اختبار للمباريات
اختبار للمباريات
اختبار للمباريات
اختبار للمباريات
اختبار للمباريات
اختبار للمباريات

يستمع التطبيق إلى الأوامر المنطوقة ، وهناك إطار عمل لملئه باختبارات على تلك الأوامر الصوتية. الآن ، دعنا نحدد الاختبارات. أولاً ، نقول للكمبيوتر أن يختبر ما إذا كان كائنان متساويين ، ثم نحدد الكائن الأول كأمر صوتي والعنصر الثاني على أنه جزء من النص. سننشئ اختبارًا واحدًا فقط هنا ، ولكن يتم استخدام نفس التقنية لإنشاء ستة أو عشرة أو مائة اختبار. إذا كان الاختبار الأول مطابقًا ، فإن البرنامج يتخذ إجراءً ، وإلا فإنه ينتقل إلى الاختبار التالي وهكذا.

قم بإنشاء اختبار المساواة

  • انقر فوق Logic في قسم Built-In من القائمة اليسرى
  • اسحب اختبار = (يساوي) على الجزء الرئيسي

اضبط العنصر الأول على نتيجة الصوت

  • انقر فوق SpeechRecognizer في القائمة اليسرى
  • اسحب كتلة نتيجة إلى الجزء الرئيسي
  • قم بتوصيل SpeechRecognizer. Result في الفتحة اليسرى من كتلة اختبار المساواة

قم بتعيين العنصر الثاني إلى كتلة نصية

  • انقر فوق النص في القسم المدمج في القائمة اليسرى
  • اسحب كتلة حقل نص أساسية إلى الجزء الرئيسي
  • في كتلة النص هذه ، اكتب الكلمة التي تريد اختبارها
  • قم بتوصيل كتلة النص في الفتحة اليمنى من كتلة اختبار المساواة

ضع الاختبار في المكان المناسب

  • الآن ، قم بتوصيل كتلة Equals-Test بالكامل في IF Slot لشجرة القرار
  • في الخطوات التالية سنقوم بتعيين بعض الإجراءات التي يجب اتخاذها عندما يكون الاختبار صحيحًا

مثال: إذا قال المستخدم "أزرق" ، فسيقوم البرنامج بالتقاط تلك الكلمة في سلة "نتيجة". ثم سيختبر لمعرفة ما إذا كانت تلك النتيجة (الزرقاء) تطابق الكلمة التي كتبتها داخل كتلة النص. إذا كانت متطابقة ، فسيقوم البرنامج بعد ذلك بتنفيذ الإجراءات في الجزء "ثم" من الكتلة (سنحدد الإجراءات في الخطوات التالية). إذا كان الأمر الصوتي لا يتطابق مع النص ، فحينئذٍ ينتقل البرنامج إلى الاختبار التالي حتى يجد تطابقًا أو يصل إلى عبارة else النهائية "لشيء ما خطأ".

ملاحظة: ليس من الضروري أن يكون الأمر الصوتي ملونًا. في مثال الكود ، نستخدم الكلمتين "dark" و "light" لتشغيل الأسود والأبيض. يمكننا بسهولة استخدام كلمات مثل:

  • أمي / أبي / بيلي / سوزي
  • سعيد / حزين / غاضب / جائع
  • النوم / الدراسة / البث / الحفلة

الخطوة الخامسة: قدم ملاحظاتك اللفظية

قدم ملاحظاتك اللفظية
قدم ملاحظاتك اللفظية
قدم ملاحظاتك اللفظية
قدم ملاحظاتك اللفظية

نحتاج الآن إلى إنشاء بعض الإجراءات عندما يتطابق الأمر الصوتي مع الاختبار. أولاً ، سنخبر المستخدم باللون الذي يعتقد البرنامج أنه وجد تطابقًا له.

تحدث بلوك افعل ما تريد

  • انقر فوق كائن TextTo Speech في القائمة اليسرى
  • اسحب كتلة Speak. Message على المنصة

اكتب ما تريد أن تقوله

  • انقر فوق كتلة النص في القسم المدمج في القائمة اليسرى
  • اسحب كتلة نصية فارغة أساسية إلى الجزء الرئيسي
  • اكتب العبارة التي تريدها أن تقول

اجمع الأجزاء

  • قم بتوصيل كتلة النص المعبأة في كتلة Speak. Message
  • قم بتوصيل Speak. Messageblock المُجمع بفتحة ثم

الآن ، عندما يكتشف البرنامج تطابقًا مع الأمر الصوتي ، فسيقوم البرنامج بنطق العبارة التي تريدها فقط

كتبته. كن مبدعا إذا كنت تريد:

  • قال فريد ، إنه أحمر
  • Boo hoo hoo ، إنه أزرق
  • أخضر ، حقًا؟ هذا ليس لونك يا صاح.

الخطوة 6: اضبط لون القماش

اضبط لون القماش
اضبط لون القماش
اضبط لون القماش
اضبط لون القماش
اضبط لون القماش
اضبط لون القماش

الآن ، سنقوم أخيرًا بتغيير لون اللوحة القماشية لمطابقة الأمر المنطوق.

تعيين لون خلفية اللوحة القماشية

  • انقر فوق كائن Canvas في القائمة اليسرى
  • اسحب كتلة SetCanvasBackgroundColorTo إلى الجزء الرئيسي

حدد Color Swatch

  • انقر فوق كائن اللون في القسم المدمج في القائمة اليسرى
  • اسحب عينة ألوان على الجزء الرئيسي

اجمع الأجزاء

  • قم بتوصيل حامل اللون في كتلة SetBackgroundColor
  • قم بتوصيل الكتلة المجمعة في فتحة ثم من عبارة If-then (أسفل كتلة الكلام)

رغوة الصابون تكرار شطف

ربما يكون هذا هو الوقت المناسب لاختبار كيفية عمل البرنامج. قم بتحميله على جهاز Android الخاص بك واختبره قبل تكرار الأوامر 10 مرات.

الآن بعد أن عرفت أن الكود الأساسي يعمل ، قم بتكرار الاختبار والإجراءات لكل لون تريد أن تكون قادرًا على تحديده.

لقد قمت للتو بإنشاء الإطار الأساسي للبرنامج. عندما يكتشف البرنامج تطابقًا للأمر الصوتي ، سينطق العبارة المحددة ، ثم يغير لون اللوحة إلى اللون المحدد. يمكنك أيضًا تحديد قيم RGB و alpha فردية ، لذلك يمكنك إنشاء أمر مثل ، أزرق أكثر وأقل أحمر. يمكنك أيضًا إنشاء أمر لتعيين لون عشوائي ، وجعل الألوان تنبض وتتلاشى أو تتنقل عبر قوس قزح.

الخطوة 7: اكتشاف أخطاء عدم وجود تطابق

اصطياد أخطاء عدم العثور على تطابق
اصطياد أخطاء عدم العثور على تطابق

ولكن ماذا لو لم يجد الأمر الصوتي تطابقًا - فأنت أخطأت في النطق أو عطست بدلاً من ذلك؟ هذا ما هو البيان الأخير لـ Else. عندما تفشل جميع الاختبارات الأخرى ، ينفذ البرنامج الإجراء في عبارة else. تقوم بإنشاء هذا البيان تمامًا كما فعلت في العبارات السابقة (باستثناء عدم الحاجة إلى اختبار).

  • قم بتوصيل حقل نصي في كتلة SpeakMessage وقم بتوصيله بفتحة else الأخيرة.
  • أخبر المستخدم ، "عفوًا ، لا أعرف ما الذي تحاول قوله - الرجاء المحاولة مرة أخرى."

لقد شارفت على الانتهاء. لا يوجد سوى بضع خطوات أخرى لاتخاذها الآن.

الخطوة 8: بدء التعرف على الصوت يدويًا

بدء التعرف على الصوت يدويًا
بدء التعرف على الصوت يدويًا

بمجرد اختبار الأمر الصوتي واتخاذ الإجراءات المناسبة ، يتوقف البرنامج عن الاستماع لمزيد من الأوامر. هناك العديد من الطرق للتغلب على هذا ، ولكن معظمها معقد بالنسبة للمبتدئين. لذلك سوف نتمسك بشيء بسيط - المس الشاشة لجعل البرنامج يبدأ في الاستماع مرة أخرى.

  • انقر فوق كائن Canvas في القائمة اليسرى
  • اسحب كتلة whenCanvasTouchDown إلى الجزء الرئيسي (ككائن منفصل ، وليس داخل أي كتلة أخرى)
  • انقر فوق كائن SpeechRecognizer في القائمة اليسرى
  • اسحب كتلة callSpeechRecognizer. GetText إلى الجزء الرئيسي وقم بتوصيلها في كتلة whenCanvasTouchDown

الآن ، عندما يتم لمس الشاشة ، سيبدأ البرنامج في الاستماع إلى أمر صوتي.

الخطوة 9: كيف يبدو البرنامج الكامل

كيف يبدو البرنامج الكامل
كيف يبدو البرنامج الكامل

لقد انتهيت - لقد أنشأت للتو تطبيق Andoid الذي يتم التحكم فيه صوتيًا والذي يحول هاتفك أو جهازك اللوحي القديم إلى إضاءة مزاجية. إذا كنت تواجه أي مشكلة في تشغيلها ، فقم بتنزيل الإصدار بالحجم الكامل من الصورة في هذه الخطوة. تُظهر هذه الصورة البرنامج بأكمله بالإضافة إلى بعض الإضافات.

ولكن كما ترى ، فإن البرنامج بأكمله عادل حقًا

  • بداية المكالمة
  • سلسلة من الاختبارات والإجراءات
  • ثم إعادة.

هذا البرنامج يخدش سطح ما يمكنك القيام به مع MIT App Inventor. هناك الكثير من الأوامر ، وحتى الأوامر التي استخدمناها في هذا المشروع بها خيارات لم نستكشفها. خذ هذا البرنامج الأساسي وقم بالبناء عليه لإنشاء إضاءة مزاجية مخصصة أو لوحة الحالة أو لوحة العرض.

الخطوة 10: التوسيع والتوسيع

يتوسع ويتوسع
يتوسع ويتوسع
يتوسع ويتوسع
يتوسع ويتوسع
يتوسع ويتوسع
يتوسع ويتوسع
يتوسع ويتوسع
يتوسع ويتوسع

حسنًا ، لنفعل شيئًا آخر للمتعة فقط. بدلاً من مجرد تغيير لون الشاشة ، دعنا نعرض صورة. يمكنك أيضًا عرض مقاطع الفيديو أو صفحات الويب أو الرسائل النصية. العب واستمتع.

  • عد إلى وضع المصمم من خلال النقر فوق الزر الموجود في الزاوية اليمنى العليا من الشاشة
  • انقر فوق Canvas في القائمة اليسرى
  • انقر أيضًا على Canvas في قائمة المكونات (اللوحة الثانية من اليمين)
  • سيؤدي ذلك إلى إظهار لوحة Properties الخاصة بـ Canvas
  • في لوحة الخصائص (أقصى اليمين) ، انقر فوق صورة الخلفية
  • قم بتحميل صورة باستخدام مربع الحوار المنبثق
  • عد إلى وضع الحظر
  • أضف عبارة if-then إضافية
  • قم بإضافة اختبار لأمر الصورة
  • أضف setBackgroundImageTo كتلة إلى شجرة القرار - استخدم اسم الصورة
  • أضف أيضًا setBackgroundImageTo إلى كتلة Touchdown لإعادة التشغيل - اضبط الاسم على "none"

والازدهار ، يمكنك الآن تحميل الصور وكذلك تغيير اللون. قد ترغب في اللعب مع حجم الصورة. أو حاول التحميل في كائن فيديو. يمكنك رسم أشكال على اللوحة ، أو إنشاء رسوم متحركة. يمكنك عرض الأرقام والكلمات والرسوم البيانية - أو إنشاء عدة لوحات قماشية لعناصر متعددة.

يمكنك أيضًا إنشاء برامج للوصول إلى أجهزة الاستشعار المدمجة بهاتفك. يمكنك الاتصال بتطبيقات أخرى على هاتفك ، والاتصال بالويب وسحب المعلومات من هناك ، والاتصال بأجهزة أخرى باستخدام Bluetooth أو WiFi.

أو استخدم IFTT سهل الاستخدام بشكل لا يصدق للحصول على Alexa أو مساعد آخر لضبط الحالة المزاجية أو التحكم في جميع أجهزتك القديمة..

لقد بدأت للتو مع MIT App Inventor ، ولكن يمكنك معرفة مدى سهولة وقوة استخدامه. لذا اذهب للاستكشاف وقم بإنشاء لوحة العرض الخاصة بك.

الخطوة 11: الحالات والأغطية

حالات وأغطية
حالات وأغطية
حالات وأغطية
حالات وأغطية
حالات وأغطية
حالات وأغطية

لذلك كان ذلك ممتعًا للغاية ، حيث برمجت تطبيقًا صوتيًا. لكنه لا يزال يبدو مثل الهاتف القديم أو الجهاز اللوحي - نوع من الملل. لماذا لا تضيف غطاء أو حافظة إلى الجهاز لجعلها تبدو مخصصة حقًا. هناك فقط بعض الاعتبارات التي يجب مراعاتها:

إذا قمت بتغطية الشاشة فإن المادة يجب أن:

  • لديك عدد كافٍ من الثقوب للسماح بإصبعك بلمس الشاشة
  • أو كن موصلاً بما يكفي لنقل لمستك إلى سطح الجهاز اللوحي

الخيارات الجيدة هي قماش شبكي أو دانتيل. كلاهما يغير مظهر الهاتف ، لكن يسمحان لبشرتك بالاتصال بالشاشة. تسمح بعض الأوراق الرفيعة والبلاستيك من نوع مايلر بمرور ما يكفي من الكهرباء للتسجيل على أنها لمسة.

  • إذا وضعت إطارًا حوله ، فتأكد من ترك مساحة كافية لسلك الطاقة.
  • تأكد من تركيب الجهاز بإحكام إذا قمت بوضعه على الحائط. قد تكون قديمة وعفا عليها الزمن ، لكنها لا تزال تعمل - لذا لا تكسرها الآن لأنك تعرف كيفية برمجتها.

لكن هذا موضوع مختلف تمامًا ، يستحق وفصلًا كاملًا ويمكن تعليمه في حد ذاته. وهذه طريقة رائعة لإعادة الزائرين الجدد إلى مساحة صناعيك. لذا تأكد من إخبارهم جميعًا "بالعودة للجزء الثاني من الفصل."

صنع سعيد ، ويكون ممتازا لبعضنا البعض.

موصى به: