ARDUINO STUDIELABEN PROGRAMMERING DIGITALE/ANALOGE INNDATA/UTDATA LYSDIODER FRITZING. Roger Antonsen INF januar 2012

Like dokumenter
SUPER DISCLAIMER. Vi endrer opplegget litt fra år til år, og vi hører på dere!

ARDUINO STUDIELABEN. Roger Antonsen INF februar 2012

ARDUINO STUDIELABEN. Roger Antonsen INF februar 2012

Prototyping med Arduino del 3

Emnenavn: Datateknikk. Eksamenstid: 3 timer. Faglærere: Robert Roppestad. Hele oppgavesettet består av 8 oppgaver, samt 1 vedlegg.

Bruk av interrupt og Timer i Arduino-program.

Prototyping med Arduino del 2

WORKSHOP BRUK AV SENSORTEKNOLOGI

Litt mer om Arduino. Roger Antonsen Sten Solli INF januar 2011

7-Segment Display. Introduksjon. Steg 1: Finn frem utstyr. Til denne oppgaven trenger du. Skrevet av: Martin Ertsås & Morten Minde Neergaard

7-Segment Display Nybegynner Arduino Lærerveiledning

Programmeringsspråket C

Programmering og Arduino

Bruk av interrupt og Timer i Arduino-program.

Steg 1: Installere programvaren

EKSAMEN (Del 2, våren 2015) Løsningsforslag

Blinkende lysdiode Introduksjon Arduino Lærerveiledning

INF 1000 høsten 2011 Uke september

Del 1 En oversikt over C-programmering

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Ultralydsensor. Introduksjon. Litt om ultralydsensorer. Arduino. Skrevet av: Martin Ertsås & Morten Minde Neergaard

Høgskoleni østfold EKSAMEN. Oppgavesettet består av 8 sider inklusiv denne forsiden og vedlegg.

INF1510: Bruksorientert design

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

INF1510: Bruksorientert design

IN1060: Bruksorientert design

Kapittel 1 En oversikt over C-språket

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

INF1510: Bruksorientert design

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

MAT1030 Diskret matematikk

består av 7 sider inklusiv denne forsiden og vedlegg. Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene.

EKSAMEN. Informasjon om eksamen. Emnekode og -navn: ITD13012 Datateknikk. Dato og tid: timer. Fagansvarlig: Robert Roppestad

Velkommen til plenumsregning for MAT1030. MAT1030 Diskret matematikk. Repetisjon: Algoritmer og pseudokode. Eksempel fra boka. Eksempel

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

Programmering og Arduino

TDT Øvingsforelesning 1. Tuesday, August 28, 12

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

1. Arduino Bluetooth 2 HC-05 modul

MAT1030 Plenumsregning 1

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

FORDYPNINGSEMNE 2012

MAT1030 Diskret Matematikk

Visuell Programmering: Kom i gang med Processing

Dagens tema: Sjekking

INF1000 Metoder. Marit Nybakken 16. februar 2004

Læringsmål og pensum. Oversikt

Analyseøving 8 - løsningsforslag

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Del 2 Tabeller, arrays, strenger

MAT1030 Diskret matematikk

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

INF1000. Marit Nybakken 10. februar 2004

MAT1030 Diskret matematikk

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Del 4 Noen spesielle C-elementer

Øvingsforelesning 1 Python (TDT4110)

Litt om Javas håndtering av tall MAT-INF 1100 høsten 2004

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

INF1000 (Uke 4) Mer om forgreninger, While-løkker

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

Verden. Introduksjon. Skrevet av: Kine Gjerstad Eide og Ruben Gjerstad Eide

TDT4110 IT Grunnkurs Høst 2016

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Verden. Steg 1: Vinduet. Introduksjon

2 Om statiske variable/konstanter og statiske metoder.

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

Verden - Del 2. Steg 0: Oppsummering fra introduksjonsoppgaven. Intro

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Hash-funksjoner. Introduksjon. Steg 1: Strekkoder. Eksempel. Skrevet av: Martin Strand

En to-timers oppskrift for å bygge og programmere en Arduino-drevet strikk-

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

Del 3: Evaluere uttrykk

Programmering Høst 2017

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Leksjon 3. Kontrollstrukturer

INF1000: Forelesning 4. Mer om arrayer Metoder

Eksamensoppgaven: Hele oppgavesettet består av 8 oppgaver. Hver oppgave har en %-angivelse som angir hvor mye den teller ved sensurering.

