平成25年社会人講座 arduinoによるマイコン入門講座
DESCRIPTION
平成25年に熊本高専で開催されたArduinoによるマイコン入門講座の資料を頂いて掲載の許可を頂いたので掲載します。ライセンスは熊本高専に帰属し、その扱いはCCです。TRANSCRIPT
ArduinoŖťŨƗŰŸƤ%ēýi�fv25ghĪ¶�ĨÏ\ēU�ĪÊ��ýi�
�
1. ƗŰŸƤƨarduinoŗÓ7ŕÙ� 2. ĞéLEDŗµ² 3. �éLEDŗµ´ 4. ƑźƦŒġŬĩŦŇ 5. ĞéLEDŗƔƀơ´ 6. ƀŵƇŽŰƃƂŬ�ŎŌ%2ŗ�© 7. cdsžơŬ�ŎŌžƤŹƦŗ�ĵ� 8. 7žŶLEDŗµ´
��ŗ'Z(W)Ŗŏĵő�
ú�Řoï�^ĘŖŅőƨXěŖyŬ4ĹŅŕĺŦƨłçĄŒ�ħŅőŢŦĶťĶŕkŒX�ŅőĵĻşŇƩ�
ƗŰŵƣŸƤƏƝƦƀŗ¿ÌŒƨYĝíDţĝS Eŗ.mŕŔ
Ŗ�ūũŨƨ�ŏŗ6]�ƂƃƒŖŸƤƏƝƦƀŻŽƅƙ&�ŬĜ
ÎŅŌLSIíDŗŁœŬ�ŅşŇƩ CPUƨƚƛƠƨ%)2FăƨƀŰƗƦFăŕŔŬ�ŏŗĜÎFăŖ�ÖŅőĸŧƨ7�ŒŸƤƏƝƦƀœŅőŗ�Čŧŗ åŬ�Ņőĵ
şŇƩ
ƗŰŸƤœŘ�
�ĹŬ.mŇŨ(ç*ŗrĶČŧŖ4ĹŇ)ŁœĺŒĻşŇƩ �ķřƥƥƥ • �ĽŕŎŌŦƨç4Œ´ŧĺŏĽťĶŕP´ • �ĺ�ŌŦƨġŒÆŦʼnőĽũŨė·žƤŹƦ • ßŗ�Ŭç4ŒĀŨƣƕƃƇ • ¦şŎŌ�ĕŖç4ŒƓƃƇŖĦŬĴŀŨťĶŕĦţŧE
ç*ŗrĵČŧŖƨĵŪĵŪŕŬX¹ŇŨŁœĺŒĻşŇƩ
ƗŰŸƤŒ�ĺŒĻŨŗƲ�
ArduinoŘƨ7×ŕ%)2Ŭ"ķŌK�œProcessing/Wiring óùŬXìŅŌĔ»MĹŦ�vŃũŨƗŰŸƤƕƦƈŗÝÌŒƨ�ıŕÍĥĺĴŧşŇƩ �FXãŒ�½ŇŨƕƦƈIJLEONARDOijŘƨ2000(ĽŦĵŒÿ%:åŒŇƩ� LEONARDOŖŘ14�ŗƆżƀơ%)2ƏƤ(�ĐŘPWMŖŢ[q) ƨ6�ŗůƉƣŶ%2ƏƤƨĝ°(+5VœGND)ŕŔĺĴŧƨ¸uŬëÉŇŨŌšŗ4�ŗLED(ONƨLƨTXƨRX)œƨƕƦƈŗ4�ŬƠžƃƇŇŨŌšŗŽŰƃƂĺĴŧşŇƩ�
ArduinoœŘ�
ƳƹƴƺƵƷƸœƎſŸƤŬŏŕļşŅŤĶ
USBŷƦƑơ�
USBŷƦƑơŗ^ŃŕŸƋŵƀŗ�ŬArduinoŗŸƋŵƀŖbŅ抺ŇƩŢĶ��ŗQĻĵ�ŗŸƋŵƀŬƎſŸƤŗ0ĠŖĴŨUSBŸƋŵƀŖbŅ抺ŇƩ�
ŊŗlƆƍŰŽƈƟŰƍŗûŠćŠŬŅşŇƩ0ŗƒƣżŲŵƀƦŗ¾ĠŬðŕĺŦ�ÞŖ��ŅőĽōŃĵƩ�
Ĕ»MŗöWŬŅşŅŤĶ
¡ŖĔ»MŗöWŬŅşŇƩWindowsŗŽƀƦƇƚƊƝƦĮŇŝőŗƒƣŶƟƙĹŦArduinoŬď{Ņőā4ŅşŇƩ�
ā4ŅŌŦƚƊƝƦŗIJƄƦơijĹŦIJƗŰŸƤƕƦƈijœIJŻƠůơƖƦƇijŗöWŬO�ŅşŇƩ�
ĞéLEDŬµ²ŃʼnőŠşŅŤĶ
şňŘĞéLEDƧLight Emitting Diode)Ŭµ²ŃʼnőŠşŅŤĶƩGŗťĶŖ�ÜŅşŇƩ�
LEDŘæŗĒĵ�ĺƒƟŽ(ůƌƦƈ)ƨÇĵ�ĺƗŰƉŽ(ŴſƦƈ)ŖŕŧşŇƩæŗĒĵ�Ŭ13ÀŖƨÇĵ�ŬGNDŖ�ÜŅşŇƩ�
ƒƣŶƟƙŬ�ĵőŠşŅŤĶ
ArduinoŗƒƣŶƟƙŬ%2ŅşŇƩ�Q�Tƨ^�TŖªtŅőƨ%2ŅőŠőĽōŃĵƩ�%2ĺÚūŎŌŦƨ�÷ƕƀƤŬ}ŅőŸƤƎŰơŅşŇƩ�IJŸƤƎŰơÚ�ijœëÉŃũũřOKŒŇƩ��¡ŖArudinoŖŁŗƒƣŶƟƙŬąĊŅşŇƩ;Å8ƕƀƤŬ}ŅőĽōŃĵƩ��ŁũŒƨŁŗƒƣŶƟƙĺArduinoŖąĊŃũőƨŊŗ4�ĺĸŁŕūũşŇƩ��
ƒƣŶƟƙŬO�ŅőŠşŅŤĶ
¡ŖƨÅ8ŗĐ*ŗ~j'ŗ�TŬO�ŅőŠşŅŤĶƩ��ķř100ŖO�Ņőƨ;Å8ƕƀƤŬ}ŅőŠőĽōŃĵƩ��µ²ŗĕĚŬÓ7ŖO�ŇŨŁœĺ)�şŇƩ�ŗ�ŗ� ĺµ´ŅőĵŨ�ĕƨ�ŗ�ŗ� 嬴ŅőĵŨ�ĕŖŕŧşŇƩ��1000ōœ1Ëƨ100ōœ0.1ËŖŕŧşŇƩ��éıœ� ŬO�ŅőƨŊŗƒƣŶƟƙŬąĊŅőŠőĽōŃĵƩ�
Arduinoŗ�ĵ�ŗĸŃŦĵ
ƫƩFăŬÛŠşŇƩ İArduinoœ=ĐDŬ�ÜŅşŇƩ ƬƩƒƣŶƟƙŬ�ĻşŇƩ İÛŭōFăŖ¨Ŏőƨ£ŅĽ4�ŇŨťĶŖƒƣŶƟƙŬ�ĻşŇƩ ƭƩƒƣŶƟƙŬArduinoŖąĊŅşŇƩ İ�ĵŌƒƣŶƟƙŬArduinoŖůƃƒƣƦƈŅşŇƩ ī1Àœ2ÀŗĢÀŘƨłçĄŗţŧ�ĵ�ŒƨċŒŢOK.
ArduinoİLeonardoŖŏĵő
0�13ŗ14�ŗƆżƀơ%)2ƖƦƇ (Ŋŗ'ƭƨƮƨƯƨưƨƫƪƨƫƫƨƫƭŘůƉƣŶ)2:å) • Ɔżƀơ%2ƖƦƇƥƥƥĝHĺ�őĵŨĹŔĶĹŬ�Æ • Ɔżƀơ)2ƖƦƇƥƥƥ5VŗĝHŬ)2(LEDŗµ²) • ůƉƣŶ)2ƖƦƇƥƥƥ0�5VşŒŬ0.02V/ŠŒ)2 A0�A5ŗ6�ŗůƉƣŶ%2ƖƦƇ • 5VşŒŗĝHŬÕ0.005V/ŠŒ�Æ Ŋŗ�ƨ5Vœ3.3Vŗĝ°Ïĺ�ĆŃũőĵŨƩ�
ƒƣŶƟƙŬŠőŠşŅŤĶ
#ŞŔ%2ŅŌƒƣŶƟƙŬðŕĺŦƨArduinoŗƒƣŶƟƙŖŏĵőú�ŅşŇƩ ƒƣŶƟƙŖŘƨQĻĽ*Ŀő void setup(){ ƥƥƥ } void loop(){ ƥƥƥ } ŗƬŏŗžŵŻƞƤĺĴŧşŇƩ �
ƒƣŶƟƙŬŠőŠşŅŤĶ
void setup(){ ƥƥƥ } Řarduinoŗ,�öWŗ'ZŬ�ĻşŇƩ ŁŗĐ*ŘXê�ƨ�,ŗ1FōĿXêŃũşŇƩ void loop(){ ƥƥƥ } ŖXěŗ4�ŖŏĵőŗƒƣŶƟƙŬ�ĻşŇƩŁŗĐ*Ř�ĹŦ�ŜĢŖXêŃũőĵĻƨ�lşŒĻŌŦƨşŌ�,ŖwŨœĵĶ4�ĺàŧĈŃũşŇƩ �
ƒƣŶƟƙŬŠőŠşŅŤĶ
¡ŖØĹĽŠőĵĻşŅŤĶƩ int led =13;İ→ledŘ13œ?ņœĵĶtAƩ pinMode(led,OUTPUT);İ →13ƖƦƇŬ)2ƖƦƇŖöWƩ digitalWrite(led,HIGH); →13ƖƦƇŖ5VŬ)2Ʃ delay(100);İ →ƒƣŶƟƙŬ100mË(=0.1Ë)¢šŨƩ digitalWrite(led,LOW); →13ƖƦƇŬ0VŖŇŨƩ�
setup()�
loop()�
�éLEDŬµ²ŃʼnőŠşŅŤĶ
¡Ř�éLEDŬµ²ŃʼnőŠşŅŤĶƩGŗťĶŖ�ÜŅşŇƩ�
�ÀĒĵæĺƗŰƉŽ(ŴſƦƈ)ŖŕŧşŇŗŒƨ�ÀæŗĒĵÐxŬGNDŖƨŊŗ�ŗæŬ11ƨ12ƨ13Ŗ�ÜŅşŇƩ�
�éLEDŬµ²ŃʼnőŠşŅŤĶ
¡Ř�éLEDŬµ²ŃʼnőŠşŅŤĶƩGŗťĶŖ�ÜŅşŇƩ�
�ÀĒĵæĺƗŰƉŽ(ŴſƦƈ)ŖŕŧşŇŗŒƨ�ÀæŗĒĵÐxŬGNDŖƨŊŗ�ŗæŬ11ƨ12ƨ13Ŗ�ÜŅşŇƩ�
ƒƣŶƟƙŬ�ĵőŠşŅŤĶ
ArduinoŗƒƣŶƟƙŬ%2ŅşŇƩ�#ŞŔŗĞéLEDŬµ²ŇŨŗƒƣŶƟƙĺ�ŏ*ĴŨŁœŖŕŧşŇƩ int led =13;İ→ledŘ13œ?ņœĵĶtAƩ pinMode(led,OUTPUT);İ →13ƖƦƇŬ)2ƖƦƇŖöWƩ digitalWrite(led,HIGH); →13ƖƦƇŖ5VŬ)2Ʃ delay(1000);İ →ƒƣŶƟƙŬ1000mË(=1Ë)¢šŨƩ digitalWrite(led,LOW); →13ƖƦƇŬ0VŖŇŨƩ�
ƒƣŶƟƙŬO�ŅőŠşŅŤĶ
#ŞŔŗĞéLEDŬµ²ŃʼnŌ�ŗƒƣŶƟƙŬO�ŅŌŗœ?�Ŗƨdelay(1000)ŗ� ŬO�ŅőŠşŅŤĶƩ �
ġŬĩŦŅőŠşŅŤĶ
HĝƑźƦŗæŗÇĵ�Ŭ13ŖƨĒĵ�ŬGNDŖ�ÜŅşŇƩ�
¡ŘġŬŕŦŅőŠşŅŤĶƩHĝƑźƦŬ��ŗťĶŖ�ÜŅşŇƩ�
HĝƑźƦ�
ArduinoŗƒƣŶƟƙŬ%2ŅşŇƩ� delayMicroseconds(500);İ →ƒƣŶƟƙŬ500µË(=5×10-6Ëƨŏşŧ0.0005Ë)¢šŨƩ �
ƒƣŶƟƙŬĹĻşŅŤĶ
ArduinoŗƒƣŶƟƙŬ%2ŅşŇƩ�Q�Tƨ^�TŖªtŅőƨ%2ŅőŠőĽōŃĵƩ�toneœdelayŗC�ŗàŧĈŅŕŗŒƨŸƏƦœþŧ�ĿŒ%2ŇŨœ�ŒŇƩ��%2ĺÚūŎŌŦƨ�÷ƕƀƤŬ}ŅőŸƤƎŰơŅşŇƩ�IJŸƤƎŰơÚ�ijœëÉŃũũřOKŒŇƩ��¡ŖArudinoŖŁŗƒƣŶƟƙŬąĊŅşŇƩ;Å8ƕƀƤŬ}ŅőĽōŃĵƩ��
ġęŬŕŦŅőŠşŅŤĶ
toneŗ~jŖĴŨ� ĺġęŖŕŧşŇƩ262Řƈƨ294ŘƢƨ330ŘƘƥƥƥŖŕŧşŇƩ� durationŘġŗĒŃŖŕŧƨƒƣŶƟƙŗ�À�,Œ500œĵĶ� ŖöWŃũőĵşŇƩŁũŒ0.5Ëĕġĺ)şŇƩ��ŒŘIJĻŦĻŦ�ijŗ�,ŬƒƣŶƟƙŒ�ŎőŠşŅŤĶƩġęŘ �ƈƈſſƟƟſİƐŮƐŮƘƘƢƢƈ��ŒŇƩ�
toneĖ�ŗ�ĵ�
void loop(){ tone(pin,262,duration); delay(duration); tone(pin,262,duration); delay(duration); tone(pin,392,duration); delay(duration); tone(pin,392,duration); delay(duration); tone(pin,440,duration); delay(duration); tone(pin,440,duration); delay(duration); tone(pin,392,duration); delay(duration); delay(500); �
tone(pin,349,duration); delay(duration); tone(pin,349,duration); delay(duration); tone(pin,330,duration); delay(duration); tone(pin,330,duration); delay(duration); tone(pin,294,duration); delay(duration); tone(pin,294,duration); delay(duration); tone(pin,262,duration); delay(duration); delay(1000); }�
int pin = 13; int duration = 500; void setup(){ pinMode(pin,OUTPUT }
ĻŦĻŦ�ŗƒƣŶƟƙ üģƐųơƁŖƒƣŶƟŬáĵőşŇŗŒƨŸƏƦŅő�ŎőĵŌōĵő�ĵşʼnŭƩ�
ĞéLEDŒƔƀơ´ŬŏĽŧşŅŤĶ
�ÀRšŖ�ŎŌĞéLEDŗµ²FăŬŢĶ�h�ŧşŇƩ�
LEDŘæŗĒĵ�ĺƒƟŽ(ůƌƦƈ)ƨÇĵ�ĺƗŰƉŽ(ŴſƦƈ)ŖŕŧşŇƩæŗĒĵ�Ŭ13ÀŖƨÇĵ�ŬGNDŖ�ÜŅşŇƩ�
ĞéLEDŒƔƀơ´ŬŏĽŧşŅŤĶ
¡ŖƒƣŶƟƙŬ%2ŅşŇƩ for(i=0;i<255;i++){ ƥƥƥ } →iĺ0ĹŦRşŎőƨ{ƥƥƥ}ŬXêŅőƨÚūŎŌŦiŖ1ŬĂŅőƨ{ƥƥƥƻŬXêŇŨœĵĶ4�Ŭƨiĺ255ŖŕŨşŒàŧĈŅşŇƩ analogWrite(ledpin,i) →iŗ ŖťŎőƨ13ƏƤŖ)2ŇŨĝHĺO5ŇŨƩ iĺ0ŗ�Ř0Vƨiĺ255ŗ�Ř5VŬ)2ŅşŇƩiĺ1NķŨłœŖÕ0.02VĝHĺQĻĽŕŧşŇƩ�
ƀŵƇŽŰƃƂŬ�ŎŌ%2ŗ�©
ŽŰƃƂŬ�ŎŌ%2ŗ�©ŖŏĵőÈøŇŨŌšƨ��ŗFăŬ�ŧşŇƩ�
¡ŖƒƣŶƟƙŬ%2ŅşŇƩ digitalRead(button) →button=7ŕŗŒƨ7ƏƤŖ%ŎőĽŨĝHŬ�ÆŅőƨĝHĺ�őĵũřIJHIGHijƨ�őĵŕĿũřIJLOWijœĵĶ ŬĈŅşŇƩ if(val == HIGH){ ƥƥƥ } else{ ƥƥƥ } →valŗ ĺHIGHœÏŅĿũřƨŇľlŗ{ƥƥƥ}ŗ�ŬƨÏŅĽŕĿũřelseŗ{ƥƥƥ}ŗ�ŬXêŅşŇƩ�
ƀŵƇŽŰƃƂŬ�ŎŌ%2ŗ�©
ƀŵƇŽŰƃƂŬ�ŎŌ%2ŗ�©
ŽŰƃƂĺ}ŃũőĵŨĹƨŊĶŒŕĵĹŬƨarduinoŖ�ÆŃʼnŨ�ÛŠŬú�ŅşŇƩ�
+5V�
0V�
?V�
Å8ŒÉŅŌLxŗĝHŘ ŽŰƃƂŬ}Ņőĵŕĵ�→İ0V ŽŰƃƂŬ}ŅŌ�→İ5V ŁŗĝHŬ7ƏƤŒûŠ9ŎőƨƕƀƤĺ}ŃũőĵŨĹƨŊĶŒŕĵĹŬð*ĿőĵşŇƩ
ŒŘƨƕƀƤŬ}Ņőĵŕĵ�ŘƨLEDĺµ´ŅőĵőƨƕƀƤŬ}ŇœLED嬴ŇŨťĶŖƨƒƣŶƟƙŬO�ŅőŠşŅŤĶƩ�
ƀŵƇŽŰƃƂŬ�ŎŌ%2ŗ�©
CdsžơŬ�ŎŌžƤŹƦŗ�ĵ�
CdsžơŬ�ŎŌžƤŹƦŗ�ĵ�ŖŏĵőÈøŇŨŌšƨ��ŗFăŬ�ŧşŇƩ�
CdsžơŬ�ŎŌžƤŹƦŗ�ĵ�
¡ŖƒƣŶƟƙŬ�vŅşŇƩ analogRead(0) →ůƉƣŶ%2ŗ0ƏƤŖ%ŎőĽŨĝHŬûŠ9ŧƨ0Vŗ�Ř0ƨ5Vŗ�Ř1023œĵĶ ŬĈŅşŇƩ ĝHŬûŠ9ŨÔhŘ0.004887585 V/ŠŒŇƩ
0V�
5V�
0�
1023�
1024/Š�
5÷1024=0.004887585�
�Ʊ ĺ512ŗœĻ 512×0.004887585 =2.50244352 V�
7žŶLEDŗµ´
į�ƫ�į�2 į�3
4 ĭ�
5 ĭ�
6 ĭ�
7 ĭ�
| į�
GND�
7žŶLEDœArduinoŬ��ŗČŧŖđßŅşŇƩ�
7žŶLEDŗµ´
į�ƫ�į�2 į�3
4 ĭ�
5 ĭ�
6 ĭ�
7 ĭ�
| į�
GND�
7žŶLEDŬ�Ŏő�TŬëÉŃʼnŨŌšŖŘƨŔŁŬµ´ŃʼnũřèĵĹäķşŅŤĶ 0ŗL>→a,b,d,f,g,i ¡Ŗa,b,d,f,g,iŬµ´ƨƶŬ¬´ŇŨŌšŗƒƣŶƟƙŬ�ĵőŠşŅŤĶƩ
7žŶLEDŗµ´
į�ƫ�į�2 į�3
4 ĭ�
5 ĭ�
6 ĭ�
7 ĭ�
| į�
GND�
?�ŖŅő1�9şŒŗ�TŬĢŖëÉŇŨƒƣŶƟƙŬ�ŎőŠşŅŤĶƩ Ŋũŋũŗ�TŬëÉŇŨƒƣŶƟƙŗĕŖdelay()Ŭ%ũŨŁœŒƨëÉŇŨčhŬOķŨŁœĺŒĻşŇƩ
�lŘ7žŶLEDŬ�ŎőŴűƤƀŬ�ŎőŠşŅŤĶ
}ŅƕƀƤŬ}ŇŁœŒƨ�TĺŴűƤƇŃũőĵĽFăŖO�ŅşŇƩ�}ŅƕƀƤŬ11œ13ŗxƨ|zŬ13œ16ŗxŖbŅćŠƨŽŰƃƂŗ11œ5Vƨ13œ8ƨ16œGndŬđßŬŅşŇƩ�
Gnd 5V
8
ĸÁũ�ŒŅŌ
¡FŘƨhžƤƀƦœ7žŶLEDŬ�ŎŌƆżƀơhôŬŏĽ
ŧşŇƩ
Ēĵ�ĕƨĸÁũ�ŒŅŌƩ
��ŘŔĶŢĴŧĺœĶłńĵşŅŌƩ
ĸ¤ŬŏĿőĸdŧĽōŃĵƩ
ArduinoŖťŨƗŰŸƤ%ēýi(2ĎÃ)�fv25ghĪ¶�ĨÏ\ēU�ĪÊ��ýi�
�
1. arduinoŗ�ĵ�œöWŗÓ7ŕnã
2. 7žŶLEDŗµ´ŗnãœƁŰƉƘƃŵµ´
3. 2�ŗ7žŶLEDŖťŨƁŰƉƘƃŵµ´
4. hžƤŹƦŖťŨhô®Făŗ�vœƒƣŶƟƙ
5. hžƤŹƦœ7žŶLEDŖťŨƆżƀơhôŗ�v
��(2ĎÃ)ŗ'ZŖŏĵő�
�ĎŘƨŕŨŝĽFăţƒƣŶƟƙŬłçĄŒäķőĵŌōĵőƨ�vŅőĵĽťĶŕkŒX�ŅőĵĻŌĵœrĵşŇƩ�
ƳƹƴƺƵƷƸŬƎſŸƤŒ�½ŇŨŌšŗöWŗnã(1)
USBŷƦƑơ�
USBŷƦƑơŗ^ŃŕŸƋŵƀŗ�ŬArduinoŗŸƋŵƀŖbŅ抺ŇƩŢĶ��ŗQĻĵ�ŗŸƋŵƀŬƎſŸƤŗ0ĠŖĴŨUSBŸƋŵƀŖbŅ抺ŇƩ�
ŊŗlƆƍŰŽƈƟŰƍŗûŠćŠŬŅşŇƩŸƤƏƝƦƀ→Òº→ƆƍŰŽƗƋƦżƜƦŬā4ŅƨleonardoŗƈƟŰƍŬƨarduino IDE(Ĕ»M)ŗƐųơƁŖĴŨdriversƐųơƁŬ�WŅőûŠćşʼnşŇƩ�
¡ŖĔ»MŗöWŬŅşŇƩWindowsŗŽƀƦƇƚƊƝƦĮŇŝőŗƒƣŶƟƙĹŦArduinoŬď{Ņőā4ŅşŇƩ�
ā4ŅŌŦƚƊƝƦŗIJƄƦơijĹŦIJƗŰŸƤƕƦƈijœIJŻƠůơƖƦƇijŗöWŬO�ŅşŇƩ�
ƳƹƴƺƵƷƸŬƎſŸƤŒ�½ŇŨŌšŗöWŗnã(2)
)2œ%2ŗnãŬŅőŠşŅŤĶ
ĞéLEDœƀŵƇŽŰƃƂŬ�ŎőƨƕƀƤŬ}ŅŌ�ōĿ¬ķŨFăŬ�ŎőŠşŅŤĶƩ FăGŘ��ŗČŧœŕŧşŇƩ�
LEDŘ�sĺĴŎőƨæŗĒĵ�ĺƒƟŽ(ůƌƦƈ)ƨÇĵ�ĺƗŰƉŽ(ŴſƦƈ)ŖŕŨŁœŖªtŅőĽōŃĵƩ FăĺŒĻŌŦƒƣŶƟƙŬ�ĵőŠşŅŤĶƩ�
7žŶLEDŗµ´ŗnã(1)
İ 7žŶLEDŬµ´ŃʼnŨFăŬÛŭŒŠşŅŤĶƩ İ ŌōŅLEDŗ=ƏƤŘƨ��ŗGŗÀ<ŗArduinoŗƆżƀơ%)2ƖƦƇŖđßŅőĽōŃĵƩ İ İ ĝ«.Ę½ŗ|zŬ�ÜŇŨŁœŬpũŕĵŒĽōŃĵƩ�
į�0 į�1 į�2
4 ĭ�
5 ĭ�
6 ĭ�
7 ĭ�
| į�
GND�
į�3
7žŶLEDŗµ´ŗnã(3)
İðŐŦĵŒŇĺƨ;GŗťĶŕđßŖŕŧşŇƩ İ ¡Ŗƨ0ĹŦ9şŒĢŖ�TŬëÉŇŨƒƣŶƟƙŬ�vŅőŠşŅŤĶƩ
7žŶLEDŗµ´ŗnã(3)
int a = 0; int b = 1; int d = 2; int e = 3; int f = 4; int g = 5; int i = 6; int j = 7;
void setup(){ pinMode(a,OUTPUT); pinMode(b,OUTPUT); pinMode(d,OUTPUT); pinMode(e,OUTPUT); pinMode(f,OUTPUT); pinMode(g,OUTPUT); pinMode(i,OUTPUT); pinMode(j,OUTPUT); }
void loop(){ digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(d,HIGH); digitalWrite(e,LOW); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(i,HIGH); digitalWrite(j,LOW); delay(300); İ�lÜĽ�
seg_1.ino�
7žŶLEDŗµ´FăŗO�
İ ¡ŖFăŬ_ŅO�ŅőŠşŅŤĶƩ GNDŖ�ÜŅőĵŌLEDŗCƏƤŬƨArduinoŗƆżƀơIOƖƦƇŗ8ÀŖ�ÜŅőĽōŃĵƩ�
į�0 į�1 į�2
4 ĭ�
5 ĭ�
6 ĭ�
7 ĭ�
| į�8�
į�3
İ O�ŅŌFăŒƨ?ņťĶŖ0ĹŦ9şŒĢŖ�TŬëÉŇŨťĶŖƨƒƣŶƟƙŬ�£ŅőŠşŅŤĶƩ İ LEDĕŖĝHŗbĺ¼ņũřƨĝ«ĺ«ũőLEDĺ$ŧşŇƩ ŁŗäķĹŦƨƆżƀơ IOƖ Ʀ Ƈ ŗ 8 À ŗ ) 2 ŬIJLOWijŖöWŇŨœèĵŖŕŧşŇƩ
į�0 į�1 į�2
4 ĭ�
5 ĭ�
6 ĭ�
7 ĭ�
| į�8�
į�3
7žŶLEDŗµ´FăŗO�
int a = 0; int b = 1; int d = 2; int e = 3; int f = 4; int g = 5; int i = 6; int j = 7; int c = 8; �
void loop(){ digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(d,HIGH); digitalWrite(e,LOW); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(i,HIGH); digitalWrite(j,LOW); digitalWrite(c,LOW); delay(300); �lÜĽƥƥƥ
void setup(){ pinMode(a,OUTPUT); pinMode(b,OUTPUT); pinMode(d,OUTPUT); pinMode(e,OUTPUT); pinMode(f,OUTPUT); pinMode(g,OUTPUT); pinMode(i,OUTPUT); pinMode(j,OUTPUT); pinMode(c,OUTPUT); }
7žŶLEDŗµ´FăŗO�(ƒƣŶƟƙŗ�£) _7segLED_2_pre.ino�
void loop(){ digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(d,HIGH); digitalWrite(e,LOW); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(i,HIGH); digitalWrite(j,LOW); digitalWrite(c,LOW);
7žŶLEDŗµ´FăŗO�(ƒƣŶƟƙŗĖ�5) _7segLED_3_pre.ino�
void loop(){ zero(); } void zero(){ digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(d,HIGH); digitalWrite(e,LOW); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(i,HIGH); digitalWrite(j,LOW); digitalWrite(c,LOW); }�
IJ0ijŬëÉŃʼnŨC�ŗĐ*Ŭƨzero()œĵĶĖ�œŅőWâŅƨ�½ŇŨL>ŘŊŗzero()ŬBŚ)ŅşŇƩ
7žŶLEDŗ2�5(1)
7žŶLEDŬNţŇŌšŗFăŖŏĵőäķőŠşŇƩ 7žŶLEDŬƈƃƇŢ@šőŇŝőžŶƚƤƇŬ.mŇŨL>ƨ8�ŗůƌƦƈŬ�ÜŇŨoïĺĴŧşŇƩ
7žŶLEDİ1�İ→8� 7žŶLEDİ2�İ→16� 7žŶLEDİ3�İ→24�
Ƽ Ƽ Ƽ
7žŶLEDŬNţŇœƨArduinoŗƏƤĺĂŧŕĽŕŧşŇƩ
7žŶLEDŗ2�5(2)
7žŶLEDŬNţŇŌšŗFăŖŏĵőäķőŠşŇƩ 7žŶLEDŬƈƃƇŢ@šőŇŝőžŶƚƤƇŬ.mŇŨL>ƨ8�ŗůƌƦƈŬ�ÜŇŨoïĺĴŧşŇƩ
7žŶLEDİ1�İ→8� 7žŶLEDİ2�İ→16� 7žŶLEDİ3�İ→24�
Ƽ Ƽ Ƽ
7žŶLEDŬNţŇœƨArduinoŗƏƤĺĂŧŕĽŕŧşŇƩ
7žŶLEDŗ2�5(3)
ŊŁŒƨğeŖÇĵ�ĕŒ.mŇŨLEDŗ+ŧ�ķőƨĴŌĹŢî�ŗLEDĺ?�ŖëÉŃũőĵŨťĶŖðʼnŨœĵĶy©Ŭ�ĵşŇƩ
ƁŰƉƘƃŵ.m(µ´)
�FŗFăŒŁũŬX¹ŇŨŖŘŔĶŅŌŦťĵŒŅŤĶĹƲ ŴſƦƈĺ�ÜŃũŌƖƦƇŒƨĨčŖHIGHœLOWŬ+ŧ�ķőƨ2ŏŗLEDŬëÉŃʼnŨŁœŖŅşŇƩ
7žŶLEDŗ2�5(4)
ŒŘXěŖLEDŬNţŅőƨƁŰƉƘƃŵ.mŖťŧƨ�ŏŗLEDŬëÉŃʼnŨFăŬ�ŎőŠşŅŤĶƩ
į�0 į�1 į�2
4 ĭ�
5 ĭ�
6 ĭ�
7 ĭ�
| į�8�
į�3
į�0 į�1 į�2
4 ĭ�
5 ĭ�
6 ĭ�
7 ĭ�
| į�9�
į�3
digitalWrite(8,LOW); digitalWrite(9,HIGH); ŗ�ƨa!ŗLEDĺµ´ digitalWrite(8,HIGH); digitalWrite(9,LOW); ŗ�ƨ;!ŗLEDĺµ´
ĨčŖ+ŧ�ķőƨàŧĈŇƩ
į�0 į�1 į�2
4 ĭ�
5 ĭ�
6 ĭ�
7 ĭ�
| į�8�
į�3
į�0 į�1 į�2
4 ĭ�
5 ĭ�
6 ĭ�
7 ĭ�
| į�9�
į�3
7žŶLEDŗ2�5(5)
ŒŘXěŖLEDŬNţŅőƨƁŰƉƘƃŵ.mŖťŧƨ�ŏŗLEDŬëÉŃʼnŨFăŬ�ŎőŠşŅŤĶƩ�GŗťĶŖLEDœ|zŬđáŅőĹŦƨ�Ŏő�ŃĵƩ
7žŶLEDŗ2�5ŗƒƣŶƟƘƤŶ(1)
int a = 0; int b = 1; int d = 2; int e = 3; int f = 4; int g = 5; int i = 6; int j = 7; int c_left = 8; int c_right = 9; int duration =100;�
¡Ŗa;ŗLEDŖ0Ŭ �ŖëÉŃʼnŨƒƣŶƟƙŬŏĽŎőŠşŅŤĶƩ
void setup(){ pinMode(a,OUTPUT); pinMode(b,OUTPUT); pinMode(d,OUTPUT); pinMode(e,OUTPUT); pinMode(f,OUTPUT); pinMode(g,OUTPUT); pinMode(i,OUTPUT); pinMode(j,OUTPUT); pinMode(c_left,OUTPUT); pinMode(c_right,OUTPUT); }�
void loop(){ zero_left(); delay(duration); zero_right(); delay(duration); } void zero_left(){ digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(d,HIGH); ��ÜĽƥƥƥ
_7segLED_5.ino�
7žŶLEDŗ2�5ŗƒƣŶƟƘƤŶ(2)
int a = 0; int b = 1; int d = 2; int e = 3; int f = 4; int g = 5; int i = 6; int j = 7; int c_left = 8; int c_right = 9; int duration =5; int k = 0;�
void setup(){ pinMode(a,OUTPUT); pinMode(b,OUTPUT); pinMode(d,OUTPUT); pinMode(e,OUTPUT); pinMode(f,OUTPUT); pinMode(g,OUTPUT); pinMode(i,OUTPUT); pinMode(j,OUTPUT); pinMode(c_left,OUTPUT); pinMode(c_right,OUTPUT); }�
void loop(){ for(k=1;k<100;k++){ zero_left(); delay(duration); one_right(); delay(duration); } for(k=1;k<100;k++){ one_left(); delay(duration); two_right(); delay(duration); } ��ÜĽƥƥƥ
¡Ŗ01→12→23→ƥƥƥœëÉŇŨƒƣŶƟƙŬŏĽŎőŠşŅŤĶƩ _7segLED_6.ino�
hžƤŹƦŬŏĹŎőŠşŅŤĶ
hžƤŹƦŬ�ŎőhŬ®WŇŨFăŬ�ŎőŠşŅŤĶƩ�
Pñ�
ƏƤůŹŰƤ�
+VsŖ4-20VŬ3ķŨœƨVoutĹŦ1ĬŖŏĻ10mVĺ)2ŃũŨƩ�
hžƤŹƦŬŏĹŎőŠşŅŤĶ(2)
hžƤŹƦĹŦ)2ŃũŨĝHŬ®WŇŨŌšŗFăŬ�ŎőŠşŅŤĶƩ�
Fă�
ƏƤůŹŰƤ�
hžƤŹƦŬŏĹŎőŠşŅŤĶ(3)
hžƤŹƦĹŦ)2ŃũŨĝHŬŻƠůơƛƊƀƦŒëÉŇŨƒƣŶƟƙŬ�ŎőŠşŅŤĶƩ�
ŻƠůơƛƊƀƦŗ�ĵ� void setup()ŗ{ }'Ŗ Serial.begin(9600); œõĉŅƨ void loop()ŗ{ }'Ŗ Serial.println(O�); œõĉŅşŇƩ
float val = 0; void setup(){ Serial.begin(9600); } void loop(){ val = analogRead(0); Serial.println(val); delay(500); }
10mV=0.01V/Šŗ ĺ%ŨŗŒƨint→floatŒO�ŬWâŅşŇƩ�
ƒƣŶƟƙ��
hžƤŹƦŬŏĹŎőŠşŅŤĶ(4)
hžƤŹƦĹŦ)2ŃũŨĝHŬhŖO�ŅőƨŻƠůơƛƊƀƦŒhŬëÉŇŨƒƣŶƟƙŬ�ŎőŠşŅŤĶƩ�
analogRead(0) →ůƉƣŶ%2ŗ0ƏƤŖ%ŎőĽŨĝHŬûŠ9ŧƨ0Vŗ�Ř0ƨ5Vŗ�Ř1023œĵĶ ŬĈŅşŇƩ ĝHŬûŠ9ŨÔhŘ0.004887585 V/ŠŒŇƩ
0V�
5V�
0�
1023�
1024/Š�
5÷1024=0.004887585�
�Ʊ ĺ512ŗœĻ 512×0.004887585 =2.50244352 V�
�FŗhžƤŹƦŒŘƨ0ĬŒ0Vĺ) 2 Ń ũ ƨ 1 Ĭ N ķ Ũ ł œ Ŗ10mV(=0.01V))2ĺN3ŅşŇƩ �ķř20ĬŗL>ƨ)2ĝHVoutŘ Vout = 0.01×20İ= 0.2 [V] ĺ)2ŃũşŇƩ ŁŗĖ�œanalogRead()ŒûŠ9Ũ ĹŦƨhŬÑ)ŅőƨŻƠůơƛƊƀƦŒëÉŃʼnŨťĶŖƨƒƣŶƟƙŬO�ŅşŇƩ
hžƤŹƦŬŏĹŎőŠşŅŤĶ(5)
hžƤŹƦĹŦ)2ŃũŨĝHŬhŖO�ŅőƨŻƠůơƛƊƀƦŒhŬëÉŇŨƒƣŶƟƙŬ�ŎőŠşŅŤĶƩ�
hŬ%ũŨO�ŬtempœWâŇŨœ tempİ= (5/1024)*val / 0.01 ŏşŧ tempİ= (5/1024)*val * 100 œŕŧşŇƩ ŁŗtempŬŻƠůơƛƊƀƦŒëÉŃʼnŨťĶŖƨƒƣŶƟƙŬO�ŅşŇƩ
float val = 0; float temp = 0; void setup(){ Serial.begin(9600); } void loop(){ val = analogRead(0); temp = (5*val) / 1024 * 100; Serial.println(temp); delay(500); }
hŗƆżƀơëÉŗ0±"(1)
hžƤŹƦŬ�ŎőÑ)ŅŌhŗO�tempŗ Ŭ7žŶLEDŒëÉŇŨŌšŗ±"ŬŅşŇƩ�
hžƤŹƦŬ�ŎőÑ)ŅŌhŗO�tempŗ Ŭƨ2ŏŗ7žŶLEDŒëÉŇŨŌšŖŘƨhŗ Ŭ10ŗ�œ1ŗ�Ŗ*ĿőƨŊũŋũŬëÉŇŨoïĺĴŧşŇƩ tempŗ (�ķř25)Ŭ10ŗ�ŗ (25ŗL>Ř2)œƨ1ŗ�ŗ (25ŗL>Ř5)Ŗ*ĿőƨŊũŋũ-ŗO�ƨtemp_10œtemp_1Ŗ%ũŨŌšŖŘŔĶŇũřťĵŒŅŤĶĹƩ
hŗƆżƀơëÉŗ0±"(2)
hžƤŹƦŬ�ŎőÑ)ŅŌhŗO�tempŗ Ŭ7žŶLEDŒëÉŇŨŌšŗ±"ŬŅşŇƩ�
10ŗ�ŗ Ŭ¥šŨŖŘƨtempŬ10Œ1ŧƨ1ŗ�ŗ Ŭ¥šŨŖŘƨtempŬ10Œ1ŎŌ Ŭ¥šőƨŊũŋũtemp_10œtemp_1Ŗ%ũşŇƩ ŌōŅtempŘfloatJŕŗŒƨ��ŗôÑŘŒĻşʼnŭƩŊŁŒ-ŗ��JŗO�temp_intŬ½tŅőƨ temp_int = int(temp) œŅƨ��JŗO�temp_iŬ�ŎőôÑŅşŇƩ 1ŧÑŗ³ÑSŘİ IJ/ij(ŽƟƃŻƝ)ƨ�ŧŬ¥šŨ³ÑSŘIJ%ij(ƎƦžƤƇ)Ŭ�ĵşŇƩ #ŞŔŗƒƣŶƟƙŬO�ŅőƨŻƠůơƛƊƀƦŒƨ tempƨ temp_10ƨtemp_1ŬëÉŃʼnőŠşŅŤĶ�
hžƤŹƦŬ�ŎőÑ)ŅŌhŗO�tempŗ Ŭ7žŶLEDŒëÉŇŨŌšŗ±"ŬŅşŇƩ�
float val = 0; float temp = 0; int temp_10; int temp_1; int temp_int; void setup(){ Serial.begin(9600); }
void loop(){ val = analogRead(0); temp = (5*val) / 1024 * 100; temp_int = (int)(temp); temp_10 = temp_int / 10; temp_1 = temp_int % 10; Serial.println(temp); Serial.println(temp_10); Serial.println(temp_1); delay(500); }�
hŗƆżƀơëÉŗ0±"(3)
hžƤŹƦŬ�ŎőÑ)ŅŌhŗ Ŭƨ2ŏŗ7žŶLEDŒëÉŇŨƆżƀơhôŬ�vŅőŠşŅŤĶƩ • hžƤŹƦĹŦŗhŗ Ŭ10ŗ�œ1ŗ�ŗ Ŗ*òŅőŻƠůơƛƊƀƦŒëÉŃʼnŨƒƣŶƟƙ
• �ŏŗ7žŶLEDŬƨƁŰƉƘƃŵ.mŖťŧƨ-ıŗ ŒëÉŃʼnŨƒƣŶƟƙ
ŬÛŠ>ūʼnũřVvŒŇƩ
Ɔżƀơhôŗ�v(1)
Ɔżƀơhôŗ�v(2)
void loop(){ val = analogRead(0); temp = (5*val) / 1024 * 100; temp_int = int(temp); temp_10 = temp_int / 10; temp_1 = temp_int % 10; Serial.println(temp); Serial.println(temp_10); Serial.println(temp_1);
for(k=0;k<100;k++){ if(temp_10==0){ zero_left(); } if(temp_10==1){ one_left(); } �lŏŐĽƥƥƥ�
ƒƣŶƟƙŗ�(W�ƨO�ŗWâœvoid setup()ŗÐxŘÄ¿)
VvŃũŌ�Řƨ hëÉĺśũŕĵťĶŖƨ�FŗhŗfIŬÑ)ŅőƨëÉŇŨťĶŖƒƣŶƟƙŬ�£ŅőŠşŅŤĶƩ 7žŶLEDŬŢĶ�ŏNţŅőƨ3�ŗƆżƀơhôŬ�vŅőŠşŅŤĶƩ
Ɔżƀơhôŗ�v(Â`)
ĸÁũ�ŒŅŌ
¡Fŗ�ÚFŘƨ¯§#¼ĺýcŖŕŧşŇƩ
Ēĵ�ĕƨĸÁũ�ŒŅŌƩ��ŘŔĶŢĴŧĺœĶłńĵşŅŌƩ
�ĎŢťŪŅĽĸĤĵĵŌŅşŇƩ
ĸ¤ŬŏĿőĸdŧĽōŃĵƩ
平成25年度 熊本高等専門学校 社会人講座
Arduinoによるマイコン入門講座(3週目)
1.ドットマトリクスLEDの使い方2.文字や記号の表示方法
3.文字のスクロール方法
4.外部入力による点灯位置の制御
Arduino日本語リファレンスhttp://www.musashinodenpa.com/arduino/ref/
ドットマトリクスLEDを用いたミニ電光掲示板
1
赤色ドットマトリクスLED(アノードコモン)
LED:8×8 = 64個 端子は8+8=16本
ピン番号①②③④⑤⑥⑦⑧※文字面を手前にみる
ピン番号⑯⑮⑭⑬⑫⑪⑩⑨
1.ドットマトリクスLEDの使い方
2
赤色ドットマトリクスLED(アノードコモン)
LED:8×8 = 64個 端子は8+8=16本
行(row)
列(col)
1.ドットマトリクスLEDの使い方
点灯方法点灯させたいLEDの行をHIGH(5V),列をLOW(0V)にする.
3
配線 「列」の配線には,途中に100Ωの抵抗を接続する.
1.ドットマトリクスLEDの使い方
デジタル入出力ピンの0番と1番はシリアル通信などで使うため(プログラムをアップロードするときにも干渉することがあるため),できれば接続しない方がよい. 4
配線LED
ピン番号行/列番号
Arduinoピン番号
9 行1 2
10 列4 3
11 列6 4
12 行4 5
13 列1 6
14 行2 7
15 列7 8
16 列8 9
1.ドットマトリクスLEDの使い方
ANALOG IN A0 A1 A2 A3 A4 A5
UNO 14 15 16 17 18 19Leonald 18 19 20 21 22 23
注意:アナログ入力端子(A0~A5)をデジタル入出力として使う場合のピン番号
LEDピン番号
行/列番号
Arduinoピン番号
1 行5 13
2 行7 12
3 列2 11
4 列3 10
5 行8 20(A2)6 列5 21(A3)7 行6 22(A4)8 行3 23(A5)
5
どれか1つを点灯させる
1.ドットマトリクスLEDの使い方
const int row[8] = { 2,7,23,5,13,22,12,20 }; //行のArduinoのピン番号
const int col[8] = { 6,11,10,3,21,4,8,9 }; //列のArduinoのピン番号void setup(){for(int i=0; i < 8; i++){ // 8回繰り返し
pinMode(col[i], OUTPUT); // 行の端子を「出力」に設定
pinMode(row[i], OUTPUT); // 列の端子を「出力」に設定digitalWrite(col[i],HIGH); // 列にHIGHを出力してLEDを消灯
}} ※この部分はこの後共通して使います
LED_MAT_1
6
どれか1つを点灯させる
1.ドットマトリクスLEDの使い方
void loop(){
digitalWrite(row[0],HIGH); // ある行にHIGH(5V)を出力
digitalWrite(col[0], LOW); // ある列にLOW(0V)を出力
}
※配列の番号を変えて,任意の場所を点灯させてみよう.ただし,配列の番号(アドレス)は0から始まることに注意!
LED_MAT_1
7
順番に1個ずつ点灯させる
1.ドットマトリクスLEDの使い方
void loop(){for(int i=0; i < 8; i++){ // 8回繰り返し(行の移動)
digitalWrite(row[i],HIGH); // 行にHIGHを出力⇒点灯準備for(int j=0; j < 8; j++){ // 8回繰り返し(列の移動)
digitalWrite(col[j], LOW); // 列にLOWを出力⇒ LED点灯delay(500); // 移動の間隔 この場合は0.5秒digitalWrite(col[j],HIGH); // 列にHIGHを出力 ⇒ LED消灯
}digitalWrite(row[i],LOW); // 行にLOWを出力⇒点灯準備解除
}}
64個がすべて点灯して見えるようにdelayMicroseconds( )に替えて値を変更してみましょう.
LED_MAT_2
8
1個ずつ右にずらしながら点灯させ,すべて点灯したらその行を消灯して次の行へ移動
void loop(){for(int i=0; i < 8; i++){
digitalWrite(row[i], HIGH); // 行をHIGHにする(ONの準備)for(int k=0; k<8; k++){ // 一行すべてONになるまで繰り返し
for(int j=0; j<8-k; j++){ // ONの横移動digitalWrite(col[j], LOW); // 列をLOWにする(LED ON)delay(100); // 移動スピードdigitalWrite(col[j],HIGH); // 列をHIGHにする(LED OFF)
}digitalWrite(col[7-k],LOW); // 最後のLEDをONに保つ
} for(int j=0; j<8; j++){ // 一行すべてOFFになるまで繰り返し
digitalWrite(col[j], HIGH); // 列をHIGHにする(LED OFF)} digitalWrite(row[i],LOW); // 行のLED OFF(その行すべてOFF)
}}
LED_MAT_3
1.ドットマトリクスLEDの使い方
9
一文字の表示法
2.文字や記号の表示方法
boolean matrix[8][8]={{0,0,0,1,1,0,0,0},{0,0,1,0,0,1,0,0},{0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,0},{0,1,1,1,1,1,1,0},{0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,0}};
setup( )の前に文字データを二次元配列 matrix[行数][列数]で準備する.
//boolean型はtrue(1)かfalse(0)だけ
黒を1 ⇒白を0 ⇒
10
一文字の表示法
2.文字や記号の表示方法
void loop(){for(int i =0; i < 8; i++){ // 行の繰り返し(配列を縦にみていく)
digitalWrite(row[i],HIGH); // 行をHIGHにする(ONの準備)
for(int j = 0; j < 8; j++){ // 列の繰り返し(配列を横にみていく)if(matrix[i][j] == 1){ // もし配列の中身が1ならば次の{}を実行
digitalWrite(col[j], LOW); // LED ON(その列をLOWにする)delayMicroseconds(200); // 点灯時間
}digitalWrite(col[j],HIGH); // LED OFF(その列をHIGHにする)
}digitalWrite(row[i],LOW); // 行をLOWにする(その行すべてOFF)
}}
LED_MAT_CHARACTER1
11
任意の文字や絵の表示
2.文字や記号の表示方法
LED_MAT_CHARACTER2
黒を1⇒白を0⇒
左側に白黒で文字や絵を描き,右側に 1,0 のデータを作る.
右側の 1,0 のデータをmatrix[8][8]に書いて実行させてみましょう.
12
文字スクロール
3.文字のスクロール方法
boolean matrix[8][MAX_LEN+1]={ {1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,0},{0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},{0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},{0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},{0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},{0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},{0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0},{0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0}
};
// 8行,(8×文字数+1)列の配列を作る.// 最後の列はすべて0としておく.
空の列
#define MAX_LEN 32 //8×4=32文字文字数に合わせて変更する
LED_MAT_SCROLL
13
文字スクロール(文字表示)
3.文字のスクロール方法
void loop(){int count = 20; // 1文字の表示回数 5(早い)~50(ゆっくり)while(count>0){ // count数だけ繰り返し
for(int i=0; i<8; i++){ // 行の繰り返し(配列を縦にみていく)digitalWrite(row[i],HIGH); // 行をHIGHにする(ONの準備)for(int j = 0; j < 8; j++){ // 列の繰り返し(配列を横にみていく)
if(matrix[i][j] ==1 ){ // 配列の中身が1のときだけ次を実行digitalWrite(col[j], LOW); // LED ONdelayMicroseconds(200); // 点灯時間
}digitalWrite(col[j],HIGH); // LED OFF
}digitalWrite(row[i],LOW);
}count--; // countを1減らす}次ページへ続く
LED_MAT_SCROLL
14
文字スクロール(文字の移動)
3.文字のスクロール方法
for(int k = 0; k < 8; k++){ // 行の繰り返し
matrix[k][MAX_LEN] = matrix[k][0]; // 最後の列に1列目を移動
for(int l = 0; l < MAX_LEN; l++){ // 列の繰り返し
matrix[k][l]=matrix[k][l+1]; // 2列目以降を1つ左へずらす
}
}
}
文字データの二次元配列を1列ずらす
LED_MAT_SCROLL
15
任意の文字や絵のスクロール
3.文字のスクロール方法
16
エクセルによる二次元データ作成
3.文字のスクロール方法
(1).8×文字数+1列の枠を準備.その後データを入力する.
点灯 ⇒ 1消灯 ⇒ 0
(2).「名前を付けて保存」で「ファイルの種類」をCSV(カンマ区切り)として保存し,終了する.もし,“○○.csv”へ変更を保存しますか?が表示されたら“いいえ”を選択して終了する.
(3).保存されたCSV形式のファイルを右クリックし,「プログラムから開く」から「メモ帳」で開く.そのデータをコピーする.
(4).貼り付けた後,左側に { 最後列の後に }, (中カッコとカンマ)を入力する.(5).#define MAX_LEN ○←に列数を入力.
17
好きな文字や図案を作ってスクロールさせてみよう
3.文字のスクロール方法
(1) エクセルによる文字や図案の作成
⇒ CSV形式で保存 ⇒ メモ帳で開く
(2) データをboolean matrix[8][MAX_LEN+1]へコピーする.
(3) 配列データの左に 「 { 」,右側に「 },」を追加する.
(3) 文字数(列の数)に合わせて MAX_LEN を変更する.
(4) loop( )内の count でスクロールスピードを調整する.
18
可変抵抗の使い方
4.外部入力による点灯位置の制御
ALPS ロータリーボリューム 10kΩ 型番RK09K1130AP5
1 2 3 1
3つまみ
210kΩ
つまみの回転角度
端子1-2間の抵抗 B特性
・ポテンショメータ・電子回路
A特性オーディオ用
ブレッドボードに挿すために曲げている
回路図
19
可変抵抗器の配線
4.外部入力による点灯位置の制御
ANALOGIN
5VX行方向
Y列方向
GND
A0A1
POWER
20
スケッチの例 RowColumnScanningを使用
4.外部入力による点灯位置の制御
(1)ファイル ⇒ スケッチの例 ⇒ 07.Display ⇒RowColumnScanning を選択
(2) Arduino UNO のピン番号をLEONALD仕様に変更// 2-dimensional array of row pin numbers:const int row[8] = {2,7,19,5,13,18,12,16 } をconst int row[8] = {2,7,23,5,13,22,12,20 } に変更// 2-dimensional array of column pin numbers:const int col[8] = {6,11,10,3,17,4,8,9 } をconst int col[8] = {6,11,10,3,21,4,8,9 } に変更
21
RowColumnScanning
4.外部入力による点灯位置の制御
// 2-dimensional array of pixels:int pixels[8][8]; // ドットマトリクスLED用の
8×8の二次元配列を準備// cursor position:int x = 5; //LEDのx軸(行方向)の位置を決める変数⇒ pixelsのx番地int y = 5; //LEDのy軸(列方向)の位置を決める変数⇒ pixelsのy番地
// initialize the pixel matrix:for (int x = 0; x < 8; x++) {for (int y = 0; y < 8; y++) {pixels[x][y] = HIGH; //配列pixelsの中身をすべてHIGHに初期化
}}
void setup( )は省略
01234567
yの番地
xの番地
0 1 2 3 4 5 6 7
22
void readSensors() {// turn off the last position:pixels[x][y] = HIGH; // 配列pixelsの番地(x,y:前の番地)の中身をHIGHに設定// read the sensors for X and Y values:x = 7 - map(analogRead(A0), 0, 1023, 0, 7); //入力電圧を0~7へ変換し,
それを7から引いたものをxy = map(analogRead(A1), 0, 1023, 0, 7); //入力電圧を0~7へ変換し,それをy// set the new pixel position low so that the LED will turn on// in the next screen refresh:pixels[x][y] = LOW; // 配列pixelsの番地(x,y:現在の番地)の中身をLOWに設定
}
RowColumnScanning4.外部入力による点灯位置の制御
A0の電圧を取得 現在の範囲 新しい範囲
01234567
yの番地
xの番地
0 1 2 3 4 5 6 7
readSensors()は,可変抵抗のつまみの位置を電圧として読み込み,その値によって点灯位置の番地x,y を決め,そこがONになるように配列pixelsにLOWをセットする.
23
RowColumnScanning4.外部入力による点灯位置の制御
void refreshScreen() { //pixel[x][y]をスキャンしてLOWの位置でLEDを点灯させ,すぐに消す// iterate over the rows (anodes):for (int thisRow = 0; thisRow < 8; thisRow++) { // 行の繰り返し// take the row pin (anode) high:digitalWrite(row[thisRow], HIGH); // thisRow番目の行をHIGHにする(ONの準備)
// iterate over the cols (cathodes):for (int thisCol = 0; thisCol < 8; thisCol++) { // 列の繰り返し// get the state of the current pixel;int thisPixel = pixels[thisRow][thisCol]; // thisPixelに現在のpixels[thisRow][thisCol] の中身を代入// when the row is HIGH and the col is LOW,
// the LED where they meet turns on:digitalWrite(col[thisCol], thisPixel); // thisCol列に thisPixelの値をデジタル出力
(thisPixelが LOW のところだけ LED ON)// turn the pixel off:if (thisPixel == LOW) { // もし thisPixelの中身が LOW ならば次を実行
digitalWrite(col[thisCol], HIGH); // thisCol列に HIGH を出力(LED OFF)}
}// take the row pin low to turn off the whole row:digitalWrite(row[thisRow], LOW); // thisRow番目の行をLOWにする(OFFに戻す)
}}
点灯
消灯
24
参考文献・購入先
• Massimo Banzi著,船田巧訳:Arduinoをはじめよう第2版,㈱オライリージャパン,2000円+税
• 河連庸子,山崎文徳,神原健著:Arduinoスーパーナビゲーション,リックテレコム,3600円+税
• 建築発明工作ゼミ2008 基本から応用まで詳しく解説されています.
http://kousaku-kousaku.blogspot.jp/2008/07/arduino.html• 部品の購入先
Arduino:スイッチサイエンス http://www.switch-science.com/電子部品:秋月電子通商 http://akizukidenshi.com/catalog/
皆様お疲れさまでした.
25