Arduino opgaver. I dette dokument er der inspiration til en række programmerings-opgaver til Arduino.

Størrelse: px
Starte visningen fra side:

Download "Arduino opgaver. I dette dokument er der inspiration til en række programmerings-opgaver til Arduino."

Transkript

1 : Hyperlinks til forskellige opgaver: #Binære_tal, #Knightrider, #Dot_Matrix-display, #Fra_Debug_vindue_til_Ardu, #Hej_mor, #Pernille, #Interrupts, #Keypad, #LCD, #Morse, #Potentiometer, #RF_ID, #RGB, #Seriel_monitor, #Servomotor, #Skifteregister, #Stepmotor, #Temperatur, #Termoprinter, #Ur Interrupt, I dette dokument er der inspiration til en række programmerings-opgaver til Arduino. Opgaverne bliver i nogen grad sværere og sværere hen igennem opgaverne. Vælg blandt opgaverne, lav dem, skriv kommentarer i kildeteksten, dokumenter med flowchart og aflever! Opgaverne kan laves ved at opbygge eksterne kredsløb på et fumlebrædt. Eller ved at bruge en af de Kits, jeg har lavet. Herunder er printudlæggene for kittene vist. LCD & Keypad Kit: For at kunne forbinde Kittene korrekt til Arduinoerne, se dokument med printudlæg over kittene. Opgaver: For at få hjælp til at lave opgaverne, brug Arduino-kompendiet, eller søg på nettet! Til de fleste opgaver er der et eksempel, der kan C&P ind i Arduino IDE en og afprøves. Men ideen er jo, at man selv skal bearbejde, ændre i programmet eller tilføje mere funktionalitet. Blinkende Lysdiode Åben programeksemplet Arduino IDE Fil\Eksempler\Basics\Blink. I dette program er det den indbyggede LED på pin 13 på Arduinoboardet, der blinker. Eksperimenter med at justere på blinkfrekvensen ; Monter 2 LED på et fumlebrædt eller brug et kit. Få dioderne til at blinke på skift. Side 1 af 54

2 Husk formodstande for dioderne hvis der bruges Fumlebrædt ; Lad delayet være bestemt af en variabel, og indret programmet så blinkfrekvensen ændres for hver gennemløb. I loop-sløjfen tilføjes fx følgende: delay(time); time = time - 10; if(time < 5) time = 5; Indret nu programmet, så variablen delay varierer op og ned mellem 10 og 1000 ( ms ) ; Monter 2 knapper på hver sin inputpin. Brug evt. testkittet. Den har pull-down-modstande på trykknapperne til højre. Den ene knap skal kunne skrue op, og den anden knap ned for blink-frekvensen på en lysdiode. Find evt. hjælp i eksemplet: Fil\Eksempler\Digital\Button. Eller brug if(digitalread(input_1) == 1) time = time - 10; if(time < 5) time = 5; // 2 lighedstegn efter hinanden betyder // Logisk lig med Enable Intern pullup: For at der kan kobles en switch på en indgang, skal der normalt bruges en extern pull up, - eller pull down-modstand. Men i Arduino-uC en er der mulighed for at enable intern pull up. Definer en pin som input. Dernæst gør den høj. ( digitalwrite(inputpin, HIGH) ) Side 2 af 54

3 Evt. kan man læse en spænding fra potentiometeret, og lade delayet være styret af læste værdi. Herved kan man med en skruetrækker ændre blinkfrekvensen. Fadning af lysdiode Se evt. Eksempler / Analog / Fading. Brug nu en Analoge udgang til en lysdiode, og få den til at fade ind og ud. Analoge udgange er markeret med en bølgestreg. Det er egentligt forkert at kalde udgangene for analoge, fordi de i virkeligheden er pulsbreddemodulerede. Dvs. at de er høje en procentdel af tiden. Dutycyclen kan justeres med analogwrite(pin, værdi); hvor værdien kan være fra 0 til 255. /* Fadning af dioder af: Valle d. 28/01-14 */ // Def af pins int led1 = 10; int led2 = 11; int time = 100; int delaytime = 10; void setup() pinmode(led1, OUTPUT); void loop() analogwrite(led1, time); time++; if (time > 250) time = 5; delay(delaytime); /* Ekstra: analogwrite(led2, 255-time); Side 3 af 54

4 while(time<250) analogwrite(led1, time); analogwrite(led2, 255-time); time++; delay(delaytime); while (time > 5) analogwrite(led1, time); analogwrite(led2, 255-time); time--; delay(delaytime); Måske kan man lade lysstyrken være afhængig af et potmeter val = analogread(analogpin); // læs input pin, fx fra pin A0 analogwrite(ledpin, val / 4); // analogread, værdier kan være fra 0 til 1023, //analogwrite værdier fra 0 til 255 */ Først skal det virke med 1 lysdiode, - dernæst skal den ene lysdiode øge sin lysstyrke mens den anden svækkes. Lav derefter programmet om, så det er LED ens lysstyrke, der ændres med knapperne. Brug PWMoutput. Knightrider Brug 8 lysdioder på et Kit. De skal lyse som Knightrider. Kopier følgende program ind i IDE og afprøv. /* Knightrider Startet d. Valle */ // Def af pins int led7 = 13; int led6 = 12; int led5 = 11; int led4 = 10; int led3 = 9; Side 4 af 54

5 int led2 = 8; int led1 = 7; int led0 = 6; int time = 100; void setup() pinmode(led0, OUTPUT); pinmode(led1, OUTPUT); pinmode(led2, OUTPUT); pinmode(led3, OUTPUT); pinmode(led4, OUTPUT); pinmode(led5, OUTPUT); pinmode(led6, OUTPUT); pinmode(led7, OUTPUT); void loop() forever: digitalwrite(led0, HIGH); delay(time); digitalwrite(led0, LOW); digitalwrite(led1, HIGH); delay(time); digitalwrite(led1, LOW); digitalwrite(led2, HIGH); delay(time); digitalwrite(led2, LOW); digitalwrite(led3, HIGH); delay(time); digitalwrite(led3, LOW); digitalwrite(led4, HIGH); delay(time); digitalwrite(led4, LOW); digitalwrite(led5, HIGH); delay(time); digitalwrite(led5, LOW); digitalwrite(led6, HIGH); delay(time); digitalwrite(led6, LOW); digitalwrite(led7, HIGH); delay(time); digitalwrite(led7, LOW); // initialize the digital pin as an output. // the loop routine runs over and over again // turn the LED on (HIGH is the voltage level) // wait // turn the LED off by making the voltage LOW // wait for a second // turn the LED off by making the voltage LOW // turn the LED off by making the voltage LOW // turn the LED off by making the voltage LOW // turn the LED off by making the voltage LOW // turn the LED off by making the voltage LOW // turn the LED off by making the voltage LOW // turn the LED off by making the voltage LOW 1023 ) time = analogread(a0)/4; // deles med 4 fordi der læses 10 bit ( 0 til Side 5 af 54

6 ; Lav nu programmet om, så delayet ændres for hver loop. Brug fx: time = time - 10; if (time < 15) time = 300; ; Lav hastigheden om, så den er afhængig af justeringen af et potmeter. Arduinoen kan læse en analog værdi mellem 0 og 5 Volt, og omforme den til et tal mellem 0 og Brug fx: time = analogread(analogpin); // Der læses værdier fra 0 til 1023! time = analogread(0)/4; /* Knight Rider 2, Eksempel på brug af Array. * * * Reducing the amount of code using for(;;). * Kilde: * * (cleft) 2005 K3, Malmo University David Cuartielles David Cuartielles, Aaron Hallborg */ int pinarray[] = 2, 3, 4, 5, 6, 7; int count = 0; int timer = 100; void setup() // we make all the declarations at once for (count=0;count<6;count++) pinmode(pinarray[count], OUTPUT); void loop() for (count=0;count<6;count++) Side 6 af 54

7 digitalwrite(pinarray[count], HIGH); delay(timer); digitalwrite(pinarray[count], LOW); delay(timer); for (count=5;count>=0;count--) digitalwrite(pinarray[count], HIGH); delay(timer); digitalwrite(pinarray[count], LOW); delay(timer); /* Knight Rider 3, * *Kilde: * This example concentrates on making the visuals fluid. * * (cleft) 2005 K3, Malmo University David Cuartielles David Cuartielles, Aaron Hallborg */ int pinarray[] = 2, 3, 4, 5, 6, 7; int count = 0; int timer = 30; void setup() for (count=0;count<6;count++) pinmode(pinarray[count], OUTPUT); void loop() for (count=0;count<5;count++) digitalwrite(pinarray[count], HIGH); delay(timer); digitalwrite(pinarray[count + 1], HIGH); delay(timer); digitalwrite(pinarray[count], LOW); delay(timer*2); for (count=5;count>0;count--) digitalwrite(pinarray[count], HIGH); delay(timer); digitalwrite(pinarray[count - 1], HIGH); delay(timer); digitalwrite(pinarray[count], LOW); delay(timer*2); Side 7 af 54

8 Binære tal Nu skal der defineres en variabel, fx en integer. Dens værdi tælles op til 255 i en løkke. Brug fx: for (int i=0; i<256; i++) // Do Tallets binære værdi skal vises på de 8 lysdioder. /* Binære tal på 8 Valle 28/01-14 */ // Def af pins int led7 = 13; int led6 = 12; int led5 = 11; int led4 = 10; int led3 = 9; int led2 = 8; int led1 = 7; int led0 = 6; int time = 100; // definer altid alle værdier her void setup() pinmode(led0, OUTPUT); pinmode(led1, OUTPUT); pinmode(led2, OUTPUT); pinmode(led3, OUTPUT); pinmode(led4, OUTPUT); pinmode(led5, OUTPUT); pinmode(led6, OUTPUT); pinmode(led7, OUTPUT); // initialize the digital pin as an output. Side 8 af 54

9 void loop() for (int i=0; i<256; i++) digitalwrite(led0, bitread(i, 0)); digitalwrite(led1, bitread(i, 1)); digitalwrite(led2, bitread(i, 2)); digitalwrite(led3, bitread(i, 3)); digitalwrite(led4, bitread(i, 4)); digitalwrite(led5, bitread(i, 5)); digitalwrite(led6, bitread(i, 6)); digitalwrite(led7, bitread(i, 7)); delay(time); /* Ekstra: Udvid med monitor debug vindue. Serial.begin(9600); Serial.println(i); Serial.print(i.BIN); Tæl både op og ned! Læg dobbelt kode i en subrutine for (int j=0; j<256; j++) update_leds(j); // Subs void update_leds(int i) */ Alle 8 bit: Studer og brug følgende program. Der er bare et problem, der skal håndteres, idet pin 0 og pin 1 bruges til kommunikation mellem PC-en og Arduinoboardet. Derfor skal programmet laves om, så der fx bruges fra pin 2 og opad. Side 9 af 54

10 Og der mangler vist et delay. // Digital 0 to7 set as outputs, then on/off using digitalwrite() void setup() for (int a=0; a<8; a++) pinmode(a, OUTPUT); void loop() for (int a=0; a<8; a++) digitalwrite(a, HIGH); for (int a=0; a<8; a++) digitalwrite(a, LOW); Få lysdioder til at lyse Random void loop() int i=random(4); digitalwrite(ledpin[i], HIGH); while(digitalread(buttonpin[i]) == LOW) //do nothing digitalwrite(ledpin[i], LOW); Mangler lidt forklaring Programmet skal nu udvides, så det efter ovenstående kører modsat, dvs. lysdioderne lyser fra modsat side. Og derefter gentages! Brug af den serielle monitor Side 10 af 54

