You are on page 1of 1

IME I PREZIME (velikim slovima): Arhitektura računalnih sustava, pismeni ispit, 20.2.2023.

1. Ispišite na ekran 8 analognih ulaza kao zarezom odvojene vrijednosti i znak enter na kraju. Kao rješenje je obvezno koristiti petlju za ispis.
2. Napišite program za blinkanje LED-ice s periodom od 1 s i to bez korištenja funkcije delay(). Koristite millis() ili Timer1 za računanje vremena.
3. Pomoću UART-a napišite program za postavljanje boje na RGB LED-ici. Pomoću serijske komunikacije se primaju R, G i B komponente.
4. Napišite program za blinkanje LED-ice. Stisak tipke na pinu 4 treba ubrzati treperenje za 20%, a stisak tipke na pinu 5 usporava za 20%.
5. Izmjerite vrijeme proteklo između dvije pojave interrupt-a na stisak tipke. Izmjereno vrijeme prikažite na ekranu u formatu "mm:ss:ms".

1. 4.

void setup() { #include "TimerOne.h"


Serial.begin(9600); volatile bool state;
} volatile long vrijeme;
void loop() { void setup() {
for(int i=0; i<7; i++) { // i = 0...6 vrijeme = 5e5; // 500 ms
Serial.print( Timer1.initialize(vrijeme);
String(analogRead(A0+i))+","); Timer1.attachInterrupt(blink);
} pinMode(13, OUTPUT); // LED
Serial.println(String(analogRead(A0+7))); pinMode(4, INPUT_PULLUP); // BTN1
delay(200); pinMode(5, INPUT_PULLUP); // BTN2
} }
void blink() {
digitalWrite(13, state = !state);
2. }
void loop() {
#include "TimerOne.h" if(digitalRead(4)==0) {
volatile bool state; Timer1.initialize(vrijeme*=1.2);
void setup() { delay(100); // debounce tipke
pinMode(13, OUTPUT); // LED }
Timer1.initialize(5e5); // 500 ms if(digitalRead(5)==0) {
Timer1.attachInterrupt(blink); Timer1.initialize(vrijeme*=0.8);
} delay(100); // debounce tipke
void blink() { }
digitalWrite(13, state = !state); }
}
void loop() {}
5.

3.
#include <TimerOne.h>
String str; volatile bool bInt;
void setup() { unsigned long ms = 0;
Serial.begin(9600); void setup() {
} Serial.begin(9600);
void loop() { pinMode(2,INPUT_PULLUP);
if(Serial.available()) { attachInterrupt(
char c = Serial.read(); digitalPinToInterrupt(2),tipka,RISING);
if(c=='\n') { }
int r,g,b; void tipka() {
sscanf(str.c_str(), bInt = true;
"%d,%d,%d",&r,&g,&b); }
analogWrite( 9,r); void loop() {
analogWrite(10,g); if(bInt) {
analogWrite(11,b); bInt = false;
str = ""; ms = millis() - ms;
} else { int ss = (ms/1000)%60;
str += c; int mm = ((ms/1000)/60)%60;
} int hh = (((ms/1000)/60)/60)%24;
} Serial.println(String(mm)+":"+
} String(ss)+":"+String(ms%1000));
ms = millis();
}
}

You might also like