Begynner kurs i Arduino og C++ Geir Soland Skogmo Videregående skole

INF225 høsten 2003 Prosjekt del 4: kodegenerering

INF2810: Funksjonell Programmering

TDT4110 IT Grunnkurs Høst 2015

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum. if (be): else (not_to_be):

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

lage og bruke funksjoner som tar argumenter lage og bruke funksjoner med returverdier forklare forskjellen mellom globale og lokale variabler

INF1000 : Forelesning 3

Oversikt. INF1000 Uke 3. Repetisjon Program. Repetisjon Program. Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner

INF2810: Funksjonell Programmering

Forelesning inf Java 5

Kanter, kanter, mange mangekanter

Transkript:

ARDUINO PROGRAMMERING DIGITALE/ANALOGE INNDATA/UTDATA LYSDIODER ÅPEN SONE FOR EKSPERIMENTELL INFORMATIKK STUDIELABEN FRITZING Roger Antonsen INF1510 30. januar 2012

Arduino Cookbook, Michael Margolis Denne boken inneholder det meste man trenger å vite. Flere av illustrasjonene og eksemplene i denne forelesningen er tatt derfra. Making Things Talk, Tom Igoe En mer avansert, men veldig bra, bok!

PROGRAMMERING I ARDUINO

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. Noen viktige begreper er følgende. deklarasjon: å sette av plass i minnet int x; boolean y; tilordning: å sette en verdi x = 20; y = true; skop: der hvor variablene er synlige

int: 16-bits verdi mellom -32 768 og 32 767 int x = 32767; x++; // gjør at x blir -32768 unsigned int: 16-bits verdi mellom 0 og 65535 kun positive verdier long: 32-bits verdi mellom -2147483648 og 2147483647 usigned long: 32-bits verdi mellom 0 og 4294967295 float/double: 32-bits flyttall avrundede verdier; husk at dette kan medføre nøyaktigheter

byte: 8-bits verdi mellom 0 og 255 byte 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 variable deklarasjon (og tilordning): int mittarray[6]; // kun deklarasjon int minetall[] = {3,7,1,2,8}; // automatisk int mineverdier[3] = {32,64,-8}; // både-og char 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

type til returverdi (eller void hvis ingen type) navn på funksjonen type og navn på argumentene til funksjonen returverdi; må være av riktig type int multipliser(int x, int y) { int resultat; resultat = x * y; return resultat; } Viktig å huske på: skop semikolon klammeparenteser kommentarer deklarasjon av variabel tilordning av variabel

Aritmetikk: int y; y = 9 / 4; // y blir satt til 2 y = y + 3; // øker verdien til y med 3 y++; // samme som y = y + 1; y /= 2; // samme som y = y / 2; Sammenlikninger: x == y // x lik y x!= y // x ulik y x <= y // x mindre enn eller lik y Logiske operatorer: x > 0 && x < 5 // OG - sann hvis begge er sanne x > 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 } else { // gjør B }

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 }

deklarere variabel sett startverdi test endre verdi kropp for (int x = 0; x < 100; x++) { Serial.println(x); } // skriver tallene fra 0 til 99

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 å 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.

void loop() { digitalwrite(ledpin, digitalread(inputpin)); // turn LED ON if input pin is // HIGH, else turn OFF }

void loop() { int val = digitalread(inputpin); // read input value if (val == HIGH) // check if the input is HIGH { } digitalwrite(ledpin, LOW); } else { digitalwrite(ledpin, HIGH); } // turn LED OFF // turn LED ON

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; const int ledpin = 13; int ledstate = HIGH; int buttonstate; int lastbuttonstate = LOW; // the number of the pushbutton pin // the number of the LED pin // the current state of the output pin // the current reading from the input pin // the previous reading from the input pin long lastdebouncetime = 0; // the last time the output pin was toggled long 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 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 ledpin = 13; // select the pin for the LED int 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 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 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 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 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.

LITT OM LYSDIODER

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 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.

FRITZING

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 3 1 2 1 L 1 1 PWM 0 1 PWM 9 8 7 6 5 4 3 2 1 0 DIGITAL PWM PWM PWM PWM TX RX TX RX Arduino PWR 1 PWR SEL USB EXT ICSP RESET 3V3 www.arduino.cc POWER ANALOG IN 5V Gnd 9V 0 1 2 3 4 5