11 Arduionoen er jo koblet til PC-en. Og den er i stand til at sende data til PC-en til et vindue. Vinduet kaldes et Debug-vindue, da det er meget let at afluse dvs. fejlfinde et program ved at få skrevet værdier fra programmet i debugvinduet. Bemærk at man ikke kan bruge pin 0 og 1 og samtidig bruge den serielle debug-monitor. For at starte kommunikationen fra Arduinoen skal der i setup-program-sektionen indføjes en ordre om at opstarte seriel transmission til PC-en. void setup() Serial.begin(9600); // start en seriel kommunikations-mulighed Brug nu programmet Binære tal ovenfor få vist den binære værdi, programmet er kommet til på PCen. Serial.print("Vaerdien er "); // send tekst til debugvinduet. Serial.print(Vaerdi); // send værdi af variabel til debugvinduet For mere: Se speciel kompendium: Se fx Youtube: Lysdiode styret af potentiometer Monter et eksternt potentiometer til en analog indgang. Den skal have 5 Volt og nul, og midterbenet skal fx til indgang A0. Eller brug kittet med et potentiometer. Lad den læste værdi afgøre hvor hurtigt en lysdiode blinker. og eller hvordan den fades. Obs: De værdier, der læses fra en analog indgang er fra 0 til 1023, dvs. der læses 10 bit. Men de værdier, der kan skrives til en PWM-udgang er kun på 8 bit. Side 11 af 54

12 Her er eksempler på, hvad der kan bruges af kode: const int analogindgang = A0; //Definer indgangnummer int analogvaerdi = 0; // definer en variable, giv den værdien 0 analogvaerdi = analogread(analogindgang); // læs værdi til variabel analogvaerdi = analogvaerdi / 4 // omregn til max 8 bit. analogvaerdi kan nu bruges i et program til fx at bestemme blinkfrekvens eller fade-value. RGB Lysdiode Til denne opgave er der lavet nogle små kit med en lille strimmel RGB-bånd. Der skal tilsluttes 12 Volt, idet der er 3 lysdioder i serie. Kittet kan styres direkte via en Arduino output på 5 Volt. Obs.: I stedet for RGB-båndet, kan der bruges tre separate lysdioder - placeret tæt sammen. Husk formodstande!! Printudlægget for RGB kittet er vist her. Undersøg hvordan ULN2003 er opbygget.! /* Kodeeksempel til at styre RGB-dioder. Kode fra Adafruit Arduino Redigeret af: Navn Dato: */ Side 12 af 54

13 int redpin = 11; int greenpin = 10; int bluepin = 9; void setup() pinmode(redpin, OUTPUT); pinmode(greenpin, OUTPUT); pinmode(bluepin, OUTPUT); void loop() setcolor(255, 0, 0); // red delay(1000); setcolor(0, 255, 0); // green delay(1000); setcolor(0, 0, 255); // blue delay(1000); setcolor(255, 255, 0); // yellow delay(1000); setcolor(80, 0, 80); // purple delay(1000); setcolor(0, 255, 255); // aqua delay(1000); void setcolor(int red, int green, int blue) analogwrite(redpin, red); analogwrite(greenpin, green); analogwrite(bluepin, blue); Lav koden om, så farverne skifter roligt og stille Stepmotorstyring Brug et kit med en ULN2003 og forbind en stepmotor til det. Det skal have en ekstern 12 Volt, evt. fra en netadapter. I første omgang skal motoren bare køre. Brug delay( ) funktionen til at bestemme varigheden af de enkelte spolers energisering. Side 13 af 54

14 Lav en tæller, der tælles 1 op for hver stepmotorcyklus. Når tælleren når op på fx 300, skal motoren stoppe i 5 sekunder, hvorefter den kører modsat vej. Lad nu delay-tiden være afhængig af en spænding, læst fra potentiometeret. ( Det er endnu ikke muligt at arbejde med eksakte tider, da dette kræver at der kører en timer sideløbende med loop-programmet. Det kræver kendskab til interrupts. Herom senere ) 7-segment Skal der laves program til et 7-segment, skal der jo konverteres fra et tal til et mønster, som vi har prøvet i assembler. Det sker her fx via et Array i stedet for tabelopslag. Eksempel: // Kopieret fra tronixstuff.com/tutorials > // John Boxall - October 2011 // inputs and outputs byte segments[] = B , B , B , B , B , B , B , B , B , B ; // digital pins 7~0 connected to display pins dp,a~g void setup() DDRB = B ; // set PORTB (digital 13~8) to inputs DDRD = B ; // set PORTD (digital 7~0) to outputs void disp(int z) PORTD = segments[z]; void loop() disp(pinb); //??????????????? delay(100); Fælles katode! Side 14 af 54

15 Mål analog spænding / temperatur /* Arduino Voltmeter */ // Konstanter const int analogindgang = A0; const unsigned int dtime = 500; const float gain = 204.6; // Variabler int analogvaerdi = 0; float volt = 0.0; // en float-variabel har decimaler void setup() Serial.begin(9600); void loop() analogvaerdi = analogread(analogindgang); Serial.print("Vaerdi fra ADC = "); Serial.print(analogVaerdi); // Her følger beregning/konvertering! volt = float(analogvaerdi); volt = volt / gain; Serial.print("\t Spaending = " ); // Send tabulator og skriv Serial.println(volt); // ny linje efter at have skrevet. delay(dtime); Undersøg IC-en LM35. Lav programmet om, så der måles på signalet fra temperatur-sensoren LM35. Præsenter temperaturen i Debug-vinduet eller på LCD Serial.println(volt, 2); // Skriver 2 decimaler. Piezo Beeper Side 15 af 54

16 På det ene kit sidder der nogle små lydgivere. Den ene giver lyd af sig selv, blot den forsynes med 5 Volt. Den anden skal have en vekslende spænding med den frekvens, man ønsker skal komme som lyd. Der et eksempel: /* Piezo This example shows how to run a Piezo Buzzer on pin 9 using the analogwrite() function. It beeps 3 times fast at startup, waits a second then beeps continuously at a slower pace */ void setup() pinmode(9, OUTPUT); beep(50); beep(50); beep(50); delay(1000); // declare pin 9 to be an output: void loop() beep(200); void beep(unsigned char delayms) analogwrite(9, 20); // Almost any value can be used except 0 and 255 // experiment to get the best tone delay(delayms); // wait for a delayms ms analogwrite(9, 0); // 0 turns it off delay(delayms); // wait for a delayms ms Morse. int ledpin = 13; Side 16 af 54

17 void setup() // run once, when the sketch starts pinmode(ledpin, OUTPUT); // sets the digital pin as output void loop() flash(200); flash(200); flash(200); // S delay(300); // otherwise the flashes run together flash(500); flash(500); flash(500); // O flash(200); flash(200); flash(200); // S delay(1000); // wait 1 second before we start again void flash(int duration) digitalwrite(ledpin, HIGH); delay(duration); digitalwrite(ledpin, LOW); delay(duration); /* Program til at morse SOS */ // Pin 13 has an LED connected on most Arduino boards. // give it a name: const byte ledpin = 13; // Const -> lægges i Flash, dvs. optager ikke RAM // #define vil lægge konstanten i RAM!!! const int delaytime = 400; // tid mellem karakterer const int priktime = 200; // tid for prik const int stregtime = 600; // tid for Streg const int pausetime = 1800; unsigned int count = 0; // the setup routine runs once when you press reset: void setup() // initialize the digital pin as an output. pinmode(ledpin, OUTPUT); digitalwrite(ledpin, LOW); // der bør altid defineres en startværdi for pins Serial.begin(9600); Serial.println("ready "); // the loop routine runs over and over again forever: Side 17 af 54

18 void loop() for (int i = 0; i < 3; i++) digitalwrite(ledpin, HIGH); level) delay(priktime); digitalwrite(ledpin, LOW); LOW delay(delaytime); delay(delaytime); // turn the LED on (HIGH is the voltage // wait for a second // turn the LED off by making the voltage // wait for a second // pause mellem karakterer for (int i = 0; i < 3; i++) digitalwrite(ledpin, HIGH); level) delay(stregtime); digitalwrite(ledpin, LOW); LOW delay(delaytime); delay(delaytime); for (int i = 0; i < 3; i++) digitalwrite(ledpin, HIGH); level) delay(priktime); digitalwrite(ledpin, LOW); LOW delay(delaytime); count++; Serial.print("antal "); Serial.println(count); delay(pausetime); // turn the LED on (HIGH is the voltage // wait for a second // turn the LED off by making the voltage // wait for a second // turn the LED on (HIGH is the voltage // wait for a second // turn the LED off by making the voltage // wait for a second Lav et program, der sender morsekode. Programmet skal udformes så selve lyd-genereringen ligger i hver sin subrutine. Ur-program Test følgende program! /* Side 18 af 54

19 Ur-program */ // Konstanter const byte ledpin = 13; const unsigned int tdelay = 1000; // Konstant i ROM! // Variabler byte sekundtaeller = 55; byte minuttaeller = 59; byte timetaeller = 23; // Startværdier, for test byte asekund = 59; // Alarm tidspunkt byte aminut = 59; byte atime = 23; void setup() Serial.begin(9600); pinmode(ledpin, OUTPUT); digitalwrite(ledpin, LOW); // for Debugvinduet void loop() printtid(); // Indsæt din kode her! if(sekundtaeller==asekund && minuttaeller==aminut && timetaeller==atime) digitalwrite(ledpin, HIGH); Serial.println(" ALARM! "); else digitalwrite(ledpin, LOW); sekundtaeller++; if (sekundtaeller >= 60) sekundtaeller = 0; minuttaeller++; if (minuttaeller >= 60) minuttaeller = 0; timetaeller++; Side 19 af 54

20 if (timetaeller >= 24) timetaeller = 0; delay(tdelay); //##### SUBs ##### void printtid() Serial.print( "Tid: "); if(timetaeller < 10) Serial.print("0"); if(timetaeller < 1) Serial.print("0"); else Serial.print(timeTaeller, 1); // 1 betyder 1 decimal. Serial.print(":"); if(minuttaeller < 10) Serial.print("0"); if(minuttaeller < 1) Serial.print("0"); else Serial.print(minutTaeller, 1); Serial.print(":"); if(sekundtaeller < 10) Serial.print("0"); if(sekundtaeller < 1) Serial.println("0"); else Serial.println( sekundtaeller, 1); // sekundtaeller, 1 /* Syntax Serial.print(val) Serial.print(val, format) */ // ##### Ikke flere SUBs ##### Side 20 af 54

21 Seriel transmission / Hej Mor-displayet. Send serielle data til Hej Mor - Dot Matrix displayet. Arduino Uno har kun 1 hardware-uart, og denne bruges til kommunikation med PC-en. Dvs. til upload af program, - og til kommunikation med debugvinduet. Men der er heldigvis mulighed for meget let at tilføje ekstra software- UARTs direkte fra et medfølgende bibliotek, og derved skabe en eller flere Soft-UART. Arduino Mega har flere hardware- UARTs indbygget. Se fx. Cookbook ca. side 149. Opgave: Da Hej Mor displayet er bygget til 1200 Baud, skal programmet selvfølgelig vide dette. Vælg Baudrate på 1200 Baud. ( For Mega: Serial1.begin(1200); ) Vha. 4 switche tilsluttet Arduinoen vælges fx at sende forskellige tekstbeskeder. Først sendes et ID for at vælge segment, og dernæst data. ID er 81h for venstre digit, 82h for 2. digit osv. /* Programeksempel: Software serial multple serial test Sender til " Hej Mor " displayet The circuit: * Rx is digital pin 10 (connect to Tx of other device) * Tx is digital pin 11 (connect to Rx of other device) */ #include <SoftwareSerial.h> SoftwareSerial myserial(10, 11); // Rx, Tx er valgt til ben 10 og 11 // I stedet for myserial kan objektet fx kaldes hejmor byte rx = 10; // byte tx = 11; void setup() // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) ; // wait for serial port to connect. Needed for Leonardo only Side 21 af 54

