Мазмұны:
- 1 -қадам: материалдар мен құралдар
- 2 -қадам: Жарықдиодты жолақты кішкене жолақтарға кесіңіз
- 3 -қадам: Экранды бірге дәнекерлеу
- 4 -қадам: Негізгі электрониканы дәнекерлеу
- 5 -қадам: Контроллер
- 6 -қадам: көйлек
- 7 -қадам: бағдарламалау
- 8 -қадам: Дайын өнім
Бейне: Футболкадағы көйлекдегі икемді понг: 8 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:27
Бұл менің 2013 жылға арналған Хэллоуин костюмім. Ол шамамен бір жыл жұмыс үстінде болды және оны жасау үшін бірнеше сағат қажет болды. Экран 14 -тен 15 пиксельге дейін, сондықтан ажыратымдылығы өте төмен, бірақ ол әлі де қызықты нәрселерді жасай алады. Ол физикалық тұрғыдан барлық бағытта икемді, бірақ оны зақымсыз бүктеуге болмайды. Ол USB арқылы про -мегаға қосылған бір түйме мен слайдтан тұратын контроллерге ие. Ұзақ уақыт бойы тірі қалу үшін ол кернеуді алу үшін тізбектелген 2200 мАч сұмдық екі батареяны, содан кейін оны қолдануға ыңғайлы ету үшін 5 вольтты реттегішті қолданады. Барлық электроника көйлектің ішкі қалтасына салынған, сондықтан оларды шешуге болады, сондықтан көйлекті жууға болады. Ол функционалды понг ойынын ойнайды. Ол алдымен Том Thumb қаріпінің өзгертілген нұсқасын қолдана отырып, әдемі көк әріптермен «PONG PLAY» сөзімен безендіреді (https://robey.lag.net/2010/01/23/tiny-monospace-font сайтынан табуға болады).html). Бес секундтан кейін батырманы басу немесе жылжыту үшін жақсы тәжірибе қалдыруға болады. Түймені басуды таңдаған кезде ойын басталады. Оң жақтағы қызыл қалақ - бұл компьютерлік қалақ, ал оң жақтағы жасыл қалақ - ойыншының қалақшасы, ол жоғары және төмен жылжу үшін слайдпен басқарылады. Әр жақ ұпай алуға тырысқанда доп айналады. Ойыншы допты қалақшаның шетімен ұруы мүмкін, оны жылдамдату (бұл жақсы мүмкіндік), бірақ компьютер мұны істей алмайды, оның орнына допқа қарағанда біршама баяу қозғалыспен тоқтап қалады. Нүкте қойылған кезде, пиксель жақтың қалақшасында ақ түске өзгереді. Ол төменнен бинарлы түрде есептеледі. мұндағы жасыл немесе қызыл - нөл, ал ақ - 1. 21 - ұтатын ұпай (немесе кімнің 21 ұпай алғанына байланысты ұтылады), сондықтан ойыншы қалақшасында 10101 оқылған кезде «СІЗ ЖЕҢЕСІҢ» мәтіні көрсетіледі. Тағы бір рет өзгертілген Том Thumb. Дәл солай болады, бірақ оның орнына «YOU LOSE» көрсетіледі. Жеңіс немесе жеңілістен кейін ойын Pong Play -ден кейін бірден қайта басталады. Толығымен қайта іске қосу үшін «Сиқырлы қораптағы» қайта жүктеу түймесі басылады, ол экраннан басқа электроникамен жабдықталған.
1 -қадам: материалдар мен құралдар
* Белгісімен белгіленген заттар міндетті емес, бірақ қажет емес. Материалдар: 4 ярд Adafruit Neopixle 60 пиксель метрлік жолақ 1 футболка * 1 жұп суспензия 1/2 ярд мата жеткілікті болады (Non созылмалы тоқу қолайлы) 6 футтық USB еркектен USB еркек кабелі 1 USB әйел аналық қосқыш 3 2 істікшелі JST аналық қосқыштар 4 2 істікшелі JST ер сымдар батарея зарядтағыш 2 6600 мАч батарея 1 аркада стилі түймесі 1 arduino pro-mega 1 FTDI тақырыбы 1 USB B аналық коннекторы ажырату тақтасы бар 1 қосу/өшіру қосқышы (ауыстыру) 1 ысыру қосқышы (ауысу немесе уақытша) 1 сырғытпалы потенциометр *1 жылжымалы кастрөл тұтқасы 1 жоғары ампер қосқыш жұбы *1 жоба корпусы 1 5В 3+ ампер кернеу реттегіші шағын аздап пластмасса, кейбір дәнекерлеуіштер, кейбір жіптер *кейбір ыстық желім *біраз уақыт серпімділік (мүмкін, кейбіреулерден сәл артық), кейбір табандылық (сізге қажет болуы мүмкін) кейбір жылу қысқыш түтіктер немесе электрлік таспа кейбір супер желім темірге көмекші құралдар *Көмекші қолдар Қалыпты қол s (немесе оларға қолы жететін біреу) Дәнекерлеуіш *ыстық желімді пистолет Дремель немесе зімпара Қашау Сым аршқыштар Сым кескіштер Қапсырма пистолет Бұранда жүргізуші Аралар түйреуіштер Тігін машинасы Мата қайшылары
2 -қадам: Жарықдиодты жолақты кішкене жолақтарға кесіңіз
Сіз қалаған кесу құралын қолданыңыз және жолақты әрқайсысы 15 пиксельден тұратын 14 сегментке кесіңіз. Тек «DO» «DIN» «+5V» және «GND» сияқты белгісі бар мыс іздерінің арасына кесіңіз. Егер ол мыстың үстіне дәнекерленген болса, онда олар бірден кесіледі. Ашық мысты тым көп кеспеуге тырысыңыз, бірақ егер сіз оны аздап ұрсаңыз, бұл жақсы. Барлық 14 жолақ кесілгеннен кейін, жолақтарды дәнекерлеуге жолдан шығару үшін әр ұшынан резеңкені аздап кесіңіз.
3 -қадам: Экранды бірге дәнекерлеу
Сымды алыңыз да, оны шамамен 3,5 дюйм (9 см) сегменттерге кесіңіз. Менің жағдайда дәнекерлеу кезінде түзу болуды жеңілдету үшін менде үш түрлі түс бар, бірақ бір түс жақсы жұмыс істейді. Сізге 40 -қа жуық кішкентай жігіттер қажет болады, бірақ мүмкін болса, екеуін кесіңіз. Сымды кесуді аяқтағаннан кейін, ұштарын алып тастаңыз және қаңылтырмен бекітіңіз (егер сізде дәнекерлеу тәжірибесі болса, келесі абзацқа өтуге болады), яғни пластмассадан сәл алып тастағаннан кейін әр сымның ұшына дәнекерлеңіз. Дәнекерді қыздырмаңыз және сымға өтуге тырыспаңыз, мыстың түбінен темірді дәнекерлеп қыздырыңыз және үстіңгі жағына қойыңыз. Шыдамды болыңыз және ыстық сымның дәнекерлеуді ерітуін күтіңіз. Дәнекерлеу үтігін дәнекерлеуді қатаң түрде бастау қиынға соғады (менің шыдамсыздығым мен сіздің сезіміңізді жақсы білемін), бірақ дәнекер жабыспайды. Жолақ бөліктерінің әр шетіндегі ашық мыс іздері үшін де осылай жасаңыз. Егер ол қазірдің өзінде дәнекерленген болса, бұл туралы алаңдамаңыз. Жолақ үшін сіз кейінірек жеңілдету үшін кішкене үйінді салғыңыз келуі мүмкін. Жолақпен жұмыс жасағанда, оны тез жасаңыз және жолаққа жылу жағуға көп уақыт жұмсамауға тырысыңыз. Дәнекерлеуді ізге еріту үшін қажет нәрсені ғана жасаңыз. Әрбір жолаққа сымды бірінші жолақтың соңына дейін дәнекерлеңіз (бірінші жолақ сымдары мен қосқышы бар, оны ашық ұшына дәнекерлеңіз). Егер сіз жолаққа қарасаңыз, онда сіз сымды дәнекерлеген соңына дейін көтерілген кішкентай жебелерді көресіз. Көрсеткілер қарама -қарсы бағытта болатындай етіп басқа жолақты алыңыз да, GND ізінен келетін сымды екіншісінің GND ізіне, +5В +5В -қа және т.б. Мұны қайталаңыз, осылайша көрсеткілер әр бөлімнен кейін бағытты өзгертеді, егер сіз оларды ұстанатын болсаңыз, ол жоғары және төмен зиг -загпен жүреді және соңында ұзын жолаққа созылуы мүмкін. Барлық 14 жолақ дәнекерленгеннен кейін, оларды орналастырыңыз, содан кейін жарық диодты тор құрайтындай етіп реттеңіз. Содан кейін жолақты зақымдамай кейін жоюға болатын әдісті қолданып, оларды бірге ұстаңыз. Мен скотч қолдандым. Барлығын бірге ұстауға жеткілікті жабысқақ, бірақ қалдық қалатындай жабысқақ емес. Мен қапсырмалар немесе скотч тәрізді тұрақтыға ештеңе ұсынбаймын. Барлығы скотчпен бекітілгеннен кейін +5В астындағы жолақтан оның жанындағы сымға дәнекерлеңіз. Бүкіл түбінде қуат шүмектері толығымен өтіп кеткенше қайталаңыз. Бұл светодиоды барған сайын экран күңгірттенбейді.
4 -қадам: Негізгі электрониканы дәнекерлеу
USB B қосқыш тақтасын (BOB) USB B қосқышына дәнекерлеңіз. Сәйкес сымдарды USB A қосқышына дәнекерлеңіз. Мен осы веб-сайттағы қосқыштың шығуын қарауға кеңес беремін, https://image.pinout.net/pinout_USB_files/pc_usb_connectors_pinout.png. USB A коннекторындағы сымдардың басқа ұштарын дәл қазір қайда дәнекерлеу керектігі туралы алаңдамаңыз; бұл контроллер қадамында қарастырылады. Деректер коннекторын ер коннектордан емес, аналық коннектордан кесіңіз (аналық коннектор екінші жағынан алынған). Еркек JST қосқыштарын аккумулятордың ұштарына дәнекерлеңіз, сонда қызыл қызылға, ал қара түс қараға ауысады. Ашық сымдардың үстінен жылуды қысқартатын құбырды ерітіңіз (дәнекерлеуге дейін сырғытыңыз), олар қысқа болмауы үшін немесе электрлік таспа немесе ыстық желім сияқты басқа заттарды пайдаланбауы үшін. Кейбір сымдарды барлық әйел JST коннекторларына дәнекерлеңіз. Түйреуіштер жылжып кетпеуі үшін еркек ұшын қосқаныңызға сенімді болыңыз. Полярлықтан абай болыңыз және сымдардың ер коннекторлармен сәйкес келетініне көз жеткізіңіз. Дәнекерлеу сымдары жоғары вольтты қосқышқа (бірақ бұл жұп емес) тағы бір рет қосылады, бұл кез келген түстердің сәйкес келетініне көз жеткізіп, түйреуіштердің ауысуын болдырмау үшін олардың бір -біріне қосылғанын тексереді. Әйелдердің қосқышын/сымдарын дәнекерлеңіз, осылайша олар қуат реттегішінің шектік кернеуінен өтуі үшін параллель емес, тізбектей қосылады. Сонымен, оң сымды басқа жинақтың теріс сымына дәнекерлеңіз, сондықтан қазір бізде бір дәнекерленбеген оң сым және бір теріс емес дәнекерленген сым бар, ал екі дәнекерленген сымдар әр түрлі қосқыштарға дәнекерленген. Теріс сымды алыңыз және оны басқа жерге теріс сымға дәнекерлеу үшін сақтаңыз. Енді оң сымды алып, оны коммутаторға дәнекерлеңіз Егер үш немесе одан да көп түйреуіш болса (немесе «қосулы» болудың бірнеше жолы болса), оны ортаңғы түйреуішке дәнекерлеңіз. Назар аударыңыз, «ортаңғы түйреуіш» физикалық түрде ортасында болмауы мүмкін. Оны анықтаудың жолы - кез келген күйде қосқыш кез келген жағдайда басқа істікшеге қосылатын түйреуішті табу. Егер түйреуіш мұндай болмаса, онда сізде өте ерекше қосқыш бар; оны кез келген түйреуішке қосыңыз және қосқышқа дәнекерленген келесі сым кем дегенде бір күйде сол сымға қосылатынын тексеріңіз. Енді кернеу реттегішіндегі оң қабылдау сымын қосқыштың қарама -қарсы шетіне дәнекерлеңіз, жоғарыда талқыланған. Позитивті кернеуді дәнекерленбеген жоғары ток қосқышының оң жағына дәнекерлеңіз. Теріс кіріс сымын алыңыз және оны жоғары ток қосқышының теріс ұшына дәнекерлеңіз. Енді біз қуатты Arduino мен Power жолағына параллель дәнекерлейміз. Енді кернеу реттегішінің шығыс сымдарын алып, оң және теріс жағынан екі бөлікті сымнан дәнекерлеңіз, осылайша олар Y түрінде шығады. Светодиодты жолақтың оң және теріс сымдарына екі істікшелі коннекторды дәнекерлеңіз. Сіз қолданатын қосқыштың қандай екені маңызды емес, бұл JST немесе менің жағдайда қуат/аудио кабелі немесе бірдеңе болуы мүмкін (мен сенімді емеспін, менде суреттер болмағаны үшін кешірім сұраймын). Оң қуат сымдарының бірін жарық жолағы үшін қарама -қарсы коннектордың оң жағына, ал теріс сымдардың біреуін коннектордың басқа түйреуішіне дәнекерлеңіз. Дәл осылай жасаңыз, бірақ еркек JST қосқышы/сым құрастыруы үшін. Шортты болдырмау үшін дәнекерлеу қосылыстарын оқшаулауды ұмытпаңыз. Енді USB B коннекторымен не істеу керектігін біліңіз. Оң сымды Arduino Pro Mega 5В саңылауына дәнекерлеңіз. Жерге қосылатын сымды алып, оны GND саңылауына дәнекерлеңіз. D+ алыңыз және оны цифрлық түйреуішке (немесе бұл жағдайда тесікке) дәнекерлеңіз. 40. D- аналогтық істікке 15. жерге сымды GND түйреуішіне жалғаңыз. Маска немесе скотч таспаны сымдарды тақтаға ұстау үшін өте жақсы жұмыс істейді, сондықтан олар дәнекерлеу үшін аударылған кезде құлап кетпейді. Енді бір сәттік түймені алып, сымды бір ұшынан VCC түйреуішіне (немесе кез келген кернеу шығысына) және екінші ұшын RESET істігіне дәнекерлеңіз.
5 -қадам: Контроллер
Біріншіден, бастау үшін дұрыс пішінді таңдау. Мұның бәрі контроллерді қалай құрғыңыз келетініне байланысты. Мен жалпақ контроллерді алғым келді, сондықтан мен 3 1/2 «3/4» тақтайдан алдым. бөлшектерді ыңғайлы және жұмыс істеуге ыңғайлы етіп орналастырыңыз. Француз қисық сызығын, циркульді, үшбұрышты және түзу жиекті қолданып, барлық бөліктер қайда бару керектігін сызыңыз. Сіз таңдаған кескіш құралды қолданып, негізгі контурды кесіңіз. Тыйым салынған аралау жақсы болар еді, бірақ мен өте жақсы жұмыс жасайтын араны қолдандым. Біркелкі өтуі үшін шеттерін тегістеңіз, содан кейін ыңғайлы болу үшін бұрыштарды тегістеңіз. Коммутатордың саңылауын бұрғылаңыз, содан кейін түбіне сәйкес келетін кез келген бөлікті құм, қашау және/немесе Дремельмен шығарыңыз. Үстіңгі жағынан ештеңе жасамауға тырысыңыз және оны кіргізу үшін бұрау, бұру немесе басқа нәрсені сығып алу үшін қажет нәрсені тек құммен сүртіңіз. Ол пластикалық гайкамен бекітіліп, бекітіледі. ауыстыру Потенциометрдің тұтқасы сәйкес келетін жерді бұрыңыз және оны суға бататындай етіп қиып алыңыз. Бұранданы ұстап тұру үшін бірнеше тесіктерді бұрғылаңыз. USB A коннекторының кішкене бөліктерін бүгіңіз, бұл оның жалпы енін сәл ұлғайтады (суреттерді қараңыз). Қосқыштың бір бөлігін кесіңіз, коннектордың сәйкес келетінін біртіндеп тексеріңіз. Коннекторды оның ұясына супер жабыстырыңыз. Пластмассадан кішкене бөлік алып, оны коннекторға сәйкес келетін етіп кесіңіз (суреттерді қараңыз), содан кейін ағашқа бекітіңіз. Жолға түсуі мүмкін барлық бөліктерді кесіңіз. Потенциометрді бұрап, тұтқаны бекітіңіз. Позитивті сымды потенциометрдің ұштарының біріне (айнымалы бөлігі емес) және теріс сымды қарама -қарсы жаққа дәнекерлеңіз. D-пинді кастрөлдегі айнымалы істікке дәнекерлеңіз. Кәстрөлдегі түйреуіштен сымды оң сыммен түймедегі түйреуіштердің біріне дәнекерлеңіз. D+ дәнекерлеу түймесінің басқа түйреуішіне. Қосалқы сымды кесіп, қажет бөлшектерді оқшаулаңыз.
6 -қадам: көйлек
Жарықты өткізетін ыңғайлы көйлек табыңыз. Мен осы ақ түсті футболканы таңдадым. Жарық ішкі жағынан жарқырап көрінсе, түсі мен стилі маңызды емес. Бірақ мен алдыңғы жағында графиканы ұсынбаймын. Көйлектің қай жерін алғыңыз келетінін шешуге көмектесу үшін бәрін салыңыз және оны өшіру үшін таңбалау құралын қолданыңыз. Менде (мен білетін кейбір адамдарды білдіреді) оңай жуылатын маталарды таңбалауға арналған қарындаш бар. Батареялардың, контроллер корпусының және экранның өлшемін өлшеп, сәйкес келетін қағаз бөліктерін кесіңіз. Содан кейін қағазды созылмайтын матаға бекітіңіз. Бұл үшін тоқыма жақсы жұмыс істейді. Содан кейін тігіс үшін шамамен төрттен бір дюйм қалдыратын тіктөртбұрышты кесіңіз. Содан кейін қағазды бағыттаушы үтік ретінде қолданып, матаға бүктеледі. Енді қағазды алып тастауға болады. Қалтаның үстіңгі жағында оны үш рет бүктеңіз. Оны орнында ұстау үшін үтіктеп, түйреңіз. Қаптаманың ортасына дейін тігіңіз. Енді бұрышты алып, бүктеп қойыңыз, сонда бір-біріне перпендикуляр тігілмеген жиектер параллель болады және бұрышқа жақын үтіктелген қыртыстың бойымен тігіледі (Суреттер шынымен көмектеседі). Мұны басқа бұрыш үшін де жасаңыз. Егер қалтаңыздан ауыстырып -қосқыш шықса, қалтаның түбіне түйме тесігін тігіңіз. Содан кейін түйме тесігін тігіп, ортаңғы бөлігін кесіңіз. Мен нақты нұсқауларды бере алмаймын, себебі менде түймелердің тесіктерін жасауға арналған керемет құрал болды. Қалтаны тігуден бұрын тесіктерді жасағаныңызға сенімді болыңыз. Бірнеше түйреуіштерді алыңыз және оларды қалтаға арналған белгілердің бұрыштарындағы көйлек арқылы өткізіңіз. Қалтаны алып, әр бұрышты түйреуішке бекітіңіз (көйлектің ішкі жағында), тігіс үшін төрттен бір дюйм қалдырып, оны көйлекке бекітіңіз. Қалта бекітілгеннен кейін. қалтаны ұстамайтын түйреуіштерді алыңыз және қалтаны көйлекке тігіңіз. Барлық қалталар үшін қайталаңыз. Экранды ұстайтын үлкен қалта үшін қалтаның төменгі жағындағы сымдар үшін бос орын қалдырыңыз. Көйлекке тесік қою үшін орынды белгілеп, астыңғы жаққа үтікті (матаның жылтырақ бөлігінен) алып, үтіктеңіз. Содан кейін, кішкене тесік үшін (мысалы, мен қосқышты ауыстыру үшін қолдандым), түйме саңылауын жасаңыз. Үлкен тесік үшін контурды белгілеп, сызық бойымен зигзаг тігісін қолданыңыз (немесе қисық немесе сізде не бар) және ортаңғы бөлікті кесіңіз. Қаласаңыз, қалталардың салмағын ұстап тұру үшін ілгіштерді қолдануға болады, екі қысқыш алдыңғы қалталарға, ал артқы қысқыш шалбарға бекітіледі. Сондай -ақ, мен теріге тиетін ілгіштердің бөліктеріне тігілген матаның кішкене жеңін алдым. Екі көйлек сәл қызып кетуі мүмкін, сондықтан мен матадан жасалған жеңді таңдадым.
7 -қадам: бағдарламалау
Және бұл код. Жақсы түсіндірілген бірнеше бөлік бар, бірақ басым көпшілігі олай емес. Егер сізде әр түрлі бөліктер бойынша сұрақтарыңыз болса, сіз маған жол нөмірін бере аласыз (бірінші нөмір ретінде #include) немесе маған жолдың көшірмесін және ол орналасқан функцияның (мысалы, loop () немесе compMovePaddle ()) және мен оны сізге түсіндіруге бар күшімді саламын, содан кейін оны түсіндіретін кодқа түсініктеме қосыңыз. #include #define PIN 6 // int buttonPin = 40 ойынының кіріс түйреуіштері екенін айтады; // есеп екі еселік массивте сақталады, себебі бұл esier int playerScore [5] = {0, 0, 0, 0, 0}; int compScore [5] = {0, 0, 0, 0, 0}; // доптың бағытын белгілейді int bvd = 0; // 0 төмен, 1 жоғары int bhd = 0; // 0 оңға, 1 солға // шарлардың орналасуын белгілейді int bvp = 8; int bhp = 6; // доптың жылдам режимде болуын тексереді логикалық fast = false; // оның балл екенін тексереді. логикалық cIsPoint = жалған; логикалық pIsPoint = жалған; // қалақшаның позициялары int cPaddle = 0; int pPaddle = 0; ұзақ алдыңғыMillis = 0; ұзақ алдыңғыMillisForComp = 0; // жылдам және баяу қозғалатын шар үшін кешіктіру уақыттарын орнатыңыз normInt ішіндегі «Int» және fastInt int normInt = 50 интервалына арналған; int fastInt = 10; // жеңісті тексеру үшін қолданылады. 1 -ойыншының жеңісі, -1 -компьютерлік жеңіс, 0 -әлі ештеңе болған жоқ int win = 0; // қатеден құтылу үшін. addOne операторында қолданылады және басқа жерде жоқ. int = 0; // Басталмас бұрын көрсетілетін нәрсе, -1 -бұл int pongPlay = {1, 2, 3, 4, 10, 11, 12, 13, 16, 18, 20, 27, 29, 33, 34, 41, 42, 61, 62, 63, 70, 71, 72, 76, 85, 86, 88, 91, 92, 94, 100, 101, 102, 103, 131, 132, 136, 139, 144, 145, 146, 147, 148, 161, 162, 166, 175, 183, 185, 192, 194, 195, 196, 197, 198, 199, 204, 205, 206, 207, 208, -1}; // егер сіз int youWin жеңсеңіз = {1, 2, 3, 4, 5, 16, 17, 18, 19, 20, 27, 33, 34, 39, 46, 47, 48, 49, 54, 55, 56, 57, 58, 77, 78, 79, 84, 88, 91, 92, 93, 94, 95, 99, 103, 106, 110, 114, 118, 130, 131, 132, 144, 145, 146, 147, 151, 162, 163, 168, 169, 170, 177, 181, 192, 193, 204, 205, 206, 207, -1}; // егер сіз int youLose ұтылсаңыз = {1, 3, 5, 16, 17, 18, 19, 20, 24, 26, 28, 31, 32, 33, 34, 35, 39, 46, 47, 48, 49, 62, 65, 77, 78, 79, 84, 86, 88, 91, 94, 99, 103, 106, 110, 122, 123, 124, 130, 131, 132, 144, 148, 152, 153, 154, 162, 163, 168, 169, 170, 181, 192, 193, 204, 205, 206, 207, 208, -1}; // жолақты Adafruit_NeoPixel жолағын орнатады = Adafruit_NeoPixel (210, PIN, NEO_RGB + NEO_KHZ800); // баптау, енгізу үшін 40 түйреуішін бұрмайды, жолақты бастайды, // хабарламасын көрсетеді және оны көрсетеді. void setup () {pinMode (buttonPin, INPUT); strip.begin (); for (int i = 0; pongPlay > 0; i ++) {strip.setPixelColor (pongPlay , strip. Color (0, 0, 255)); } strip.show (); кешіктіру (5000); while (digitalRead (buttonPin) == LOW) {// Бұл тұзақ! (түйме басылғанша.)}} void loop () {clearScreen (); // қалталарды тартады (int i = 0; i <5; i ++) {if (playerScore == 1) {strip.setPixelColor (204-i, strip. Color (255, 255, 255)); } else if ((playerScore == 0)) {strip.setPixelColor (204-i, strip. Color (0, 255, 0)); } if (compScore == 1) {strip.setPixelColor (5+i, strip. Color (255, 255, 255)); } else if ((compScore == 0)) {strip.setPixelColor (5+i, strip. Color (255, 0, 0))); }} // допты бастапқы күйіне салады strip.setPixelColor (98, strip. Color (255, 255, 255)); strip.show (); // доп жоғары немесе төмен түсетінін шешеді (pIsPoint == false && cIsPoint == жалған) {clearScreen (); белгісіз ұзақ токMillis = millis (); // ойыншының қалақшаның орнын тағайындайды pPaddle = checkPaddlePos (); // келесі орынды тексереді checkNext (); // допты жылжыту if (fast == false) {if (currentMillis - previousMillis> normInt) {previousMillis = currentMillis; moveBall (); }} else if (fast == true) {if (currentMillis - previousMillis> fastInt) {previousMillis = currentMillis; moveBall (); }} // допты салыңыз if (bhp%2! = 0) {strip.setPixelColor (bhp*15+14-bvp, strip. Color (255, 255, 255)); } else if (bhp%2 == 0) {strip.setPixelColor (bhp*15+bvp, strip. Color (255, 255, 255)); } // компьютерлік қалақшаның қозғалысы compMovePaddle (); // draw - бұл қалақшалар drawPaddles (); // іс жүзінде бәрін орнатты.strip.show (); // нүкте қойылғанын тексеру: if (pIsPoint == true) {which = 0; bhd = 0; addOne (); үзіліс; } else if (cIsPoint == true) {қай = 1; bhd = 1; addOne (); үзіліс; }} if (win == 1) {clearScreen (); for (int i = 0; youWin > 0; i ++) {strip.setPixelColor (youWin , strip. Color (255, 0, 0))); strip.show (); } кешіктіру (5000); for (int i = 0; i <5; i ++) {playerScore = 0; compScore = 0; } жеңіс = 0; } else if (win == -1) {clearScreen (); for (int i = 0; youLose > 0; i ++) {strip.setPixelColor (youLose , strip. Color (0, 255, 0))); strip.show (); } кешіктіру (5000); for (int i = 0; i <5; i ++) {playerScore = 0; compScore = 0; } жеңіс = 0; } pIsPoint = жалған; cIsPoint = жалған; bvp = 8; bhp = 6; bvd = random (0, 2); // 0 төмен, 1 жоғары жоғары = жалған; } // Ойынға арналған AI жарамсыз compMovePaddle () {unsigned long currentMillis = millis (); if (currentMillis - previousMillisForComp> 51) {previousMillisForComp = currentMillis; if (bvp> = 13 && 10-cPaddle 0) {cPaddle--; } else if (bvp = 0 && cPaddle <10) {cPaddle ++; } else if (bvp-3> 10-cPaddle && 10-cPaddle> = 0 && cPaddle> 0) {cPaddle--; } if if (bvp <10-cPaddle && 10-cPaddle <= 10) {cPaddle ++; }}} // допты жылжытады void moveBall () {if (bhd == 0) {bhp--; } егер басқа (bhd == 1) {bhp ++; } егер (bvd == 0) {bvp--; } else if (bvd == 1) {bvp ++; }} // массивке біреуін қосады. Егер oneOne 0 болса, ол ойыншының есебіне қосылады. Егер бұл 1 болса, ол компьютерге void addOne () {if (which == 0) {// егер бұл ойыншының ұпайы болса // қосады. Бұл мен білетін қарапайым әдіс. for (int i = 0; i <5; i ++) {// loop if (playerScore == 0) {// егер бұл мән нөлдік ойыншы болса,ScoreScore = 1; // оны 1 үзіліс жасаңыз; // содан кейін кетіңіз} else {// егер бұл 1 ойыншы болса, ScScore = 0; // оны нөлге айналдырыңыз}}} else if (which == 1) {for (int i = 0; i <5; i ++) {if (compScore == 0) {compScore = compScore +1; үзіліс; } басқа {compScore = 0; }}} // Біреу жеңгенін тексереді. if (compScore [0] == 1 && compScore [2] == 1 && compScore [4] == 1) {win = -1; } else if (playerScore [0] == 1 && playerScore [2] == 1 && playerScore [4] == 1) {win = 1; }} // шарларды келесі позицияда тексереді void checkNext () {// checks, егер ұпай (bhp == 13) {pIsPoint = true; } else if (bhp == 0) {cIsPoint = true; } // егер ұпай жиналған болса, қалған нәрселерді өткізіп жіберіңіз, егер (pIsPoint == жалған || cIsPoint == жалған) {// допты тік тексереді, егер (bvp+bvd == 15) {bvd = 0; } else if (bvp+bvd == 0) {bvd = 1; } // допты көлденеңінен тексереді, егер (bhp+bhd == 13) {// алдымен компьютер жағында, егер (bvp> = 10-cPaddle && bvp <= 10-cPaddle+4) {if (bhd == 1) {bhd = 0; } егер басқа (bhd == 0) {bhd = 1; } жылдам = жалған; } if if (bvp+bvd == 10-cPaddle || bvp+bvd == 10-cPaddle+5) {if (bvp! = 0 && bvp! = 14) {if (bvd == 0) {bvd = 1; } else if (bvd == 1) {bvd = 0; } bhd = 1; } else if (bvp == 0 || bvp == 14) {bhd = 1; } жылдам = жалған; }} else if (bhp+bhd == 1) {// онда ойыншы жағында, егер (bvp> = pPaddle && bvp <= pPaddle+4) {// бұл қалақты қалыпты жерде ұрып жатыр ма? // допты серпіңіз! егер (bhd == 1) {bhd = 0; } егер басқа (bhd == 0) {bhd = 1; }} else if (bvp+bvd == pPaddle || bvp+bvd-5 == pPaddle) {// егер (bvp! = 0 && bvp! = 14) {// болса, ол бұрыштағы қалақшаны ұрады ма? жоғары немесе төмен емес пе? // Допты секір! егер (bvd == 0) {bvd = 1; } else if (bvd == 1) {bvd = 0; } bhd = 1; жылдам = ақиқат; } else if (bvp == 0 || bvp == 14) {// ол жоғары не төмен? // допты серпіңіз! bhd = 0; fast = true; // мәнді кейінірек допты тез қозғалатын етіп орнатыңыз}}}}} int checkPaddlePos () {// қазанды оқиды және егер қалтаның орналасуын шешеді, егер (analogRead (A15) <93) {қайтару 0; } else if (analogRead (A15) <186) {қайтару 1; } else if (analogRead (A15) <279) {қайтару 2; } else if (analogRead (A15) <372) {қайтару 3; } else if (analogRead (A15) <465) {қайтару 4; } else if (analogRead (A15) <558) {5 қайтару; } else if (analogRead (A15) <652) {6 қайтару; } else if (analogRead (A15) <745) {қайтару 7; } else if (analogRead (A15) <837) {8 қайтару; } else if (analogRead (A15) <= 931) {қайтару 9; } else if (analogRead (A15) <= 2014) {қайтару 10; }} void drawPaddles () {// draw қалақшаларды дұрыс жерде көрсетеді және қалақтағы есепті көрсетеді (int i = 0; i <5; i ++) {if (playerScore == 1) {strip. setPixelColor (pPaddle+i, strip. Color (255, 255, 255)); } else if ((playerScore == 0)) {strip.setPixelColor (pPaddle+i, strip. Color (255, 0, 0)); } if (compScore == 1) {strip.setPixelColor (199+cPaddle-i, strip. Color (255, 255, 255))); } else if ((compScore == 0)) {strip.setPixelColor (199+cPaddle-i, strip. Color (0, 255, 0))); }}} void clearScreen () {for (int i = 0; i <= 210; i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0))); } strip.show (); }
8 -қадам: Дайын өнім
Міне, дайын көйлек!
Ұсынылған:
FLEXBALL - Wi -Fi бар жүз пиксельді икемді ПХД: 6 қадам (суреттермен)
FLEXBALL - Wi -Fi бар жүз пиксельді икемді ПХД допы: Сәлеметсіз бе, өндірушілер, бұл moekoe! Flexball икемді ПХД негізінде жасалған, ол 100 WS2812 2020 адрестік жарық диодтармен жабдықталған. Ол ESP8285-01f арқылы басқарылады - Espressif ESP негізіндегі ең кіші модуль. Сонымен қатар, оның ADXL345 акселерометрі бар
Икемді дискідегі IR камерасының бұзылуы: 8 қадам (суреттермен)
Икемді дискідегі IR камерасының бұзылуы: Соңғы жеті жыл ішінде менде сандық камера сынған. Ол әлі де суретке түсіре алады, бірақ сынған экранға байланысты пайдалану мүмкін емес. Негізгі мәселе - кейде мәзір кездейсоқ пайда болады
Үлкен икемді мөлдір жарықдиодты матрица 150 доллардан төмен. Жасау оңай.: 8 қадам (суреттермен)
Үлкен икемді мөлдір жарықдиодты матрица 150 доллардан төмен. Жасалуы оңай. Мен кәсіби емес екенімді айтқым келеді, менде электроника бойынша ешқандай білім жоқ. Мен жай ғана қолмен жұмыс істегенді ұнатамын. Мен мұны мен сияқты кәсіби емес адамдарға жігерлендіру үшін айтамын. Сізде қабілет
Матаның қысымды икемді сенсоры: 4 қадам (суреттермен)
Матаның икемді қысым сенсоры: өткізгіш матаның 3 қабатынан матаның қысымды иілгішті қалай жасауға болады. Бұл нұсқаулық біршама ескірген. Жақсартылған нұсқалар үшін келесі нұсқауларды қараңыз: > > https://www.instructables.com/id/Conductive-Thread-Pre
DIY икемді баспа схемалары: 5 қадам (суреттермен)
DIY икемді баспа схемалары: қатты сиялы принтерді, мысмен қапталған полиимидті пленканы және электронды тақтаны өңдеу үшін қолданылатын химиялық заттарды қолдана отырып, бір жақты икемді баспа схемаларын шығарыңыз. Сіз ұялы телефондардың немесе ұқсас миниатюрленген гаджеттердің ішінен икемді ПХД таба аласыз. Flex ПХД