2012 01 30 arduino forelesning
TRANSCRIPT
ARDUINOPROGRAMMERING
DIGITALE/ANALOGE INNDATA/UTDATALYSDIODER – FRITZING
Roger AntonsenINF1510
30. januar 2012FOR EKSPERIMENTELL INFORMATIKKFOR EKSPERIMENTELL INFORMATIKKÅPEN SONEÅPEN SONE
STUDIELABEN
Arduino Cookbook, Michael Margolis
Making Things Talk, Tom Igoe
Flere av illustrasjonene og eksemplene i denne forelesningen er tatt derfra.
En mer avansert, men veldig bra, bok!
Denne boken inneholder det meste man trenger å vite.
PROGRAMMERING I ARDUINO
• pinMode(pin, Mode) pin angir pinnen og Mode er INPUT eller OUTPUT
• pinMode(pin, Mode) pin angir pinnen og Mode er INPUT eller OUTPUT
• digitalWrite(pin, verdi) verdi er HIGH eller LOW
• pinMode(pin, Mode) pin angir pinnen og Mode er INPUT eller OUTPUT
• digitalWrite(pin, verdi) verdi er HIGH eller LOW
• digitalRead(pin) returnerer HIGH eller LOW
• pinMode(pin, Mode) pin angir pinnen og Mode er INPUT eller OUTPUT
• digitalWrite(pin, verdi) verdi er HIGH eller LOW
• digitalRead(pin) returnerer HIGH eller LOW
• analogWrite(pin, verdi) verdi er tall mellom 0 og 255
• pinMode(pin, Mode) pin angir pinnen og Mode er INPUT eller OUTPUT
• digitalWrite(pin, verdi) verdi er HIGH eller LOW
• digitalRead(pin) returnerer HIGH eller LOW
• analogWrite(pin, verdi) verdi er tall mellom 0 og 255
• analogRead(pin) returnerer et tall mellom 0 og 1023
• Variable brukes til å lagre data.
• Variable brukes til å lagre data.
• Noen viktige begreper er følgende.
• Variable brukes til å lagre data.
• Noen viktige begreper er følgende.
• deklarasjon: å sette av plass i minnetint x;boolean y;
• Variable brukes til å lagre data.
• Noen viktige begreper er følgende.
• deklarasjon: å sette av plass i minnetint x;boolean y;
• tilordning: å sette en verdix = 20;y = true;
• Variable brukes til å lagre data.
• Noen viktige begreper er følgende.
• deklarasjon: å sette av plass i minnetint x;boolean y;
• tilordning: å sette en verdix = 20;y = true;
• skop: der hvor variablene er synlige
• int: 16-bits verdi mellom -32 768 og 32 767int x = 32767;x++; // gjør at x blir -32768
• int: 16-bits verdi mellom -32 768 og 32 767int x = 32767;x++; // gjør at x blir -32768
• unsigned int: 16-bits verdi mellom 0 og 65535kun positive verdier
• int: 16-bits verdi mellom -32 768 og 32 767int x = 32767;x++; // gjør at x blir -32768
• unsigned int: 16-bits verdi mellom 0 og 65535kun positive verdier
• long: 32-bits verdi mellom -2147483648 og 2147483647
• int: 16-bits verdi mellom -32 768 og 32 767int x = 32767;x++; // gjør at x blir -32768
• unsigned int: 16-bits verdi mellom 0 og 65535kun positive verdier
• long: 32-bits verdi mellom -2147483648 og 2147483647
• usigned long: 32-bits verdi mellom 0 og 4294967295
• int: 16-bits verdi mellom -32 768 og 32 767int x = 32767;x++; // gjør at x blir -32768
• unsigned int: 16-bits verdi mellom 0 og 65535kun positive verdier
• long: 32-bits verdi mellom -2147483648 og 2147483647
• usigned long: 32-bits verdi mellom 0 og 4294967295
• float/double: 32-bits flyttallavrundede verdier; husk at dette kan medføre nøyaktigheter
• byte: 8-bits verdi mellom 0 og 255byte x = 130;byte x = B10000010; // samme resultat
• byte: 8-bits verdi mellom 0 og 255byte x = 130;byte x = B10000010; // samme resultat
• char: en byte som lagrer et tegn(egentlig bare en verdi mellom -128 og 127)char x = ‘G’;char x = 71; // samme resultat
• byte: 8-bits verdi mellom 0 og 255byte x = 130;byte x = B10000010; // samme resultat
• char: en byte som lagrer et tegn(egentlig bare en verdi mellom -128 og 127)char x = ‘G’;char x = 71; // samme resultat
• boolean: true eller false
• byte: 8-bits verdi mellom 0 og 255byte x = 130;byte x = B10000010; // samme resultat
• char: en byte som lagrer et tegn(egentlig bare en verdi mellom -128 og 127)char x = ‘G’;char x = 71; // samme resultat
• boolean: true eller false
• array: en samling av indekserte variable
• array: en samling av indekserte variabledeklarasjon (og tilordning):
• array: en samling av indekserte variabledeklarasjon (og tilordning):int mittArray[6]; // kun deklarasjon
• array: en samling av indekserte variabledeklarasjon (og tilordning):int mittArray[6]; // kun deklarasjonint mineTall[] = {3,7,1,2,8}; // automatisk
• array: en samling av indekserte variabledeklarasjon (og tilordning):int mittArray[6]; // kun deklarasjonint mineTall[] = {3,7,1,2,8}; // automatiskint mineVerdier[3] = {32,64,-8}; // både-og
• array: en samling av indekserte variabledeklarasjon (og tilordning):int mittArray[6]; // kun deklarasjonint mineTall[] = {3,7,1,2,8}; // automatiskint mineVerdier[3] = {32,64,-8}; // både-ogchar beskjed[6] = "hello"; // strenger er arrayer av tegn (char)
• array: en samling av indekserte variabledeklarasjon (og tilordning):int mittArray[6]; // kun deklarasjonint mineTall[] = {3,7,1,2,8}; // automatiskint mineVerdier[3] = {32,64,-8}; // både-ogchar beskjed[6] = "hello"; // strenger er arrayer av tegn (char) // siste tegn er et nulltegn som avslutter
• array: en samling av indekserte variabledeklarasjon (og tilordning):int mittArray[6]; // kun deklarasjonint mineTall[] = {3,7,1,2,8}; // automatiskint mineVerdier[3] = {32,64,-8}; // både-ogchar beskjed[6] = "hello"; // strenger er arrayer av tegn (char) // siste tegn er et nulltegn som avslutter
hente og sette inn verdier:
• array: en samling av indekserte variabledeklarasjon (og tilordning):int mittArray[6]; // kun deklarasjonint mineTall[] = {3,7,1,2,8}; // automatiskint mineVerdier[3] = {32,64,-8}; // både-ogchar beskjed[6] = "hello"; // strenger er arrayer av tegn (char) // siste tegn er et nulltegn som avslutter
hente og sette inn verdier:mineVerdier[0] returnerer 32.
• array: en samling av indekserte variabledeklarasjon (og tilordning):int mittArray[6]; // kun deklarasjonint mineTall[] = {3,7,1,2,8}; // automatiskint mineVerdier[3] = {32,64,-8}; // både-ogchar beskjed[6] = "hello"; // strenger er arrayer av tegn (char) // siste tegn er et nulltegn som avslutter
hente og sette inn verdier:mineVerdier[0] returnerer 32.mineVerdier[5] gir feilmelding.
• array: en samling av indekserte variabledeklarasjon (og tilordning):int mittArray[6]; // kun deklarasjonint mineTall[] = {3,7,1,2,8}; // automatiskint mineVerdier[3] = {32,64,-8}; // både-ogchar beskjed[6] = "hello"; // strenger er arrayer av tegn (char) // siste tegn er et nulltegn som avslutter
hente og sette inn verdier:mineVerdier[0] returnerer 32.mineVerdier[5] gir feilmelding.mineVerdier[0] = 100; // erstatter første tall
int multipliser(int x, int y) {
int multipliser(int x, int y) { int resultat;
int multipliser(int x, int y) { int resultat; resultat = x * y;
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
navn på funksjonen
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
navn på funksjonentype og navn på
argumentene til funksjonen
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
navn på funksjonentype og navn på
argumentene til funksjonen
deklarasjonav variabel
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
navn på funksjonentype og navn på
argumentene til funksjonen
deklarasjonav variabel
tilordning avvariabel
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
navn på funksjonentype og navn på
argumentene til funksjonen
deklarasjonav variabel
tilordning avvariabel
returverdi;må være av riktig type
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
navn på funksjonentype og navn på
argumentene til funksjonen
deklarasjonav variabel
tilordning avvariabel
returverdi;må være av riktig type
Viktig å huske på:
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
navn på funksjonentype og navn på
argumentene til funksjonen
deklarasjonav variabel
tilordning avvariabel
returverdi;må være av riktig type
Viktig å huske på:• skop
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
navn på funksjonentype og navn på
argumentene til funksjonen
deklarasjonav variabel
tilordning avvariabel
returverdi;må være av riktig type
Viktig å huske på:• skop• semikolon
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
navn på funksjonentype og navn på
argumentene til funksjonen
deklarasjonav variabel
tilordning avvariabel
returverdi;må være av riktig type
Viktig å huske på:• skop• semikolon• klammeparenteser
int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat;}
type til returverdi(eller void hvis ingen type)
navn på funksjonentype og navn på
argumentene til funksjonen
deklarasjonav variabel
tilordning avvariabel
returverdi;må være av riktig type
Viktig å huske på:• skop• semikolon• klammeparenteser• kommentarer
Aritmetikk:
Aritmetikk:int y;
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3y++; // samme som y = y + 1;
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3y++; // samme som y = y + 1;y /= 2; // samme som y = y / 2;
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3y++; // samme som y = y + 1;y /= 2; // samme som y = y / 2;
Sammenlikninger:
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3y++; // samme som y = y + 1;y /= 2; // samme som y = y / 2;
Sammenlikninger:x == y // x lik y
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3y++; // samme som y = y + 1;y /= 2; // samme som y = y / 2;
Sammenlikninger:x == y // x lik yx != y // x ulik y
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3y++; // samme som y = y + 1;y /= 2; // samme som y = y / 2;
Sammenlikninger:x == y // x lik yx != y // x ulik yx <= y // x mindre enn eller lik y
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3y++; // samme som y = y + 1;y /= 2; // samme som y = y / 2;
Sammenlikninger:x == y // x lik yx != y // x ulik yx <= y // x mindre enn eller lik y
Logiske operatorer:
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3y++; // samme som y = y + 1;y /= 2; // samme som y = y / 2;
Sammenlikninger:x == y // x lik yx != y // x ulik yx <= y // x mindre enn eller lik y
Logiske operatorer:x > 0 && x < 5 // OG - sann hvis begge er sanne
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3y++; // samme som y = y + 1;y /= 2; // samme som y = y / 2;
Sammenlikninger:x == y // x lik yx != y // x ulik yx <= y // x mindre enn eller lik y
Logiske operatorer:x > 0 && x < 5 // OG - sann hvis begge er sannex > 0 || x < 5 // ELLER - sann hvis en er sann
Aritmetikk:int y;y = 9 / 4; // y blir satt til 2y = y + 3; // øker verdien til y med 3y++; // samme som y = y + 1;y /= 2; // samme som y = y / 2;
Sammenlikninger:x == y // x lik yx != y // x ulik yx <= y // x mindre enn eller lik y
Logiske operatorer:x > 0 && x < 5 // OG - sann hvis begge er sannex > 0 || x < 5 // ELLER - sann hvis en er sann!x < 0 // IKKE - sann hvis uttrykket er usant
if (x < 100){ // gjør A}
if (x < 100){ // gjør A}
if (x < 100){ // gjør A}else{ // gjør B}
switch (x) {
switch (x) { case 1:
switch (x) { case 1: // hvis x er lik 1, gjør dette
switch (x) { case 1: // hvis x er lik 1, gjør dette break;
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2:
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette break;
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette break; default:
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette break; default: // hvis ingen matcher, gjør følgende
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette break; default: // hvis ingen matcher, gjør følgende // default er valgfritt
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette break; default: // hvis ingen matcher, gjør følgende // default er valgfritt }
switch (x) {
switch (x) { case 1:
switch (x) { case 1: // hvis x er lik 1, gjør dette
switch (x) { case 1: // hvis x er lik 1, gjør dette break;
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2:
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette break;
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette break; default:
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette break; default: // hvis ingen matcher, gjør følgende
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette break; default: // hvis ingen matcher, gjør følgende // default er valgfritt
switch (x) { case 1: // hvis x er lik 1, gjør dette break; case 2: // hvis x er lik 2, gjør dette break; default: // hvis ingen matcher, gjør følgende // default er valgfritt }
for (int x = 0; x < 100; x++) {Serial.println(x);}// skriver tallene fra 0 til 99
for (int x = 0; x < 100; x++) {Serial.println(x);}// skriver tallene fra 0 til 99
deklarere variabel
for (int x = 0; x < 100; x++) {Serial.println(x);}// skriver tallene fra 0 til 99
deklarere variabel
settstartverdi
for (int x = 0; x < 100; x++) {Serial.println(x);}// skriver tallene fra 0 til 99
deklarere variabel
settstartverdi test
for (int x = 0; x < 100; x++) {Serial.println(x);}// skriver tallene fra 0 til 99
deklarere variabel
settstartverdi test
endreverdi
for (int x = 0; x < 100; x++) {Serial.println(x);}// skriver tallene fra 0 til 99
deklarere variabel
settstartverdi test
endreverdi
kropp
DIGITALE INNDATA
• Arduinofunksjonen for å lese digital input heter digitalRead og forteller om spenningen på en pinne er HIGH (5 volt) eller LOW (0 volt).
• Arduinofunksjonen for å lese digital input heter digitalRead og forteller om spenningen på en pinne er HIGH (5 volt) eller LOW (0 volt).
• Arduinofunksjonen for å fortelle at en pinne skal brukes til dette er pinMode(pin,INPUT).
• Arduinofunksjonen for å lese digital input heter digitalRead og forteller om spenningen på en pinne er HIGH (5 volt) eller LOW (0 volt).
• Arduinofunksjonen for å fortelle at en pinne skal brukes til dette er pinMode(pin,INPUT).
• I utgangspunktet er alle konfigurert som inputpinner, men det er god praksis å sette dem allikevel.
)LJXUH������'LJLWDO�DQG�DQDORJ�SLQV�RQ�D�VWDQGDUG�$UGXLQR�ERDUG
7KLV�FKDSWHU�FRYHUV�WKH�$UGXLQR�SLQV�WKDW�FDQ�VHQVH�GLJLWDO�DQG�DQDORJ�LQSXWV��'LJLWDOLQSXW�SLQV�VHQVH�WKH�SUHVHQFH�DQG�DEVHQFH�RI�YROWDJH�RQ�D�SLQ��$QDORJ�LQSXW�SLQV�PHDV�XUH�D�UDQJH�RI�YROWDJHV�RQ�D�SLQ�
7KH�$UGXLQR�IXQFWLRQ�WR�GHWHFW�GLJLWDO�LQSXW�LV�digitalRead�DQG�LW�WHOOV�\RXU�VNHWFK�LI�DYROWDJH�RQ�D�SLQ�LV�HIGH����YROWV��RU�LOW����YROWV���7KH�$UGXLQR�IXQFWLRQ�WR�FRQILJXUH�DSLQ�IRU�UHDGLQJ�LQSXW�LV�pinMode(pin, INPUT)�
2Q�D�W\SLFDO�ERDUG��WKHUH�DUH����GLJLWDO�SLQV��QXPEHUHG���WR�����DV�VKRZQ�DW�WKH�WRS�RI)LJXUH������3LQV���DQG����PDUNHG�5;�DQG�7;��DUH�XVHG�IRU�WKH�86%�VHULDO�FRQQHFWLRQDQG�VKRXOG�EH�DYRLGHG�IRU�RWKHU�XVHV��,I�\RX�QHHG�PRUH�GLJLWDO�SLQV�RQ�D�VWDQGDUG�ERDUG�\RX�FDQ�XVH�WKH�DQDORJ�SLQV�DV�GLJLWDO�SLQV��DQDORJ�SLQV���WKURXJK���FDQ�EH�XVHG�DVGLJLWDO�SLQV����WKURXJK�����
$UGXLQR� ���� LQWURGXFHG� ORJLFDO� QDPHV� IRU�PDQ\� RI� WKH� SLQV�� 7KH� FRQVWDQWV� LQ� 7D�EOH�����FDQ�EH�XVHG�LQ�DOO�IXQFWLRQV�WKDW�H[SHFW�D�SLQ�QXPEHU�
7DEOH������3LQ�FRQVWDQWV�LQWURGXFHG�LQ�$UGXLQR����
Constant Pin Number Constant Pin Number
A0 Analog input 0 (Digital 14) LED_BUILTIN On-board LED (Digital 13)
A1 Analog input 1 (Digital 15) SDA I2C Data (Digital 18)
A2 Analog input (Digital 16) SCL I2C Clock (Digital 19)
A3 Analog input (Digital 17) SS SPI Select (Digital 10)
A4 Analog input (Digital 18) MOSI SPI Input (Digital 11)
A5 Analog input (Digital 19) MISO SPI Output (Digital 12)
SCL SPI Clock (Digital 13)
148 | Chapter 5:ಗSimple Digital and Analog Input
}}
)LJXUH������6ZLWFK�FRQQHFWHG�XVLQJ�SXOO�GRZQ�UHVLVWRU
6WDQGDUG�$UGXLQR�ERDUGV�KDYH�D�EXLOW�LQ�/('�FRQQHFWHG�WR�SLQ�����,I\RXU�ERDUG�GRHV�QRW��VHH�5HFLSH�����IRU�LQIRUPDWLRQ�RQ�FRQQHFWLQJ�DQ/('�WR�DQ�$UGXLQR�SLQ�
Discussion7KH�setup�IXQFWLRQ�FRQILJXUHV�WKH�/('�SLQ�DV�OUTPUT�DQG�WKH�VZLWFK�SLQ�DV�INPUT�
$�SLQ�PXVW�EH�VHW�WR�OUTPUT�PRGH�IRU�digitalWrite�WR�FRQWURO�WKH�SLQ¦VRXWSXW�YROWDJH��,W�PXVW�EH�LQ�INPUT�PRGH�WR�UHDG�WKH�GLJLWDO�LQSXW�
7KH�digitalRead�IXQFWLRQ�PRQLWRUV�WKH�YROWDJH�RQ�WKH�LQSXW�SLQ��inputPin���DQG�LW�UH�WXUQV�D�YDOXH�RI�HIGH�LI�WKH�YROWDJH�LV�KLJK����YROWV��DQG�LOW�LI�WKH�YROWDJH�LV�ORZ����YROWV��$FWXDOO\��DQ\�YROWDJH�WKDW�LV�JUHDWHU�WKDQ�����YROWV��KDOI�RI�WKH�YROWDJH�SRZHULQJ�WKHFKLS��LV�FRQVLGHUHG�HIGH�DQG�OHVV�WKDQ�WKLV�LV�WUHDWHG�DV�LOW��,I�WKH�SLQ�LV�OHIW�XQFRQQHFWHG
5.1 Using a Switch | 151
�NQRZQ�DV�IORDWLQJ���WKH�YDOXH�UHWXUQHG�IURP�digitalRead�LV�LQGHWHUPLQDWH��LW�PD\�EHHIGH�RU�LOW��DQG�LW�FDQQRW�EH�UHOLDEO\�XVHG���7KH�UHVLVWRU�VKRZQ�LQ�)LJXUH�����HQVXUHVWKDW�WKH�YROWDJH�RQ�WKH�SLQ�ZLOO�EH�ORZ�ZKHQ�WKH�VZLWFK�LV�QRW�SUHVVHG��EHFDXVH�WKHUHVLVWRU�£SXOOV�GRZQ¤�WKH�YROWDJH�WR�JURXQG��:KHQ�WKH�VZLWFK�LV�SXVKHG��D�FRQQHFWLRQLV�PDGH�EHWZHHQ�WKH�SLQ�DQG����YROWV��VR�WKH�YDOXH�RQ�WKH�SLQ�LQWHUSUHWHG�E\�digitalRead�FKDQJHV�IURP�LOW�WR�HIGH�
'R�QRW�FRQQHFW�D�GLJLWDO�RU�DQDORJ�SLQ�WR�D�YROWDJH�KLJKHU�WKDQ���YROWV�RU�����YROWV�RQ�D����9�ERDUG���7KLV�FDQ�GDPDJH�WKH�SLQ�DQG�SRVVLEO\GHVWUR\�WKH�HQWLUH�FKLS��$OVR��PDNH�VXUH�\RX�GRQ¦W�ZLUH�WKH�VZLWFK�VRWKDW�LW�VKRUWV�WKH���YROWV�WR�JURXQG��ZLWKRXW�D�UHVLVWRU���$OWKRXJK�WKLVPD\�QRW�GDPDJH�WKH�$UGXLQR�FKLS��LW�LV�QRW�JRRG�IRU�WKH�SRZHU�VXSSO\�
,Q�WKLV�H[DPSOH��WKH�YDOXH�IURP�digitalRead�LV�VWRUHG�LQ�WKH�YDULDEOH�val��7KLV�ZLOO�EHHIGH�LI�WKH�EXWWRQ�LV�SUHVVHG��LOW�RWKHUZLVH�
7KH�VZLWFK�XVHG� LQ� WKLV�H[DPSOH��DQG�DOPRVW�HYHU\ZKHUH�HOVH� LQ� WKLVERRN��PDNHV�HOHFWULFDO�FRQWDFW�ZKHQ�SUHVVHG�DQG�EUHDNV�FRQWDFW�ZKHQQRW�SUHVVHG��7KHVH�VZLWFKHV�DUH�FDOOHG�1RUPDOO\�2SHQ��12���VHH�WKLVERRN¦V�ZHEVLWH�IRU�SDUW�QXPEHUV��7KH�RWKHU�NLQG�RI�PRPHQWDU\�VZLWFKLV�FDOOHG�1RUPDOO\�&ORVHG��1&��
7KH�RXWSXW�SLQ�FRQQHFWHG�WR�WKH�/('�LV�WXUQHG�RQ�ZKHQ�\RX�VHW�val�WR�HIGH��LOOXPLQDWLQJWKH�/('�
$OWKRXJK�$UGXLQR�VHWV�DOO�GLJLWDO�SLQV�DV�LQSXWV�E\�GHIDXOW��LW�LV�D�JRRG�SUDFWLFH�WR�VHWWKLV�H[SOLFLWO\�LQ�\RXU�VNHWFK�WR�UHPLQG�\RXUVHOI�DERXW�WKH�SLQV�\RX�DUH�XVLQJ�
<RX�PD\�VHH�VLPLODU�FRGH�WKDW�XVHV�true�LQVWHDG�RI�HIGH��WKHVH�FDQ�EH�XVHG�LQWHUFKDQJH�DEO\��WKH\�DUH�DOVR�VRPHWLPHV�UHSUHVHQWHG�DV�1���/LNHZLVH��false�LV�WKH�VDPH�DV�LOW�DQG0��8VH�WKH�IRUP�WKDW�EHVW�H[SUHVVHV�WKH�PHDQLQJ�RI�WKH�ORJLF�LQ�\RXU�DSSOLFDWLRQ�
$OPRVW�DQ\�VZLWFK�FDQ�EH�XVHG��DOWKRXJK�WKH�RQHV�FDOOHG�PRPHQWDU\�WDFWLOH�VZLWFKHV�DUHSRSXODU�EHFDXVH�WKH\�DUH�LQH[SHQVLYH�DQG�FDQ�SOXJ�GLUHFWO\�LQWR�D�EUHDGERDUG��6HH�WKHZHEVLWH�IRU�WKLV�ERRN�IRU�VRPH�VXSSOLHU�SDUW�QXPEHUV�
+HUH�LV�DQRWKHU�ZD\�WR�LPSOHPHQW�WKH�ORJLF�LQ�WKH�SUHFHGLQJ�VNHWFK�
void loop(){ digitalWrite(ledPin, digitalRead(inputPin)); // turn LED ON if input pin is // HIGH, else turn OFF}
7KLV�GRHVQ¦W�VWRUH�WKH�EXWWRQ�VWDWH�LQWR�D�YDULDEOH��,QVWHDG��LW�VHWV�WKH�/('�RQ�RU�RIIGLUHFWO\�IURP�WKH�YDOXH�REWDLQHG�IURP�digitalRead��,W�LV�D�KDQG\�VKRUWFXW��EXW�LI�\RXILQG�LW�RYHUO\�WHUVH��WKHUH�LV�QR�SUDFWLFDO�GLIIHUHQFH�LQ�SHUIRUPDQFH��VR�SLFN�ZKLFKHYHUIRUP�\RX�ILQG�HDVLHU�WR�XQGHUVWDQG�
152 | Chapter 5:ಗSimple Digital and Analog Input
7KH�SXOO�XS�FRGH�LV�VLPLODU�WR�WKH�SXOO�GRZQ�YHUVLRQ��EXW�WKH�ORJLF�LV�UHYHUVHG��WKH�YDOXHRQ�WKH�SLQ�JRHV�LOW�ZKHQ�WKH�EXWWRQ�LV�SUHVVHG��VHH�)LJXUH�����IRU�D�VFKHPDWLF�GLDJUDPRI�WKLV���,W�PD\�KHOS�WR�WKLQN�RI�WKLV�DV�SUHVVLQJ�WKH�VZLWFK�DOWN��FDXVLQJ�WKH�RXWSXW�WRJR�LOW�
void loop(){ int val = digitalRead(inputPin); // read input value if (val == HIGH) // check if the input is HIGH { digitalWrite(ledPin, LOW); // turn LED OFF } else { digitalWrite(ledPin, HIGH); // turn LED ON }}
)LJXUH������6ZLWFK�FRQQHFWHG�XVLQJ�SXOO�XS�UHVLVWRU
See Also7KH�$UGXLQR�UHIHUHQFH�IRU�digitalRead��KWWS���DUGXLQR�FF�HQ�5HIHUHQFH�'LJLWDO5HDG
7KH�$UGXLQR�UHIHUHQFH�IRU�digitalWrite��KWWS���DUGXLQR�FF�HQ�5HIHUHQFH�'LJLWDO:ULWH
7KH�$UGXLQR�UHIHUHQFH�IRU�pinMode��KWWS���DUGXLQR�FF�HQ�5HIHUHQFH�3LQ0RGH
7KH�$UGXLQR�UHIHUHQFHV�IRU�FRQVWDQWV��HIGH��LOW��HWF����KWWS���DUGXLQR�FF�HQ�5HIHUHQFH�&RQVWDQWV
$UGXLQR�WXWRULDO�RQ�GLJLWDO�SLQV��KWWS���DUGXLQR�FF�HQ�7XWRULDO�'LJLWDO3LQV
5.1 Using a Switch | 153
7KH�SXOO�XS�FRGH�LV�VLPLODU�WR�WKH�SXOO�GRZQ�YHUVLRQ��EXW�WKH�ORJLF�LV�UHYHUVHG��WKH�YDOXHRQ�WKH�SLQ�JRHV�LOW�ZKHQ�WKH�EXWWRQ�LV�SUHVVHG��VHH�)LJXUH�����IRU�D�VFKHPDWLF�GLDJUDPRI�WKLV���,W�PD\�KHOS�WR�WKLQN�RI�WKLV�DV�SUHVVLQJ�WKH�VZLWFK�DOWN��FDXVLQJ�WKH�RXWSXW�WRJR�LOW�
void loop(){ int val = digitalRead(inputPin); // read input value if (val == HIGH) // check if the input is HIGH { digitalWrite(ledPin, LOW); // turn LED OFF } else { digitalWrite(ledPin, HIGH); // turn LED ON }}
)LJXUH������6ZLWFK�FRQQHFWHG�XVLQJ�SXOO�XS�UHVLVWRU
See Also7KH�$UGXLQR�UHIHUHQFH�IRU�digitalRead��KWWS���DUGXLQR�FF�HQ�5HIHUHQFH�'LJLWDO5HDG
7KH�$UGXLQR�UHIHUHQFH�IRU�digitalWrite��KWWS���DUGXLQR�FF�HQ�5HIHUHQFH�'LJLWDO:ULWH
7KH�$UGXLQR�UHIHUHQFH�IRU�pinMode��KWWS���DUGXLQR�FF�HQ�5HIHUHQFH�3LQ0RGH
7KH�$UGXLQR�UHIHUHQFHV�IRU�FRQVWDQWV��HIGH��LOW��HWF����KWWS���DUGXLQR�FF�HQ�5HIHUHQFH�&RQVWDQWV
$UGXLQR�WXWRULDO�RQ�GLJLWDO�SLQV��KWWS���DUGXLQR�FF�HQ�7XWRULDO�'LJLWDO3LQV
5.1 Using a Switch | 153
PÅLITELIG SJEKK AV BRYTERE
PÅLITELIG SJEKK AV BRYTERE
• Når en bryter slås på hender det som regel at verdiene går mellom høy og lav mange ganger veldig fort.
PÅLITELIG SJEKK AV BRYTERE
• Når en bryter slås på hender det som regel at verdiene går mellom høy og lav mange ganger veldig fort.
• Vi kan kompensere for dette i koden vår.
PÅLITELIG SJEKK AV BRYTERE
• Når en bryter slås på hender det som regel at verdiene går mellom høy og lav mange ganger veldig fort.
• Vi kan kompensere for dette i koden vår.
• Dette kalles på engelsk for debouncing.
const int buttonPin = 2; // the number of the pushbutton pin
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pin
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pin
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggled
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() {
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT);
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() {
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) { lastDebounceTime = millis();
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) { lastDebounceTime = millis(); }
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) { lastDebounceTime = millis(); }
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) {
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { buttonState = reading;
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { buttonState = reading; }
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { buttonState = reading; }
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { buttonState = reading; } digitalWrite(ledPin, buttonState);
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { buttonState = reading; } digitalWrite(ledPin, buttonState); lastButtonState = reading;
const int buttonPin = 2; // the number of the pushbutton pinconst int ledPin = 13; // the number of the LED pin
int ledState = HIGH; // the current state of the output pinint buttonState; // the current reading from the input pinint lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggledlong debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT);}
void loop() { int reading = digitalRead(buttonPin);
if (reading != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { buttonState = reading; } digitalWrite(ledPin, buttonState); lastButtonState = reading;}
ANALOG INNDATA
ANALOG INPUT
ANALOG INPUT
• Arduinofunksjonen for å lese analog input heter analogRead og forteller hvor høy spenningen er, fra 0 til 5 volt, ved å gi et tall mellom 0 og 1023.
ANALOG INPUT
• Arduinofunksjonen for å lese analog input heter analogRead og forteller hvor høy spenningen er, fra 0 til 5 volt, ved å gi et tall mellom 0 og 1023.
• (Det er altså 10-bits analog-til-digital konvertering som skjer.)
int sensorPin = A0; // select the input pin for the potentiometer
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LED
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT:
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT);
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() {
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor:
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin);
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH);
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for <sensorValue> milliseconds:
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for <sensorValue> milliseconds: delay(sensorValue);
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for <sensorValue> milliseconds: delay(sensorValue); // turn the ledPin off:
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for <sensorValue> milliseconds: delay(sensorValue); // turn the ledPin off: digitalWrite(ledPin, LOW);
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for <sensorValue> milliseconds: delay(sensorValue); // turn the ledPin off: digitalWrite(ledPin, LOW); // stop the program for for <sensorValue> milliseconds:
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for <sensorValue> milliseconds: delay(sensorValue); // turn the ledPin off: digitalWrite(ledPin, LOW); // stop the program for for <sensorValue> milliseconds: delay(sensorValue);
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LEDint sensorValue = 0; // variable to store the value coming from the sensor
void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); }
void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for <sensorValue> milliseconds: delay(sensorValue); // turn the ledPin off: digitalWrite(ledPin, LOW); // stop the program for for <sensorValue> milliseconds: delay(sensorValue); }
ENDRE REKKEVIDDEN
ENDRE REKKEVIDDEN
• Hvis vi trenger verdier mellom 0 og 100 i stedet for mellom 0 og 1023 kan vi bruke funksjonen map.
ENDRE REKKEVIDDEN
• Hvis vi trenger verdier mellom 0 og 100 i stedet for mellom 0 og 1023 kan vi bruke funksjonen map.
• map(verdi, fraLav, fraHøy, tilLav, tilHøy)
ENDRE REKKEVIDDEN
• Hvis vi trenger verdier mellom 0 og 100 i stedet for mellom 0 og 1023 kan vi bruke funksjonen map.
• map(verdi, fraLav, fraHøy, tilLav, tilHøy)
• F.eks. vil map(verdi, 0, 1023, 0, 255) gjøre jobben.
DIGITALE UTDATA
DIGITAL UTDATA
DIGITAL UTDATA
• Alle pinner kan også brukes som digitale ut-pinner.
DIGITAL UTDATA
• Alle pinner kan også brukes som digitale ut-pinner.
• Da må de settes med pinMode(pin,OUTPUT).
DIGITAL UTDATA
• Alle pinner kan også brukes som digitale ut-pinner.
• Da må de settes med pinMode(pin,OUTPUT).
• Deretter kan vi bruke digitalWrite(pin,OUTPUT), hvor OUTPUT er enten HIGH eller LOW.
ANALOGE UTDATA
ANALOGE UTSIGNALER
ANALOGE UTSIGNALER
• Analog betyr her at vi skal kunne variere spenningen fra 0 til 5 volt.
ANALOGE UTSIGNALER
• Analog betyr her at vi skal kunne variere spenningen fra 0 til 5 volt.
• Her kan vi bruke funksjonen analogWrite(pin,OUTPUT), hvor OUTPUT er et tall fra 0 til 255.
ANALOGE UTSIGNALER
• Analog betyr her at vi skal kunne variere spenningen fra 0 til 5 volt.
• Her kan vi bruke funksjonen analogWrite(pin,OUTPUT), hvor OUTPUT er et tall fra 0 til 255.
• Dette kan kun gjøres på pinner 3, 5, 6, 9, 10 og 11.
ANALOGE UTSIGNALER
• Analog betyr her at vi skal kunne variere spenningen fra 0 til 5 volt.
• Her kan vi bruke funksjonen analogWrite(pin,OUTPUT), hvor OUTPUT er et tall fra 0 til 255.
• Dette kan kun gjøres på pinner 3, 5, 6, 9, 10 og 11.
• Metoden som ligger under kalles pulsbreddemodulasjon.
PULSBREDDEMODULASJON
PULSBREDDEMODULASJON
• Pulse Width Modulation (PWM)
PULSBREDDEMODULASJON
• Pulse Width Modulation (PWM)
• Ved å slå av og på strøm veldig raskt, klarer Arduinokortet å simulere en spenning mellom 0 og 5 volt.
PULSBREDDEMODULASJON
• Pulse Width Modulation (PWM)
• Ved å slå av og på strøm veldig raskt, klarer Arduinokortet å simulere en spenning mellom 0 og 5 volt.
• Frekvensen er ca. 500 Hz.
3:0�ZRUNV�E\�YDU\LQJ�WKH�SURSRUWLRQ�RI�WKH�SXOVHV¦�RQ�WLPH�WR�RII�WLPH��DV�VKRZQ�LQ)LJXUH������/RZ�OHYHO�RXWSXW�LV�HPXODWHG�E\�SURGXFLQJ�SXOVHV�WKDW�DUH�RQ�IRU�RQO\�DVKRUW�SHULRG�RI�WLPH��+LJKHU�OHYHO�RXWSXW�LV�HPXODWHG�ZLWK�SXOVHV�WKDW�DUH�RQ�PRUH�WKDQWKH\�DUH�RII��:KHQ�WKH�SXOVHV�DUH�UHSHDWHG�TXLFNO\�HQRXJK��DOPRVW�����WLPHV�SHU�VHFRQGRQ�$UGXLQR���WKH�SXOVLQJ�FDQQRW�EH�GHWHFWHG�E\�KXPDQ�VHQVHV��DQG�WKH�RXWSXW�IURPWKLQJV�VXFK�DV�/('V�ORRNV�OLNH�LW�LV�EHLQJ�VPRRWKO\�YDULHG�DV�WKH�SXOVH�UDWH�LV�FKDQJHG�
)LJXUH������3:0�RXWSXW�IRU�YDULRXV�DQDORJ:ULWH�YDOXHV
$UGXLQR�KDV�D�OLPLWHG�QXPEHU�RI�SLQV�WKDW�FDQ�EH�XVHG�IRU�DQDORJ�RXWSXW��2Q�D�VWDQGDUGERDUG��\RX�FDQ�XVH�SLQV�����������������DQG�����2Q�WKH�$UGXLQR�0HJD�ERDUG��\RX�FDQXVH�SLQV���WKURXJK����IRU�DQDORJ�RXWSXW��0DQ\�RI�WKH�UHFLSHV�WKDW�IROORZ�XVH�SLQV�WKDWFDQ�EH�XVHG�IRU�ERWK�GLJLWDO�DQG�DQDORJ�WR�PLQLPL]H�UHZLULQJ�LI�\RX�ZDQW�WR�WU\�RXWGLIIHUHQW�UHFLSHV��,I�\RX�ZDQW�WR�VHOHFW�GLIIHUHQW�SLQV�IRU�DQDORJ�RXWSXW��UHPHPEHU�WRFKRRVH�RQH�RI�WKH�VXSSRUWHG�analogWrite�SLQV��RWKHU�SLQV�ZLOO�QRW�JLYH�DQ\�RXWSXW��
Controlling Light&RQWUROOLQJ�OLJKW�XVLQJ�GLJLWDO�RU�DQDORJ�RXWSXW�LV�D�YHUVDWLOH��HIIHFWLYH��DQG�ZLGHO\�XVHGPHWKRG�IRU�SURYLGLQJ�XVHU�LQWHUDFWLRQ��6LQJOH�/('V��DUUD\V��DQG�QXPHULF�GLVSOD\V�DUH
242 | Chapter 7:ಗVisual Output
LITT OM LYSDIODER
LYSDIODER
LYSDIODER• En LED er en diode som kun slipper strøm gjennom i én
retning.
LYSDIODER• En LED er en diode som kun slipper strøm gjennom i én
retning.
• Den har to ben, anode (vanligvis litt lenger) og katode, og når spenningen fra anode til katode er høy nok, så slippes strøm gjennom og den lyser.
LYSDIODER• En LED er en diode som kun slipper strøm gjennom i én
retning.
• Den har to ben, anode (vanligvis litt lenger) og katode, og når spenningen fra anode til katode er høy nok, så slippes strøm gjennom og den lyser.
• Spenningen som skal til for at den lyser (forward voltage) er vanligvis på 1,8 volt.
LYSDIODER + MOTSTANDER
LYSDIODER + MOTSTANDER
• Strømmen gjennom en lysdiode må begrenses med en motstand.
LYSDIODER + MOTSTANDER
• Strømmen gjennom en lysdiode må begrenses med en motstand.
• Hver Arduinopinne kan gi opp til 40 mA.
LYSDIODER + MOTSTANDER
• Strømmen gjennom en lysdiode må begrenses med en motstand.
• Hver Arduinopinne kan gi opp til 40 mA.
• En lysdiode trenger typisk 20 mA for å lyse.
7KH�GDWD�VKHHW�UHIHUV�WR����P$�DV�WKH�DEVROXWH�PD[LPXP�UDWLQJ�DQGVRPH�HQJLQHHUV�PD\�EH�KHVLWDQW�WR�RSHUDWH�DQ\ZKHUH�QHDU�WKLV�YDOXH�+RZHYHU��WKH����P$�ILJXUH�LV�DOUHDG\�GH�UDWHG�E\�$WPHO�DQG�WKH\�VD\WKH�SLQV�FDQ�VDIHO\�KDQGOH�WKLV�FXUUHQW��5HFLSHV�WKDW�IROORZ�UHIHU�WR�WKH���P$�PD[LPXP�UDWLQJ��KRZHYHU��LI�\RX�DUH�EXLOGLQJ�DQ\WKLQJ�ZKHUHUHOLDELOLW\� LV� LPSRUWDQW��GH�UDWLQJ� WKLV� WR����P$�WR�SURYLGH�DQ�DGGHGFRPIRUW�PDUJLQ�LV�SUXGHQW�
7.1 Connecting and Using LEDsProblem<RX�ZDQW�WR�FRQWURO�RQH�RU�PRUH�/('V�DQG�VHOHFW�WKH�FRUUHFW�FXUUHQW�OLPLWLQJ�UHVLVWRUVR�WKDW�\RX�GR�QRW�GDPDJH�WKH�/('V�
Solution7XUQLQJ�DQ�/('�RQ�DQG�RII� LV�HDV\�WR�GR�ZLWK�$UGXLQR��DQG�VRPH�RI�WKH�UHFLSHV� LQSUHYLRXV�FKDSWHUV�KDYH� LQFOXGHG�WKLV�FDSDELOLW\� �VHH�5HFLSH����� IRU�DQ�H[DPSOH�WKDWFRQWUROV�WKH�EXLOW�LQ�/('�RQ�SLQ������7KH�UHFLSH�KHUH�SURYLGHV�JXLGDQFH�RQ�FKRRVLQJDQG�XVLQJ�H[WHUQDO�/('V��)LJXUH�����VKRZV�WKH�ZLULQJ�IRU�WKUHH�/('V��EXW�\RX�FDQ�UXQWKLV�VNHWFK�ZLWK�MXVW�RQH�RU�WZR�
)LJXUH������&RQQHFWLQJ�H[WHUQDO�/('V
7KH�VFKHPDWLF�V\PERO�IRU�WKH�FDWKRGH��WKH�QHJDWLYH�SLQ��LV�N��QRW�F��7KHVFKHPDWLF�V\PERO�F�LV�XVHG�IRU�D�FDSDFLWRU�
7.1 Connecting and Using LEDs | 245
FRITZING
FRITZING
FRITZING• Dette er programvare for å dokumentere prosjekter og lage
design av kretskort.
FRITZING• Dette er programvare for å dokumentere prosjekter og lage
design av kretskort.
• Det forenkler prosessen fra prototype til endelig design.
FRITZING• Dette er programvare for å dokumentere prosjekter og lage
design av kretskort.
• Det forenkler prosessen fra prototype til endelig design.
• Også åpen kildekode og i samme familie som Processing og Arduino.
FRITZING• Dette er programvare for å dokumentere prosjekter og lage
design av kretskort.
• Det forenkler prosessen fra prototype til endelig design.
• Også åpen kildekode og i samme familie som Processing og Arduino.
• Se http://fritzing.org/ for mer informasjon!
AREF
GND
RESET
3V3
PWM
PWM
PWM
L
TXRX
USB
EXTPWRSEL
PWR
ICSP
PWM
PWM
PWM TX
RX
312111019 8DIGITAL
7 6 5 4 3 2 1 0
1
5V GndPOWER
www.arduino.cc
ANALOG IN9V 0 1 2 3 4 5
Arduino