22 // pinmode(rx,input); // er jo Input default vist nok. pinmode(tx,output); digitalwrite(tx,high); delay(500); Serial.println("Hej!"); // i Debug vinduet: myserial.begin(1200); // indstil baudrate for SoftwareSerial port delay(500); myserial.write( 0x81 ); // ID for første segment delay(100); myserial.write ("H"); // Skriv "H" delay(100); Serial.println("Sendt"); // i debugvinduet void loop() // run over and over Fra venstre er ID, eller adresserne 81h, 82h 87h. Hvis bit 8 i en byte er sat, opfatter displayet byten som en adresse. Ikke alle ASCII karakterer er implementeret endnu. De specielle danske karakterer har ASCII-værdien: æ = 01h ø = 02h å = 03h Æ = 04h Ø = 05h Å = 06h I protokollen er der yderligere den mulighed, at man kan sende en ID på 1010 xxxx og dernæst 7 byte data! myserial.write( 0xA0 ); delay(100); // ID for 7-mode Side 22 af 54

23 myserial.write ("Lagkage"); // Skriv " tekst " i display! Selv-definerede Karakterer: Det er også muligt, at skrive selvdefinerede karakterer I displayet. Hvis der sendes en adressebyte, med Bit 4 sat høj, ( fx xxxb ), afventer displayet på yderligere 5 bytes med mønster-information, dvs. hvilke lysdioder, der skal tændes. Værdierne xxx er fra 1 til 7 for at vælge hvilken digit man skriver til. Den første byte i mønsteret er venstre søjle, 2. byte er næste søjle osv. Protokollen for de 5 mønster-data-bytes er: 0xxxxxxxb, hvor bit 6 er den øverste LED, og bit 0 er den nederste LED i søjlen. Bit 7 skal være 0, ellers tror de andre segmenter, at det er en adresse.. myserial.write( 0x91 ); delay(100); myserial.write (B ); myserial.write (B ); myserial.write ((byte)b ); myserial.write (B ); myserial.write (B ); // ID for selv-definerede karakterer // venstre søjle // Binære tal kan også defineres som // 0b // Man kan ikke umiddelbart compilere en // byte som er 0! Obs: Hvis der skal sendes en hel byte med 8 0 -ere, skal det skrives som: myserial.write ((byte)b ); Derfor bør det smart gøres i alle linjer! Data fra Debug Vinduet på PC-en til Arduino Ligesom man kan sende data fra Arduino til PC-en, kan man sende data modsatte vej. De indskrives i øverste rude i Debugvinduet, og sendes serielt. Her er et par eksempler på, hvordan det kan bruges: int inbyte = 0; int outputpin = 13; // incoming serial byte Side 23 af 54

24 void setup() Serial.begin(9600); // start serial port at 9600 bps: pinmode(outputpin, OUTPUT); void loop() if (Serial.available() > 0) inbyte = Serial.read(); // get incoming byte: if (inbyte == 'E') digitalwrite(outputpin, HIGH); else if (inbyte == 'F') digitalwrite(outputpin, LOW); else Serial.print('H'); delay(1000); Serial.print('L'); delay(1000); For yderligere se speciel kompendium: Se in depth tutorial : Kilde: ( Der er flere eksempler på siden, se linket herover! ) Keypad Se fx Cookbook ca. side 163 Kobl et Keypad til Arduinoen, - og skriv fx på PC-en eller en LCD, hvilken tast, der trykkes. Keypad: Se: Og: Side 24 af 54

25 Ovenstående links benytter en biblioteksfil!! Hvordan virker et Keypad? Keypads er typisk lavet som et matrix, for at spare på ledninger og dermed antal pins, der skal bruges for at scanne keypad-én. Dvs. at processoren fx skal sætte højt på alle rækker, og så tjekke, om der er højt på en af søjlerne. Det vil der kun være, hvis en pad er trykket. Men problemet er, at man ikke kan vide, i hvilken række, der er trykket. Derfor må processoren efter et tryk på skift sætte højt på en af rækkerne, og så på den måde finde ud af, hvilken række og søjle, der er tastet. Her er et keypad med matrix connections vist Eksempel: Når tasten trykkes, presses et ledende gummimateriale ned på et print og kortslutter to ledninger. Her er en kontakt vist i skitse Vore keypads er fra Farnell, Varenummer ( 12 keys ) eller ( 16 keys ). Farnell Varenummer: Side 25 af 54

26 Pins på 4x4 Keypad set forfra, fra venstre K1, K2, K3, K4, R1, R2, R3, R4 Venstre kolonne er kolonne, K1. Øverste række er R1. ( Obs: set fra bagsiden! ) På alle pins er der på kittene monteret en 10Kohm pulldown modstand. Keypad.h filen kan ses her: Keypad Kodeeksempel: /* Keypad sketch prints the key pressed on a keypad to the debug window through the serial port Modificeret af Valle Programmet virker kun til et 4x4 keypad. Testet d. 27/ Til Keypads med Pull Down-modstande. Pins på Keypad er set fra knapsiden, fra venstre: Kolonne / Column Række / Row K0, K1, K2, K3, - R0, R1, R2, R3 Kolonne 0 er den venstreste, Række 0 er den øverste. */ const int numrows = 4; // def. number of rows in the keypad const int numcols = 4; // def. number of columns const int debouncetime = 20; // number of milliseconds for switch to be stable // keymap defines the character returned when the corresponding key is pressed const char keymap[numrows][numcols] = ; '1', '2', '3', 'F', '4', '5', '6', 'E', '7', '8', '9', 'D', 'A', '0', 'B', 'C' // this array determines the pins used for rows and columns Side 26 af 54

27 // Pin 9 til venstre pin på keypad, pin 8 til # 2 osv. const int rowpins[numrows] = 5, 4, 3, 2 ; // Rows 0 through 3 const int colpins[numcols] = 9, 8, 7, 6 ; // Columns 0 through 2 void setup() Serial.begin(9600); for (int row = 0; row < numrows; row++) pinmode(rowpins[row],input); // Set row pins as input // digitalwrite(rowpins[row],high); // turn on Pull-ups for (int column = 0; column < numcols; column++) pinmode(colpins[column],output); // Set column pins as outputs for writing digitalwrite(colpins[column],low); // Make all columns inactive void loop() char key = getkey(); if( key!= 0) // if the character is not 0 then it's a valid key press Serial.print("Got key "); Serial.println(key); char getkey() // returns with the key pressed, or 0 if no key is pressed char key = 0; // 0 indicates no key pressed for(int column = 0; column < numcols; column++) digitalwrite(colpins[column],high); // Activate the current column. for(int row = 0; row < numrows; row++) // Scan all rows for a key press. if(digitalread(rowpins[row]) == HIGH) // Is a key pressed? delay(debouncetime); // debounce while(digitalread(rowpins[row]) == HIGH) ; // wait for key to be released key = keymap[row][column]; // Remember which key was pressed. digitalwrite(colpins[column],low); // De-activate the current column. return key; // returns the key pressed or 0 if none Side 27 af 54

28 Termoprinter: Lav et program, der fx når der trykkes på en knap sendes en tekst til termoprinteren. Baudrate = Protokol: ID = 8Ah, dernæst sendes tekst som ASCII, og der afsluttes med CR, Carriage Return, eller End of String. = 0Dh. /* Programeksempel til at skrive på termoprinteren The circuit: * RX is digital pin 10 (connect to TX of other device) * TX is digital pin 11 (connect to RX of other device) */ #include <SoftwareSerial.h> SoftwareSerial myserial(10, 11); // RX, TX ( myserial er blot et navn, der kan sagtens // laves flere virtuelle UARTS, ex: // SoftwareSerial portone(7,8); // SoftwareSerial termoprinter(5,6); byte rx = 10; // byte tx = 11; void setup() Serial.begin(9600); // Open serial communications and wait for port to open: while (!Serial) ; // wait for serial port to connect. Needed for Leonardo only // pinmode(rx,input); pinmode(tx,output); digitalwrite(tx,high); delay(500); Serial.println("Hej!"); myserial.begin(1200); delay(500); myserial.write( 0x8A ); delay(100); // i Debug vinduet: // set the data rate for the SoftwareSerial port // ID for Termoprinter Side 28 af 54

29 myserial.write ("Davs"); delay(100); myserial.write( 0x0D ); delay(100); Serial.println("Sendt"); // Skriv tekst // Terminate string og start skrivning // i debugvinduet void loop() // run over and over Pernille-display Kittet Pernille, der kan vise 2 tal i 2 7-segmenter, er styret af en ATMEL 8051-familie uc. Det er bygget så det kan modtage serielle data fra omverdenen ved 1200 Baud. Lav et program, der tæller op på displayet. Fx hver gang der trykkes på en knap, eller få displayet til at vise fortløbende sekunder. Kittes ID er 8Bh Diagrammet viser hvordan systemet er forbundet! 5 Volt + 12 Volt 5 Volt R2 BC327 BC327 R1 R3 R4 Q3 Q4 P3.3 Q1 Q2 BC337 P3.7 BC Protokol: Data skal modtages serielt!! f a g b Der sendes først en ID = 8Bh, og dernæst to byte med først 10-ere så 1-ere i low nibble. e d c 1200 Baud. Design1, 20/8-12 ULN2003 *abf gcde Microcontroller Obs: I stedet for myserial kan man navngive objektet fx pernilleserial. Side 29 af 54

30 Hvis den værdi, der skal sendes serielt har værdien 0, forstår compileren det ikke. Derfor skal man fortælle den, at det er byte-værdien af et tal, der skal sendes. Eks: pernilleserial.write ((byte)i); // (byte skal skrives fordi 00h ikke kendes af // compileren. /* Programeksempel til at sende til Pernillekittet. Der skal sendes en ID = 8B efterfulgt af to bytes, tal fra 0 til 9 * RX is digital pin 10 (connect to TX of other device) * TX is digital pin 11 (connect to RX of other device) */ #include <SoftwareSerial.h> SoftwareSerial myserial(10, 11); // RX, TX pernilleserial i stedet ) ( kald evt. myserial for byte rx = 10; // Pins for RxD, Recieve Data, byte tx = 11; // Pin for TxD, Transmit Data. void setup() Serial.begin(9600); // Open serial communications and wait for port to open: while (!Serial) ; // wait for serial port to connect. Needed for Leonardo only // pinmode(rx,input); pinmode(tx,output); digitalwrite(tx,high); delay(500); Serial.println("Hej!"); // i Debug vinduet: myserial.begin(1200); // set the data rate for the SoftwareSerial port delay(500); void loop() // run over and over myserial.write( 0x8B ); // ID for Pernille myserial.write (0x03); // 10ere sendes myserial.write (0x07); // 1ere sendes delay(2000); // myserial.write( 0x8B ); // ID for Pernille myserial.write (0x09); myserial.write (0x05); // Side 30 af 54

31 delay(2000); // Der er et problem med at sende en seriel 0x00 /* Programeksempel til at sende til Pernillekittet. Der skal sendes en ID = 8B efterfulgt af to bytes, tal fra 0 til 9 * RX is digital pin 10 (connect to TX of other device)!! Vigtigt! * TX is digital pin 11 (connect to RX of other device)!! Vigtigt! Revideret af Daniel Munk: */ #include <SoftwareSerial.h> SoftwareSerial pernilleserial(10, 11); // RX, TX ( kald evt. myserial for pernilleserial i stedet ) byte rx = 10; // Pins for RxD, Recieve Data, byte tx = 11; // Pin for TxD, Transmit Data. int i = 1; // Variabel for 10'ere int t = 1; // Variabel for 1'ere void setup() Serial.begin(9600); // Open serial communications and wait for port to open: while (!Serial) ; // wait for serial port to connect. Needed for Leonardo only // pinmode(rx,input); pinmode(tx,output); digitalwrite(tx,high); delay(500); Serial.println("Hej!"); // i Debug vinduet: pernilleserial.begin(1200); // set the data rate for the SoftwareSerial port delay(500); void loop() // run over and over for (i = 0x00; i <=0x09; i++) // 10'erne (i) skal starte i 0, tælle op til den er 9 og sættes til 0 igen Side 31 af 54

32 for (t = 0x00; t <=0x09; t++) // 1'erne (t) skal starte i 0, tælle op til den er 9 og sættes til 0 igen (t-for-loopet gør, at loopet kan gå videre til i-forloopet hvis den kommer over 9) pernilleserial.write( 0x8B ); // ID for Pernille pernilleserial.write ((byte)i); // 10ere sendes (byte skal skrives fordi 00h ikke kendes) pernilleserial.write ((byte)t); // 1ere sendes (byte skal skrives fordi 00h ikke kendes) delay(1000); RF-ID Se Cookbook, ca. side 206. Se speciel RF-ID kompendium!!!!! Se fx: RF-ID: Se: Når en tag kommer i nærheden af læseren, sender læseren 10 byte, dvs. 10 digit via dens UART til Arduinoens Rxd. Først sendes en start-karakter, dernæst 10 digit TAG-nummer, og endelig en end-karakter. ( måske er det flere bytes der sendes? ) Skriv tag-id på PC-skærmen i Debug-vinduet. Evt. i et LCD. Obs: der kan være forskel på benforbindelserne på de to modeller vi har af RDM630. Side 32 af 54

33 Forbindelserne til model RDM630: New! Interface Data output format for RF-ID læserne: bps,N,8,1 2. CHECKSUM: card 10byte DATA entire do XOR operation 02 10ASCII Data Characters Chechsum 03 Example: card number: 62E3086CED Output data:36h 32H 45H 33H 30H 38H 36H 43H 45H 44H CHECKSUM: (62h) XOR (E3h) XOR (08h) XOR (6Ch) XOR (EDh)=08h I nogle kilder ses at der kommer 14 byte. Dvs. at der fra RF-ID-en sendes 12 Byte. Byte nummer 1 er?? De næste 10 byte er kortets nummer. Hvert tal er gemt som ASCII. Dvs. at fx et 6-tal sendes som 36h. Sidste byte er en tjecksum, som giver læse-processoren mulighed for at tjekke, om den har læst korrekt. Sendes data til LCD hvordan skrives de så?? ( Char ) Side 33 af 54

34 Dot-Matrix display Der skal opbygges et system, der kan multiplexe et 5x8 dot matrix display. ( Cookbook ca. side 262 ) RC-Servomotor Styr en servomotor fra sketch på PC-en. ( Cookbook side ca. 296 ) En servomotor kan normalt dreje maximalt ca. 180 grader fra side til side, men der findes også motorer, der kan rotere kontinuerligt. Benforbindelser: BLACK Ground WHITE Control pin RED +4.8V power supply (+5V works well ) Indmaden i servomotoren ser således ud! Side 34 af 54

35 Blokdiagram: Her er vist et blokdiagram over indmaden i en servomotor. På akslen ud af motoren er der monteret et potentiometer. Denne giver en spænding fra 0 til 5 Volt, afhængig motorens position. Herved kan elektronikken vide, hvor motoren står. Kilde: Elektronikken i motoren skal styres af en Controller, der sender en række pulser til motoren. Pulserne omformes i motorens elektronik til et positionssignal, og motoren kører til en stilling, så forskellen mellem den indbyggede potentiometers feedback-spænding, og den ønskede position er nul. Side 35 af 54

36 Vha bredden på pulserne på controlledningen kan man bestemme motorens position. Pulserne skal gentages hver ca. 20 ms. Motorens position styres af pulsbredden på signalledningen. Motoren drejer fra den ene yderstilling til den anden hvis pulsernes bredde ændres fra 1mS til 2mS. Kilde: Brug det medfølgende Servo-motor-bibliotek til at styre servoer direkte. Mit Servokit kan evt. bruges. Det skal have data tilsendt serielt: Baud 1200 ID = 8Ch + 4 bytes. Motor 0 er venstre i bunden Motor 1 er venstre på armen Motor 2 er højre på armen Motor 3 er højre i bunden ( set fra uc-en. ) Side 36 af 54

37 Data sendes som xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx Hvor xxxxxxxx er værdier fra 1d til 180d. Data er: ID, Motor0, Motor1, Motor2, Motor3, Motor4 Servoerne starter med at bevæge sig ved Power_on. Men så snart der ankommer serielle data, går servoens uc over i et nyt program, der adlyder de modtagne komandoer. Hvis P3.5 er lav, hoppes direkte til styring kun med serielle data Hvis P3.4 er lav, køres alle motorer fra 1 til 180!! Stopur Opbyg 4 x 7-segment, med multiplex transistorer. Fx kan følgende diagram bruges. Evt. kan der bruges en ULN2003 til at trække strøm fra 7-segmenterne. 5 Volt P3.4 R1 1k Q1 BC327 P3.3 R2 1k Q2 BC327 P3.1 R3 1k Q3 BC327 P3.0 R4 1k Q4 BC327 D1 D2 D3 D4 D5 D6 D7 D1 D2 D3 D4 D5 D6 D7 D1 D2 D3 D4 D5 D6 D7 D1 D2 D3 D4 D5 D6 D7 LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 R5-11 a b f g c d e LCD. Se: Cookbook side 363. Side 37 af 54

38 Skitsen viser hvordan forbindelserne skal laves til LCD-modulet. På kittene er der lavet kontrastjustering. Potmeteret justerer spændingen på pin 3 for at justere skærmens contrast. Backlight er på vore LCD lagt på pin 15 og 16. Obs: Muligvis er BackLight plus og minus ombyttet på LCD-erne. Formodstanden for Backlight er vist for stor. Prøv med 47 ohm. På kittene er der lavet mulighed for at tænde og slukke Backlight. ( På den ene LCD virker Backlight ikke ) Her er der et andet diagram. Det er ikke nødvendigt med backlight i dagslys! Pinnumre på LCD er fra venstre pin 1 til 16. Pin 15 og 16 er til backlight. Husk formodstand, fx 47 ohm v. 5 Volt. Ang. egendefinerede karakterer på LCD: Se fx Der findes vist et include-bibliotek til danske karakterer i Arduino-IDE-en. Side 38 af 54

39 Ellers se min hjemmeside: Opgave: Brug programeksemplet herunder eller find eksemplet i Fil / Eksempler / LiquidCrystal / HelloWorld Skriv nu tekst til displayet i alle 4 linjer, efter 3 sekunder skal der skrives en ny tekst! Byg en tæller i programmet. Bland tekst og tællerværdi på LCD-en. /* LiquidCrystal Library - Hello World - Eksempel Demonstrates the use a 20x4 LCD display. The LiquidCrystal library works with all LCD displays that are compatible with the Hitachi HD44780 driver. There are many of them out there, and you can usually tell them by the 16-pin interface. This sketch prints "Hello World!" to the LCD and shows the time. The circuit: * LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 5 * LCD D5 pin to digital pin 4 * LCD D6 pin to digital pin 3 * LCD D7 pin to digital pin 2 * LCD R/W pin to ground * 10K resistor: * ends to +5V and ground * wiper to LCD VO pin (pin 3) This example code is in the public domain. */ #include <LiquidCrystal.h> // include the library code: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initialize the library with the numbers of the interface pins void setup() lcd.begin(20, 4); lcd.print("hello, world!"); // set up the LCD's number of columns and rows: // Print a message to the LCD. void loop() Side 39 af 54

40 lcd.setcursor(0, 1); // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.print(millis()/1000); // print the number of seconds since reset: For at cleare skærmen, kan følgende ordre bruges: lcd.clear(); // clear the screen Med følgende kode kan man indskrive en tekst i Debugvinduet på PC-en. void loop() // when characters arrive over the serial port... if (Serial.available()) // wait a bit for the entire message to arrive delay(100); // clear the screen lcd.clear(); // read all the available characters while (Serial.available() > 0) // display each character to the LCD lcd.write(serial.read()); Se: For at sætte flere LCD-displays på, se fx: Se eksempel på scrolling mm. Se god youtube tutorial: Multi LCD Side 40 af 54

41 Med blot 1 ekstra pin kan man tilslutte en LCD mere til Arduinoen. De 5 af ledningerne er fælles, det er kun Enable, der skal være separat for den LCD, man vil skrive til. // include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS, Ena, 4x data. LiquidCrystal lcd2(12, 10, 5, 4, 3, 2); void setup() lcd.begin(20, 4); // set up the LCD's number of rows and columns: lcd.print("hello, world!"); // Print a message to the LCD. lcd2.begin(20, 4); lcd2.print("hey, world!"); // Print a message to the LCD. lcd2.setcursor(0, 1); lcd2.print("it works!"); void loop() // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setcursor(0, 1); // print the number of seconds since reset: lcd.print(millis()/1000); Kilde: Side 41 af 54

42 Interrupts: Flg. Tegning viser, hvordan timer-interrupt-systemet i Controlleren er opbygget. Arduino Timer1 Interrupt-Opsætning CTC Mode Interrupt ( Clear Timer on Compare Match ) Enable Interrupt i TIMSK-reg: Timer Interrupt Mask register TIMSK1-Bit: [xxxx x, OCIE1B, OCIE1A, TOIE1] ATMEL AVR Enable Global Sei(); Interrupt interrupts (); Disable Cli(); nointerrupts (); ATMEGA328 ( Der er også en kanal B & C ) ( Kun Kanal A Clearer timeren ) Output Compare Register Timer Compare Value Eks: OCR1A = 15624; Timer Overflow Bit Flag TCNT1H Oscillator 16 MHz OCR1B Compare match: TIMSK1 = ( 1 << OCIE1A ); bitset(timsk1, OCIE1A); TIMSK1 = B ; OCR1A TCNT1L 16 Bit 16 Bit Timer/Counter 1H Timer/Counter 1L TCNT1 = 0; Preload: TCNT1 = 25324; Overflow: bitset(timsk1, TOIE1); TIMSK1 = B ; Frekvensdeler = Prescaler OCRnC OCRnB Bit Compare 1 TIMSK1 Sæt TOV1 Bit Reset Counter TIFR1 Sæt OCF1A bit Clock-pulser, f = ( osc / prescale ) Overflow Bit 0 Compare Bit 1 Timer/Counter Interrupt Flag Register Output Compare Interrupt Flag OCF1A og Overflov flag TOV1 cleares af hardware ved interrupt kald Ov erf low Vector ISR(TIMER1_OVF_vect) TCNT1 = 25324; Output Compare Vector ISR(Timer1_COMPA_Vect) Timer0 bruges til delay(); millis(); & micros(); Timer1 til servo(); Timer2 til tone(); Timer 0 & 2 er kun 8 bit Fra Pins TCCR1A TCCR1B Timer/Counter Control Register A/B Mode select registre [ CSxx = Clock Select bit ] [ WGMxx = Wave Generation Mode ] TCCR1B-Bit[xxxx WGM12, CS12, CS11, CS10 ] TCCR1B = ( 1 << WGM12 ); Turn on Compare ( CTC ) Mode TCCR1B = B ; ( Wave Generation Mode ) bitset(tccr1b, WGM12); bitset(tccr1b, CS10); // Vælg Prescaler bitset(tccr1b, CS12); TCCR1B = ( 1 << CS12 ) ( 1 << CS10 );// = 1024 TCCR1B = 0x05; // = 1024 [CS12, CS11, CS10] 000 Stop Timer 001 Divide by * Ekstern clock på T1 Definerede konstanter: CS10 = 0 CS11 = 1 CS12 = 2 WGM12 = 3 Rev: 14/ / Valle I Timer/Counter-registeret opsættes systemet til at Compare-mode ( ved at sætte bit 3, WGM12 i register TCCR1B ) eller Overflow-mode ( default? ). Og der vælges, hvilken frekvensdeler, der ønskes. Det sker med bit 0, 1 og 2, også i register TCCR1B. Oscillatorens frekvens kommer herefter gennem frekvensdeleren ( prescaleren ) og ind i en 16 bit tæller. Prescaleren skal vælges, så tælleren ikke får overflow ( > pulser ) mellem hver interrupt. I Compare registeret loades det tal, der tælles op til i perioden mellem interrupts. Når tælleren når op til den værdi, sættes et bit i TIFR1-registeret. Side 42 af 54

43 Hvis det tilsvarende bit i TIMSK1-registeret er sat, og den globale interrupt-bit er sat, udløses et interrupt. Automatisk sker nu, at Loop-programmet afbrydes, Tælleren nulstilles, Bittet i TIFR1-registeret resettes, og programdelen ISR(TIMER1_OVF_vect udføres. Eksempel på Counter Compare Match interrupt: /* Arduino timer/counter Compare Match "CTC" interrupt example Testet 8/ Valle */ #define LEDPIN 13 void setup() pinmode(ledpin, OUTPUT); // initialize Timer1 cli(); // disable global interrupts TCCR1A = 0; // set entire TCCR1A register to 0 TCCR1B = 0; // same for TCCR1B OCR1A = 15624; // set compare match register to desired timer count: TCCR1B = (1 << WGM12); // turn on CTC mode: // Vælg korrekt prescaler // TCCR1B = (1 << CS10); // set prescaler to 1 // TCCR1B = (1 << CS11); // set prescaler to 8 // TCCR1B = (1 << CS11) (1 << CS10); // Set prescaler to 64 // TCCR1B = (1 << CS12); // set prescaler to 256 TCCR1B = (1 << CS12) (1 << CS10); // Set prescaler to 1024 // og start timer TIMSK1 = (1 << OCIE1A); // enable timer compare interrupt: sei(); // enable global interrupts: void loop() // do some crazy stuff while my LED keeps blinking Side 43 af 54

44 ISR(TIMER1_COMPA_vect) digitalwrite(ledpin,!digitalread(ledpin)); // toggle pin. Eksempel på Counter overflow interrupt. /* Eksempel på Interrupt ved timer overflow. Valle / 8/ */ // #define ledpin 13 int timer1_startvalue; int sekund = 0; int minut = 0; int hun_delsekund = 0; volatile boolean flag = 0; //boolean flag = 0; void setup() // pinmode(ledpin, OUTPUT); Serial.begin(9600); while (!Serial) ; // wait for serial port to connect. Needed for Leonardo only // initialize timer1 nointerrupts(); TCCR1A = 0; TCCR1B = 0; // disable all interrupts // Set timer1_startvalue to the correct value for our interrupt interval timer1_startvalue = 64886; // preload timer MHz/256/100Hz //timer1_startvalue = 64286; // preload timer MHz/256/50Hz //timer1_startvalue = 34286; // preload timer MHz/256/2Hz // timer1_startvalue = 3036; // preload timer MHz/256/1Hz TCNT1 = timer1_startvalue; // preload timer Side 44 af 54

45 // Vælg prescaler og start timer. ( = betyder Bitwise or. ) // TCCR1B = (1 << CS10); // set prescaler to 1 // TCCR1B = (1 << CS11); // set prescaler to 8 // TCCR1B = (1 << CS11) (1 << CS10); // Set prescaler to 64 TCCR1B = (1 << CS12); // set prescaler to 256 // TCCR1B = (1 << CS12) (1 << CS10); // Set prescaler to 1024 TIMSK1 = (1 << TOIE1); interrupts(); // enable timer overflow interrupt // enable all interrupts ISR(TIMER1_OVF_vect) // interrupt service routine TCNT1 = timer1_startvalue; // gen-load timer1 // digitalwrite(ledpin, digitalread(ledpin) ^ 1); Toggle hun_delsekund++; flag = HIGH; if (hun_delsekund > 99) hun_delsekund = 0; sekund++; if (sekund > 59) sekund = 0; minut++; void loop() while(flag==low) // Wait til change!! Serial.print(minut); Serial.print(':'); if(sekund<10) Serial.print('0'); Serial.print(sekund); Serial.print(':'); if(hun_delsekund<10) Serial.print('0'); Serial.println(hun_delsekund); flag=0; // delay(1000); Se flere eksempler: Side 45 af 54

46 Eksempel på 2 Hz interrupt der bruger Counter Compare. /* Arduino: timer and interrupts Timer1 compare match interrupt example more infos: created by RobotFreak */ #define ledpin 13 void setup() pinmode(ledpin, OUTPUT); // initialize timer1 nointerrupts(); TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; // disable all interrupts OCR1A = 31250; // compare match register 16MHz/256/2Hz TCCR1B = (1 << WGM12); // CTC mode TCCR1B = (1 << CS12); // 256 prescaler TIMSK1 = (1 << OCIE1A); // enable timer compare interrupt interrupts(); // enable all interrupts ISR(TIMER1_COMPA_vect) // timer compare interrupt service routine digitalwrite(ledpin, digitalread(ledpin) ^ 1); // toggle LED pin void loop() // your program here... Timer 1 overflow interrupt eksempel: /* * Arduino: timer overflow interrupts * Timer1 overflow interrupt example * more infos: * */ #define ledpin 13 Side 46 af 54

47 void setup() pinmode(ledpin, OUTPUT); // initialize timer1 nointerrupts(); TCCR1A = 0; TCCR1B = 0; TCNT1 = 34286; TCCR1B = (1 << CS12); TIMSK1 = (1 << TOIE1); interrupts(); // disable all interrupts // preload timer MHz/256/2Hz // 256 prescaler // enable timer overflow interrupt // enable all interrupts ISR(TIMER1_OVF_vect) // interrupt service routine that wraps a user // defined function supplied by attachinterrupt TCNT1 = 34286; // preload timer digitalwrite(ledpin, digitalread(ledpin) ^ 1); // toggle LED pin void loop() // your program here... Opgaver, der mangler: HBro, Bipolar stepmotor, brug L293 Dil-kreds, eller L298, Se side 318. I2C, CB side 421 SPI, CB side 424 Extern EEPROM Radiomodul, CB side 460 Side 47 af 54

48 Radiosender model Let-Elektronik. Gyro, 3,3 Volt, side 224. SPI Bus: Infrarød fjernbetjening: Udvidelse af pinantal: Default har Arduino ikke mange pins til omverdenen, - men ved at anvende eksterne skifteregistre, kan man tilbygge flere outputs og / eller inputs: I IDE en er der indbygget biblioteker til at håndtere kredsene 74HC595 og 74HC165. Flere indgange kan opnås med kredsen: 74HC165 Se: Flere outputs med 74HC595 Opbyg og test udvidelse af uc en med et skifteregister. Side 48 af 54

49 Hvis der ikke er nok pins på processoren, er det muligt, vha. et eller flere skifteregistre, at tilføje flere pins. Med en 74HC595 kan der tilføjes flere outputs, med en 74HC165 flere inputs. Se evt. youtube: Se Her følger et par program-eksempler: //Pin Definitions //The 74HC595 uses a serial communication //link which has three pins int data = 2; int clock = 3; int latch = 4; void setup() pinmode(data, OUTPUT); pinmode(clock, OUTPUT); pinmode(latch, OUTPUT); void loop() int delaytime = 100; for(int i = 0; i < 256; i++) //runs once // run over and over again //delay between LED updates Side 49 af 54

50 updateleds(i); delay(delaytime); /* updateleds() - sends the LED states set * in value to the 74HC595 sequence */ void updateleds(int value) digitalwrite(latch, LOW); shiftout(data, clock, MSBFIRST, value); register digitalwrite(latch, HIGH); //Pulls the chips latch low //Shifts out 8 bits to the shift //Pulls the latch high displaying the data Se: //**************************************************************// // Name : shiftoutcode, Hello World // // Author : Carlyn Maw,Tom Igoe // // Date : 25 Oct, 2006 // // : 1.0 // // Notes : Code for using a 74HC595 Shift Register // // : to count from 0 to 255 // //**************************************************************** int latchpin = 8; int clockpin = 12; int datapin = 11; //Pin connected to ST_CP of 74HC595 //Pin connected to SH_CP of 74HC595 //Pin connected to DS of 74HC595 void setup() pinmode(latchpin, OUTPUT); pinmode(clockpin, OUTPUT); pinmode(datapin, OUTPUT); void loop() for (int j = 0; j < 256; j++) //count up routine digitalwrite(latchpin, LOW); //ground latchpin and hold low for as long as transmitting shiftout(datapin, clockpin, LSBFIRST, j); // Transmit digitalwrite(latchpin, HIGH); //return the latch pin high delay(1000); Side 50 af 54

51 Kaskadekobling af skifteregistere, 74HC595 Se: Eksempel: Side 51 af 54

52 Flere input med 74HC165 74HCT165 are 8-bit parallel-load or serial-in shift registers Se eksempel: Se: Side 52 af 54

53 Her er vist et eksempel på, hvad man kan bruge en skifteregistereudvidelse af en uc til. Kilde: Kaskadekobling af to 8-bit skifteregistere MISO star for Master In, Slave Out. Det er den pin, der forbindes til Data in på uc en. Side 53 af 54

Arduino opgaver Teknologi

Arduino opgaver Teknologi : I dette dokument er der inspiration til en række programmerings-opgaver til Arduino. Opgaverne bliver i nogen grad sværere og sværere op gennem opgavenumrene. Opgaverne kan laves ved at opbygge kredsløb

Læs mere

Arduino opgaver. I dette dokument er der inspiration til en række programmerings-opgaver til Arduino.

Arduino opgaver. I dette dokument er der inspiration til en række programmerings-opgaver til Arduino. : Hyperlinks til forskellige opgaver: #Binære_tal, #Knightrider, #Dot_Matrix-display, #Fra_Debug_vindue_til_Ardu, #Hej_mor, #Pernille, #Interrupts, #Keypad, #LCD, #Morse, #Potentiometer, #RF_ID, #RGB,

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

Fra programmering til mikroprocessor

Fra programmering til mikroprocessor Programmering for begyndere Brug af Arduino Fra programmering til mikroprocessor EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Programmerings kursus Sidste gang (Introduktion)

Læs mere

const int disponibel_10= 10; const int disponibel_11= 11; const int disponibel_12= 12; const int blinkled = 13; // pin 13 er LED på NANO

const int disponibel_10= 10; const int disponibel_11= 11; const int disponibel_12= 12; const int blinkled = 13; // pin 13 er LED på NANO Styring_af_analog_repeater_OZ1LN_07-04-2018_v_1_07 device Arduino NANO fra v 1.06_j kræves Starttid bærebølge for valid pilottone ved start fra v 1.06_j kræves ResetTid uden bærebølge ved genstart efter

Læs mere

Arduino opgaver. For at få hjælp til at lave opgaverne, brug Arduino-kompendiet, eller søg på nettet!

Arduino opgaver. For at få hjælp til at lave opgaverne, brug Arduino-kompendiet, eller søg på nettet! : Samlede opgaver til teknologi og El-teknik Hop til opgave: Find hjælp, Indledning, Kit Vers.1, Kit Vers.2, Blinkende lysdioder, Input fra knap, Intern Pullup, If Else, Variabel blinkfrekvens, For-Loop,

Læs mere

Internt interrupt - Arduino

Internt interrupt - Arduino Programmering for begyndere Brug af Arduino Internt interrupt - Arduino - Afslutning EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Intern interrupt Jeg vil rydde lidt op. Her er nogle punkter vil har glemt

Læs mere

LCD intro. LCD Character display-intro. Redigeret 4/6-2019

LCD intro. LCD Character display-intro. Redigeret 4/6-2019 LCD Character display-intro Parallel interface, Forbindelsesdiagram, Ram & Rom-struktur, Biblioteksfunktioner til at styre LCD-skærmen, Lcd.Print vs Lcd.Write, Selvdefinerede karakterer, herunder æ, ø

Læs mere

Example sensors. Accelorometer. Simple kontakter. Lysfølsomme. modstande. RFID reader & tags. Temperaturfølsomme. Flex Sensor.

Example sensors. Accelorometer. Simple kontakter. Lysfølsomme. modstande. RFID reader & tags. Temperaturfølsomme. Flex Sensor. Simple kontakter Accelorometer Example sensors Lysfølsomme modstande RFID reader & tags Temperaturfølsomme modstande Flex Sensor Ultralyds afstandsmåler Piezo Pressure/vibration Piezo Sound/buzzer Peltier

Læs mere

Microcontroller, Arduino

Microcontroller, Arduino Microcontroller, Arduino Programmerbar elektronik. uc Vi skal lære at lave programmer til uc for at kunne lave el-produkter. Forstå princippet i programmering af en uc og se mulighederne. Programmeringen

Læs mere

Arduino Programmering

Arduino Programmering Microcontroller, Arduino I teknologi skal vi lære at lave programmer til uc for at have muligheden til eksamen at kunne lave intelligente el-produkter. I hvert fald skal vi have set mulighederne, og forstået

Læs mere

LCD Character display Intro

LCD Character display Intro LCD Character display Intro Der findes flere typer af LCD karakter-displays, fra forskellige firmaer. Her er vist en type, der er blå. Pins: Nummer 1 fra venstre Her er vist en nærmere beskrivelse af de

Læs mere

Arduino opgaver Teknologi

Arduino opgaver Teknologi : Hop til opgave: Blink, Blinkende lysdioder, Input fra knap, RGB-Kit, LED-Cube, LCD-Display, Debug-vindue, LED styret af Potentiometer, Mål temperatur, Ur-Program, Termoprinter, RF-ID, Servomotor, Timer-interrupt,

Læs mere

Arduino opgaver Teknologi

Arduino opgaver Teknologi : Hop til opgave: Blink, Blinkende lysdioder, Input fra knap, RGB-Kit, LED-Cube, LCD-Display, Debug-vindue, LED styret af Potentiometer, Mål temperatur, Ur-Program, Termoprinter, RF-ID, Servomotor, Timer-interrupt,

Læs mere

Arduino kursus lektion 3:

Arduino kursus lektion 3: Arduino kursus lektion 3: I denne lektion skal vi lave få en diode til at fade op og ned! Herefter skal denne diode bruges sammen med en lysføler til at lave en smart lysfølsom diode som selv justere lyset

Læs mere

Microcontroller, Arduino

Microcontroller, Arduino Microcontroller, Arduino Kompendium til Arduino-programmering i Teknologi. Vi skal lære at lave programmer til uc for at kunne lave el-produkter. Vi skal forstå princippet i programmering af en uc og se

Læs mere

Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK Programmering for begyndere Brug af Arduino Programmeringskursus Interrupt - Arduino EDR Hillerød Knud Krogsgaard Jensen / OZ1QK Interrupts Programmeringskursus Genbrug Interrupts Betyder blot at man afbryder

Læs mere

danske karakterer på Lcd

danske karakterer på Lcd Arduino og LCD ( 16/3-13 ) Når Arduinoen kobles til et LCD-display, kan man ikke umiddelbart skrive de danske karakterer æ, ø og å. Bag hver karakterplads i LCD-en er der en 8-bit RAM. Hvis der skrives

Læs mere

Arduino Programmering

Arduino Programmering Microcontroller-programmering med Arduino I teknologi skal vi lære at lave programmer til en microcontroller for at have muligheden til eksamen at kunne lave intelligente el-produkter. I hvert fald skal

Læs mere

Løkkestrukturer mm. Trykknap: Button, Se eksempler / Digital / Button. Decision: If: Version 05/ Arduino, Loops, løkker, programfunktioner mm.

Løkkestrukturer mm. Trykknap: Button, Se eksempler / Digital / Button. Decision: If: Version 05/ Arduino, Loops, løkker, programfunktioner mm. Arduino, Loops, løkker, programfunktioner mm. Links til følgende i dokumentet: Trykknap If, If else, If Else If While, Do While For-Loop Break, PWM Serial Read Funktioner og subrutinerr Switch Case Random

Læs mere

Lektion 6 / Analog Arduino

Lektion 6 / Analog Arduino 1 Jeremiah Teipen: Electronic Sandwich BSPR11 Lektion 6 / Analog Arduino Mogens Jacobsen / moja@itu.dk Siden sidst 2 Har I fået nogle LEDs til at blinke? Har I brugt kontakter? Hvad har I eksperimenteret

Læs mere

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering... Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering... 3 Kildekoden... 4 Variabler... 4 Setup... 4 Loop... 4 Indledning

Læs mere

Der er derfor, for at alle kan sende, kun tilladt, at sende intermitterende. Altså korte pakker. ( Dette skal dog verificeres!!)

Der er derfor, for at alle kan sende, kun tilladt, at sende intermitterende. Altså korte pakker. ( Dette skal dog verificeres!!) MHz KIT Rev: /- Det er ikke tilladt, at man bare udsender radiobølger på den frekvens, man ønsker. Forskellige frekvenser er udlagt til forskellige formål. Nogle til politiet, militæret, FM-radio-transmission,

Læs mere

Delay(100); Man skriver fx blot delay(100); for at få Microcontrolleren til at vente 100 ms inden programmet fortsætter.

Delay(100); Man skriver fx blot delay(100); for at få Microcontrolleren til at vente 100 ms inden programmet fortsætter. Funktionen delay() Funktionen delay() er ofte praktisk at bruge i et program i Arduino-verdenen. Man skriver fx blot delay(100); for at få Microcontrolleren til at vente 100 ms inden programmet fortsætter.

Læs mere

Ved indkøring påtrykkes en kendt amplitude (HUSK 50 ohms afslutning) og displayet aflæses.

Ved indkøring påtrykkes en kendt amplitude (HUSK 50 ohms afslutning) og displayet aflæses. /* Power Meter 2012 /* Rettet den 13.februar 2013 /* Version 1.2 /* Input medie er en AD8307, som forsynes fra Arduino Uno stabiliserede 5 volt. A/D input er på Arduino analog input pin A0 AREF er tilført

Læs mere

TinkerCad - Arduino simulator

TinkerCad - Arduino simulator TinkerCad - Arduino simulator Dokument fra H.C.Ørsted Gymnasiet, delt i HTX-Strømspassergruppen. ( Lidt modificeret / Valle ) På tinkercad.com kan man både arbejde med 3D emner, men også elektroniske kredsløb.

Læs mere

RF-ID Kompendium. RF-ID & Radio control. Dette kompendium indeholder materiale om RF-ID. Materialet er meget foreløbigt.

RF-ID Kompendium. RF-ID & Radio control. Dette kompendium indeholder materiale om RF-ID. Materialet er meget foreløbigt. Senest redigeret 8. april 2014 RF-ID Kompendium Dette kompendium indeholder materiale om RF-ID Materialet er meget foreløbigt. Derfor modtages rettelser og forslag meget gerne. ------------------------

Læs mere

ARDUINO PROGRAMMERING

ARDUINO PROGRAMMERING ARDUINO PROGRAMMERING Teknologisk Institut Opgaver i programmering af Arduino Indholdsfortegnelse Kapitel 1... 2 Arduino Uno mikrokontroller... 2 Digitalt signal... 3 Analogt signal... 3 Arduino Uno Specifikationer...

Læs mere

Programmeringskursus Kursusaften 3. Programmering for begyndere Brug af Arduino. Display. Kursusaften 3 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Programmeringskursus Kursusaften 3. Programmering for begyndere Brug af Arduino. Display. Kursusaften 3 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK Programmering for begyndere Brug af Arduino Programmeringskursus Display EDR Hillerød Knud Krogsgaard Jensen / OZ1QK Programmering for begyndere Brug af Arduino Programmeringskursus Sidste gang havde vi

Læs mere

Port & Bitmanipulation

Port & Bitmanipulation Port & Bit-manipulation i Arduino: Links til afsnit i dokumentet: Indledning Sammenhæng mellem Arduino pins og porte Portregistre Skriv_til_port / Variabel Læs port / SFR bitset bitclear bitwrite BitRead

Læs mere

Løkkestrukturer mm. Trykknap: Button, Se eksempler / Digital / Button. Decision: If: Version 08/ Arduino, Loops, løkker, programfunktioner mm.

Løkkestrukturer mm. Trykknap: Button, Se eksempler / Digital / Button. Decision: If: Version 08/ Arduino, Loops, løkker, programfunktioner mm. Arduino, Loops, løkker, programfunktioner mm. Links til følgende i dokumentet: Trykknap If, If else, If Else If While, Do While For-Loop PWM Serial Read Funktioner og subrutinerr Switch Case Random number,

Læs mere

Intro til AVR. Mads Pedersen, OZ6HR mads@oz6hr.dk

Intro til AVR. Mads Pedersen, OZ6HR mads@oz6hr.dk Intro til AVR Mads Pedersen, OZ6HR mads@oz6hr.dk Projektidé Brug en AVR-microcontroller Mål temperatur vha. temperatursensor Vis på display Send til computer og vis temperatur Slide 2 Plan 27/10-2005:

Læs mere

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B Udarbejdet af: Mathias R W Sørensen, klasse 3.4 Udleveringsdato: 02-03-2012 Afleveringsdato: 11-05-2012 IT-vejleder: Karl G. Bjarnason

Læs mere

Analoge indgange og A/D konvertering. Analoge udgange

Analoge indgange og A/D konvertering. Analoge udgange Programmering for begyndere Brug af Arduino Programmeringskursus Analoge indgange og A/D konvertering Analoge udgange Knud Krogsgaard Jensen OZ1QK Oversigt Oversigt over i aften: A/D konvertering iterations

Læs mere

GSM SMS Modem MODEL: SA RTU-1 V1.01

GSM SMS Modem MODEL: SA RTU-1 V1.01 GSM SMS Modem MODEL: SA RTU1 V1.01 Brugervejledning Indgange: Der er fire indgange på modulet. De kan programmeres som normale indgange. De kan programmeres som tæller. Udgange: Der er en udgang på modulet

Læs mere

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1 Project Step 7 Behavioral modeling of a dual ported register set. Copyright 2006 - Joanne DeGroat, ECE, OSU 1 The register set Register set specifications 16 dual ported registers each with 16- bit words

Læs mere

E-PAD Bluetooth hængelås E-PAD Bluetooth padlock E-PAD Bluetooth Vorhängeschloss

E-PAD Bluetooth hængelås E-PAD Bluetooth padlock E-PAD Bluetooth Vorhängeschloss E-PAD Bluetooth hængelås E-PAD Bluetooth padlock E-PAD Bluetooth Vorhängeschloss Brugervejledning (side 2-6) Userguide (page 7-11) Bedienungsanleitung 1 - Hvordan forbinder du din E-PAD hængelås med din

Læs mere

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato:

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato: Side 1 af 13 Dato: 03-06-03 Til Sigurd Som aftalt får du nu tilbygningen til 80C535 kittet, keyboard og programmet med programopdatering. Den sidste opgave her, gik så ud på at tilslutte et tastatur, og

Læs mere

I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET

I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET Mandag den 14 januar 2013 I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET OZ1QK Knud Krogsgaard Jensen 1 ARDUINO I 2 C - BUSSEN ELLER?? Plan for I aften: Jeg siger noget i 10 minutter I fortæller lidt om

Læs mere

Indholdsfortegnelse:

Indholdsfortegnelse: Dataopsamling Klaus Jørgensen Gruppe. Klaus Jørgensen, Jacob Clausen Og Ole Rud Erhvervs Akademi Fyn Allegade 79 Odense C 5000 fra d 2/12-02 til d 20/12-02 Vejleder: SKH. Forord: Denne rapport omhandler

Læs mere

Arduinostyret klimaanlæg Afsluttende projekt programmering C

Arduinostyret klimaanlæg Afsluttende projekt programmering C Arduinostyret klimaanlæg Afsluttende projekt programmering C Udarbejdet af: Mathias R W Sørensen, klasse 3.4 Udleverings-dato: 02-03-2012 Afleverings-dato: 11-05-2012 Programmeringvejleder: Karl G. Bjarnason

Læs mere

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4. APPETITVÆKKEREN OZ6YM, Palle A. Andersen Efteråret 2017 Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4. DEMO-video

Læs mere

Projekt - RoboNet Del Journal.

Projekt - RoboNet Del Journal. Projekt - RoboNet Del Journal. Udarbejdet af: Klaus Jørgensen. Gruppe: Jacob Clausen, Klaus Jørgensen og Ole Rud It og Elektronikteknolog, 2a Erhvervsakademiet Fyn Udarbejdet i perioden: 20/01-03 03/02-03

Læs mere

TM4 Central Station. User Manual / brugervejledning K2070-EU. Tel Fax

TM4 Central Station. User Manual / brugervejledning K2070-EU. Tel Fax TM4 Central Station User Manual / brugervejledning K2070-EU STT Condigi A/S Niels Bohrs Vej 42, Stilling 8660 Skanderborg Denmark Tel. +45 87 93 50 00 Fax. +45 87 93 50 10 info@sttcondigi.com www.sttcondigi.com

Læs mere

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007 Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan i dag Afrunding af OZ3VB's program Fra "almindelig C" til "microcontroller C" Lighederne

Læs mere

Optimering af fraværsregistrering

Optimering af fraværsregistrering Journal Optimering af fraværsregistrering Eksamensprojekt i Programmering C, klasse 3.4, 2011 AFLEVERET 09-05-2014 Indhold Abstract... Fejl! Bogmærke er ikke defineret. Problemformulering... 2 Produktet...

Læs mere

Netværk & elektronik

Netværk & elektronik Netværk & elektronik Oversigt Ethernet og IP teori Montering af Siteplayer modul Siteplayer teori Siteplayer forbindelse HTML Router (port forwarding!) Projekter Lkaa Mercantec 2009 1 Ethernet På Mars

Læs mere

Arduino. Processoren på kittet er fra Atmel, af AVR-familien, og hedder Atmega 328.

Arduino. Processoren på kittet er fra Atmel, af AVR-familien, og hedder Atmega 328. kompendium. Dette kompendium er ikke et forsøg på at være fyldestgørende, for at komme i gang med at programmere, men er en samling af informationer og tips. Og der er en række links til materialer på

Læs mere

Brug af digitale ind og udgange

Brug af digitale ind og udgange Programmering for begyndere Brug af Arduino Programmeringskursus Brug af digitale ind og udgange Oversigt over aftenen Digitale ind- og udgange Det er der ikke så meget i: Digitale indgange kan tænde og

Læs mere

TG 8. Indhold: TG8 - Kredsløbsbeskrivelse Gruppemedlemmer: Kim Andersen, Kasper Jensen & Thyge Mikkelsen Dato: Modtaget af: Søren Knudsen

TG 8. Indhold: TG8 - Kredsløbsbeskrivelse Gruppemedlemmer: Kim Andersen, Kasper Jensen & Thyge Mikkelsen Dato: Modtaget af: Søren Knudsen TG 8 EUC-Syd Sønderborg 6. Skoleperiode Elektronikmekaniker Indhold: TG8 - Kredsløbsbeskrivelse Gruppemedlemmer: Kim Andersen, Kasper Jensen & Thyge Mikkelsen Dato: 30 04-2002 Modtaget af: Søren Knudsen

Læs mere

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato: 14-05-2003

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato: 14-05-2003 Side 1 af 8 Dato: 14-05-2003 Til Sigurd Som aftalt vil jeg her fremsende vores program til vores 80C535 kit og display. Det gik jo ud på at vi skulle starte med at få den til at intialiserer displayet,

Læs mere

Video Projector Controller. Brugermanual

Video Projector Controller. Brugermanual Jægergårdsgade 152/05A DK-8000 Aarhus C DENMARK WWW.WAHLBERG.DK l Video Projector Controller Brugermanual WWW.WAHLBERG.DK TELEPHONE +45 86 18 14 20 CELL PHONE +45 40 52 20 88 EMAIL: mads@wahlberg.dk Feb

Læs mere

Analyseopgaver. Forklar kredsløbet. Forklar kredsløbet. 3.0 DC Adapter med Batteri Backup.

Analyseopgaver. Forklar kredsløbet. Forklar kredsløbet. 3.0 DC Adapter med Batteri Backup. Analyseopgaver. Simpel NiMH lader. Forklar kredsløbet.. Infrarød Remote Control tester Forklar kredsløbet.. DC Adapter med Batteri Backup. Der bruges en ustabiliseret Volt adapter. Den giver normalt ca.

Læs mere

IAI Quick Start Guide

IAI Quick Start Guide IAI Quick Start Guide Opsætning: Manualen til controllerene ligger i: Produkter\IAI\Manual\RoboCylinder\Controller\ Her ligger den i en undermappe alt efter hvilken type controller det er. Installer RCPC

Læs mere

ECE 551: Digital System * Design & Synthesis Lecture Set 5

ECE 551: Digital System * Design & Synthesis Lecture Set 5 ECE 551: Digital System * Design & Synthesis Lecture Set 5 5.1: Verilog Behavioral Model for Finite State Machines (FSMs) 5.2: Verilog Simulation I/O and 2001 Standard (In Separate File) 3/4/2003 1 ECE

Læs mere

MultiProgrammer Manual

MultiProgrammer Manual MultiProgrammer Manual MultiProgrammeren bruges til at læse og skrive værdier til ModBus register i LS Controls frekvensomformer E 1045. Dansk Version side 2 til 4 The MultiProgrammer is used for the writing

Læs mere

CANSAT & ARDUINO step by step

CANSAT & ARDUINO step by step CANSAT & ARDUINO step by step Jens Dalsgaard Nielsen SATLAB Aalborg Universitet Danmark jdn@space.aau.dk 1/51 Arduino CANSAT - MÅL At måle ved hjælp af sensor temperatur, tryk, acceleration, CO2, lys,...

Læs mere

Hvorfor & Hvordan lære Elever At programmere Arduinoer

Hvorfor & Hvordan lære Elever At programmere Arduinoer Hvorfor & Hvordan lære Elever At programmere Arduinoer Jens Dalsgaard Nielsen JDN / No.1 Teknologi konkurrencen IPADs, mobilos, HTC'er Medicentre JDN / No.2 IPAD, Iphone, HTC,... 1000 Mhz 8000000 kbyte

Læs mere

// inkluder library kode: #include <LiquidCrystal.h> #include <Serial.h> // Initialiser display LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// inkluder library kode: #include <LiquidCrystal.h> #include <Serial.h> // Initialiser display LiquidCrystal lcd(12, 11, 5, 4, 3, 2); /* OZ1HJR Program til styring af Mercury Motor SM-42BYG011-25 (ROB-09238) med EasyDriver V4.4 (ROB-10267). Når MS1 og MS2 begge er High, er et step (1.8 grader) opløst i 8 mikrostep. Et mikrostep svarer

Læs mere

//--------------------------------- Definition af porte og funktioner -------------------------

//--------------------------------- Definition af porte og funktioner ------------------------- Temeraturmåler (C-program).txt // Initialiserings-sekvens #include #pragma model=medium #pragma code=0x0000 #pragma xdata=0x4000 #pragma asm=on #pragma parameters=register //#define display P4

Læs mere

MCE2040 SERIEL KOMMUNIKATIONSMODUL

MCE2040 SERIEL KOMMUNIKATIONSMODUL Kokkedal Industripark 4 DK-2980 Kokkedal DANMARK Tlf.: +45 49 18 01 00 Fax: +45 49 18 02 00 MCE2040 SERIEL KOMMUNIKATIONSMODUL Overførsel af status og vægt for digitale vejeceller via simpel PC/PLC protokol

Læs mere

WT-1011RC Programmer User Guide

WT-1011RC Programmer User Guide WT-1011RC Programmer User Guide Firmware Version 1.9 Note: 1. Information in this manual is subject to change without notice and does not represent a commitment of manufacturer. 2. Manufacturer shall not

Læs mere

Mircobit Kursus Lektion 1

Mircobit Kursus Lektion 1 Mircobit Kursus Lektion 1 I denne lektie skal vi se nærmere på den lille mini computer kaldt microbit. Egentlig kræver det at man har en fysisk microbit men man kan også næsten lave det samme med den simulator

Læs mere

CANSAT & ARDUINO step by step

CANSAT & ARDUINO step by step CANSAT & ARDUINO step by step Jens Dalsgaard Nielsen SATLAB Aalborg Universitet Danmark jdn@space.aau.dk 1/45 Arduino CANSAT - MÅL At måle ved hjælp af sensor temperatur, tryk, acceleration, CO2, lys,...

Læs mere

QUICK START Updated: 18. Febr. 2014

QUICK START Updated: 18. Febr. 2014 QUICK START Updated: 18. Febr. 2014 For at komme hurtigt og godt igang med dine nye Webstech produkter, anbefales at du downloader den senest opdaterede QuickStart fra vores hjemmeside: In order to get

Læs mere

MP3 player med DMX interface.

MP3 player med DMX interface. Jægergårdsgade 152/05A DK-8000 Aarhus C DENMARK WWW.WAHLBERG.DK MP3 player med DMX interface. Funktion: En avanceret Mp3spiller med forskellige styringsmuligheder, velegnet til brug i museer, teatre, udstillinger

Læs mere

64 til BBC micro:bit en. :GAME Advarsel: TM. Kortets layout:

64 til BBC micro:bit en. :GAME   Advarsel: TM. Kortets layout: 64 er en programmerbar gamepad til BBC micro:bit. Den har 64 farvejusterbare lysdioder arrangeret i et 8 x 8-display, en piezobrummer til lydfeedback, en vibrationsmotor til haptisk feedback og 6 indgangsknapper.

Læs mere

Hvorfor & Hvordan lære. at programmere Arduinoer

Hvorfor & Hvordan lære. at programmere Arduinoer Hvorfor & Hvordan lære Jens Dalsgaard Nielsen at programmere Arduinoer JDN / No.1 http://es.aau.dk/staff/jdn/edu/courses/14-2/ars mine slides alle kodeeksempler Et C/arduino kursus http://es.aau.dk/staff/jdn/edu/courses/14-2/imperativ/

Læs mere

Andreas Nordbek & Kristoffer Skude Jensen. DMX Styring 31-05-2010. Side 1 af 15

Andreas Nordbek & Kristoffer Skude Jensen. DMX Styring 31-05-2010. Side 1 af 15 Andreas Nordbek & Kristoffer Skude Jensen DMX Styring 31-05-2010 Side 1 af 15 Indholdsfortegnelse 1 Indledning... 3 2 DMX... 4 3 Arkitektur... 5 4 Hardware design... 6 4.1 SPI... 9 5 Software... 10 5.1

Læs mere

AVR MP3 29-05-08 05576 Ingeniørhøjskolen i Århus Michael Kaalund

AVR MP3 29-05-08 05576 Ingeniørhøjskolen i Århus Michael Kaalund AVR MP3 29-05-08 Indholdsfortegnelse 1 Introduktion...2 2 Udviklingsmiljø...2 3 Beskrivelse af systemet...3 3.1 VS1001k...3 3.2 MP3 file formatet...6 4 Konklusion...6 5 Litteratur liste...6 6 Illustrations

Læs mere

Modeljernbane elektronik for begyndere...og dem der vil igang med at bygge deres egne dekodere

Modeljernbane elektronik for begyndere...og dem der vil igang med at bygge deres egne dekodere 2015 Modeljernbane elektronik for begyndere...og dem der vil igang med at bygge deres egne dekodere Dette dokument giver en grundlæggende indføring i standard elektronik komponenter og deres virkemåde,

Læs mere

Sådan forbindes Arduinoen via et fumlebræt til ATTiny45 chippen.

Sådan forbindes Arduinoen via et fumlebræt til ATTiny45 chippen. Arduino software: https://www.arduino.cc/en/main/software Klaus modeltog, det levende hus: http://www.moppe.dk/levhusel.html TV simulation: http://www.herberts-n-projekt.de/basteleien-1/belebtes-haus/

Læs mere

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU OUTLINE INEFFICIENCY OF ATTILA WAYS TO PARALLELIZE LOW COMPATIBILITY IN THE COMPILATION A SOLUTION

Læs mere

ELCANIC A/S. ENERGY METER Type ENG110. Version 3.00. Inkl. PC program: ENG110. Version 3.00. Betjeningsvejledning

ELCANIC A/S. ENERGY METER Type ENG110. Version 3.00. Inkl. PC program: ENG110. Version 3.00. Betjeningsvejledning ELCANIC A/S ENERGY METER Type ENG110 Version 3.00 Inkl. PC program: ENG110 Version 3.00 Betjeningsvejledning 1/11 Generelt: ELCANIC A/S ENERGY METER Type ENG110 er et microprocessor styret instrument til

Læs mere

WEA-Base Brugervejledning til vejetransmitter

WEA-Base Brugervejledning til vejetransmitter WEA-Base Brugervejledning til vejetransmitter Version 3.4 WEA-Base Brugervejledning til vejetransmitter WEA-Base Brugervejledning til vejetransmitter Version 3.4 Indholdsfortegnelse 1. Tekniske data...

Læs mere

Alt elektronik heri er købt via http://dx.com, og arduino udviklingssoftware er hentet fra http://arduino.cc.

Alt elektronik heri er købt via http://dx.com, og arduino udviklingssoftware er hentet fra http://arduino.cc. Få-tiden-til-at-gå-[DIGITAL]-ur =============================== Copyright 2013, Richard Jørgensen. Alle ophavsretlige rettigheder frafaldet 2015. (Kopier og brug som du har lyst.) Forord: ===== Denne vejledning

Læs mere

uprocessorens hardware

uprocessorens hardware uprocessorens hardware 8080 Architecture Kernen i en processor er ALUen. Det er den som kan udfører simple regne operationer. De tal den arbejdermed gemmes i en række registre. Når et tal skal hentes eller

Læs mere

QUICK START Updated:

QUICK START Updated: QUICK START Updated: 24.08.2018 For at komme hurtigt og godt igang med dine nye Webstech produkter, anbefales at du downloader den senest opdaterede QuickStart fra vores hjemmeside: In order to get started

Læs mere

Manual IHC Kompatibelt SMS modem. Generel info:... 2 Controllere:... 2 Manualen... 2 Komandoer syntax... 2 Lysdioder... 2 Tilslutning:...

Manual IHC Kompatibelt SMS modem. Generel info:... 2 Controllere:... 2 Manualen... 2 Komandoer syntax... 2 Lysdioder... 2 Tilslutning:... Manual IHC Kompatibelt SMS modem. Modemmet er kompatibelt med LK IHC visual2 controllere. IHC er registreret varemærke hos LK, Schneider Electric. Generel info:... 2 Controllere:... 2 Manualen... 2 Komandoer

Læs mere

Portal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration

Portal Registration. Check Junk Mail for activation  . 1 Click the hyperlink to take you back to the portal to confirm your registration Portal Registration Step 1 Provide the necessary information to create your user. Note: First Name, Last Name and Email have to match exactly to your profile in the Membership system. Step 2 Click on the

Læs mere

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Programmering C Eksamensprojekt Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Indledning Analyse Læring er en svær størrelse. Der er hele tiden fokus fra politikerne på, hvordan de danske skoleelever kan

Læs mere

Quick Setup Guide SB168-ES og M7CL Dansk version

Quick Setup Guide SB168-ES og M7CL Dansk version Quick Setup Guide SB168-ES og M7CL Dansk version February, 2009 SB168-ES og M7CL Quick Setup Guide Beskrivelse af denne guide. Denne guide indeholder en hurtig og enkelt opsætning af M7CL med digital stagebox.

Læs mere

ELCANIC A/S Counter Type CNT150 Version 2.00 Inkl. PC programmet: Cnt150 Version 3.00 Betjeningsvejledning

ELCANIC A/S Counter Type CNT150 Version 2.00 Inkl. PC programmet: Cnt150 Version 3.00 Betjeningsvejledning ELCANIC A/S Counter Type CNT150 Version 2.00 Inkl. PC programmet: Cnt150 Version 3.00 Betjeningsvejledning Generelt: ELCANIC A/S COUNTER Type CNT150 er en microprocessor baseret tæller. Specielt designet

Læs mere

LCD Modul. Ved Power-on skal LCD-displayet initieres, og evt. indstilles til 4-bit kommunikation.

LCD Modul. Ved Power-on skal LCD-displayet initieres, og evt. indstilles til 4-bit kommunikation. Vejledning til LCD Karakter Modul, 2 x 16 karakter. På min hjemmeside findes en kodegenerator. Den er gaflet fra en tysk side. Generatoren kan generere koder til 8051-kompatible, og heriblandt koder til

Læs mere

Hvorfor & Hvordan lære Elever At programmere Arduinoer

Hvorfor & Hvordan lære Elever At programmere Arduinoer Hvorfor & Hvordan lære Elever At programmere Arduinoer Jens Dalsgaard Nielsen JDN / No.1 Teknologi konkurrencen IPADs, mobilos, HTC'er Medicentre JDN / No.2 IPAD, Iphone, HTC,... 1000 Mhz 8000000 kbyte

Læs mere

Projekt Træningsmaskine

Projekt Træningsmaskine Computer- og El-teknik A. Holstebro Tekniske Gymnasium - HTX Projekt Træningsmaskine Afleveret: Fredag d. 10/10-2008. Udarbejdet af: Bent Arnoldsen, Holstebro HTX. Gruppemedlem: Hjalmar Krarup Andersen,

Læs mere

SPIDER Quick guide. DATO: August 2017 FORHANDLER: WASYS A/S. Langebjergvænget Roskilde

SPIDER Quick guide. DATO: August 2017 FORHANDLER: WASYS A/S. Langebjergvænget Roskilde SPIDER Quick guide DATO: August 2017 FORHANDLER: WASYS A/S Langebjergvænget 18 4000 Roskilde +45 7221 7979 Indhold Om SPIDER... 3 Funktioner ved SPIDER... 3 Spændingsforsyning... 3 Installation og fysiske

Læs mere

RF-ID. Materialet er meget foreløbigt. Derfor modtages rettelser og forslag meget gerne Side 1 af 15. Redigeret 14/

RF-ID. Materialet er meget foreløbigt. Derfor modtages rettelser og forslag meget gerne Side 1 af 15. Redigeret 14/ Materialet er meget foreløbigt. Derfor modtages rettelser og forslag meget gerne. ------------------------ Side 1 af 15 RF ID står for Radio Frequency Identification. teknologien kendes fra fx Natløb.

Læs mere

Filnavn: main.c 17-05-2002

Filnavn: main.c 17-05-2002 /*Afgangsprojket Intelligent hus styringssystem med LAN. Hovedprogram til brug i PIC 16F628, placeret på slaveenhed. filnavn: dato: Funktion: fra master, main.asm 2/4-2002-2002 tk Kommunikerer med Master-PC,

Læs mere

X88. X88 er en GSM/SMS baseret fjernstyring med: 8 indgange 8 relæudgange Mulighed for temperaturføler

X88. X88 er en GSM/SMS baseret fjernstyring med: 8 indgange 8 relæudgange Mulighed for temperaturføler X88 X88 er en GSM/SMS baseret fjernstyring med: 8 indgange 8 relæudgange Mulighed for temperaturføler Let at betjene. Hurtig montering. Let konfiguration. Hurtig. Fleksibel. Passer i en alm gruppetavle.

Læs mere

STEVISON BLUETOOTH USB MICRO SD DAB+ FM DIGITAL RADIO

STEVISON BLUETOOTH USB MICRO SD DAB+ FM DIGITAL RADIO STEVISON BLUETOOTH USB MICRO SD DAB+ FM DIGITAL RADIO Model: HN13549 Vejledning Funktioner 1. INFO/MENU 2. ALARM 3. NULSTIL 4. VÆLG 5. MODE 6. SCAN 7. VENSTRE ( ) 8. HØJRE ( ) 9. BÆREGREB 10. DOT-MATRIX

Læs mere

Hardware dokumentation Skrevet af. Gruppen. Version 1.0

Hardware dokumentation Skrevet af. Gruppen. Version 1.0 Hardware dokumentation Skrevet af Gruppen. Version 1.0 Indholds fortegnelse 1. INDLEDNING...3 1.1. FORMÅL...3 1.2. VERSIONSHISTORIE...3 1.3. VALG AF HARDWARE...3 2. ADGANGS ENHED...4 2.1. FUNKTIONS DIAGRAM...4

Læs mere

DC-Motor Controller. Brugermanual

DC-Motor Controller. Brugermanual Forside Jægergårdsgade 152/05A DK-8000 Aarhus C DENMARK WWW.WAHLBERG.DK DC-Motor Controller Brugermanual Firmware V4.00 Produkt indhold 1 styreboks til styring af 1 DC-motor. 1 strømforsyning 100 240 volt

Læs mere

X88S. SMS fjernstyring til sommerhuse

X88S. SMS fjernstyring til sommerhuse X88S SMS fjernstyring til sommerhuse X88s er en GSM/SMS baseret fjernstyring med: 6 indgange 8 relæudgange 2 temperaturfølere Billig i drift, intet abonnement. Kan køre på taletidskort. Nem og hurtig montering.

Læs mere

R100APM Premier Rower COMPUTER

R100APM Premier Rower COMPUTER R100APM Premier Rower COMPUTER 1 LCD Display 130 x 58.5mm Liquid Crystal Display PULSE Display Viser din puls per minut (bmp) SPM Display Antal træk i minuttet LEVEL Display 1~16 Modstands-niveau BRUGER

Læs mere

Indholdsfortegnelse :

Indholdsfortegnelse : Udarbejdet af Kasper jensen EUC-Syd 4ES 10-3-2001 Indholdsfortegnelse : Indholdsfortegnelse :...2 Mikroprocessor general :...3 Mikroprocessors funktion :...3 AT89C4051 :...3 Programmering :...3 Assambler

Læs mere

WT-1011RC Programmer User Guide

WT-1011RC Programmer User Guide WT-1011RC Programmer User Guide Firmware Version 1.9 Note: 1. Information in this manual is subject to change without notice and does not represent a commitment of manufacturer. 2. Manufacturer shall not

Læs mere

NORDISK CONTROL A/S. FUNKTIONSBESKRIVELSE AF PORTSTYRING NC6005 3 X 400V 50Hz

NORDISK CONTROL A/S. FUNKTIONSBESKRIVELSE AF PORTSTYRING NC6005 3 X 400V 50Hz NORDISK CONTROL A/S FUNKTIONSBESKRIVELSE AF PORTSTYRING NC6005 3 X 400V 50Hz Portstyringen NC6005 er en CE-mærket universal 3-knaps styring interface for ABDL-Anlæg. Af primære funktioner kan nævnes: hukommelse

Læs mere

Start af nyt schematic projekt i Quartus II

Start af nyt schematic projekt i Quartus II Start af nyt schematic projekt i Quartus II Det følgende er ikke fremstillet som en brugsanvisning der gennemgår alle de muligheder der er omkring oprettelse af et Schematic projekt i Quartus II men kun

Læs mere