Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Gömülü Sistemler Final Çalışması
- ## Klasik Sorular
- 1. Asagıdaki gibi 2x2 led matrix baglayınırsa istenilen satır ve sutuna baglı ledi yakan program yazın.
- ```c
- const int rows[2] = {10, 11};
- const int cols[2] = {6, 5};
- void setup() {
- for (int i = 5; i <= 11; i++) {
- pinMode(i, OUTPUT);
- }
- }
- void turn_on(int row, int col) {
- for (int i = 0; i < 2; i++) {
- digitalWrite(rows[i], (i == row ? HIGH : LOW));
- digitalWrite(cols[i], (i == col ? LOW : HIGH));
- }
- }
- void loop() {
- i=intParse();
- j=intParse();
- turn_on(i, j);
- delay(200);
- }
- ```
- 2. Iki buttonla led baglanan sistemde 1. Butuna basınca yakan, ikinci buton basınca söndüren program yazınız.
- ```c
- byte pinLED1 = 12;
- byte button1 = 2;
- byte button2 = 3;
- int estadoLED1;
- void setup() {
- pinMode(pinLED1, OUTPUT);
- pinMode(button1, INPUT);
- pinMode(button2, INPUT);
- }
- void loop() {
- int buttondurum1 = digitalRead(button1); //led pin 2
- int buttondurum2 = digitalRead(button2); //led pin 3
- if (buttondurum1 == HIGH) //Birinci butona basıldıysa
- LEDdurum = HIGH;
- if (uttondurum2 == HIGH) //İkinci butona basıldıysa
- LEDdurum = LOW;
- //LED duruma gore yak veya söndür
- digitalWrite(pinLED1, LEDdurum);
- }
- ```
- 3. Potansiyometre degerine göre led parlaklıgını yazdıran program yazın.
- ```c
- int ledPin = 9; // LED pin 9 baglı
- int analogPin = 3; // potentiometer pin 3 baglı
- int val = 0; // potansiyometre okunan deger
- void setup()
- {
- pinMode(ledPin, OUTPUT); // sets the pin as output
- }
- void loop()
- {
- val = analogRead(analogPin); // read the input pin
- analogWrite(ledPin, val / 4); // potan okunan deger 0 -1023 arasındır, bunu 0-255 cevir
- // aynı işlem val = map(val, 0, 1023, 0, 255); ile de olur.
- }
- ```
- 4. Aşağıdaki sisteme gore LEDin parlaklığını azar azar artıran ve sonra azaltan program yazın.
- ```c
- /*
- Fading
- */
- int ledPin = 9;
- void setup(){
- // pini output olarak tanımlamaya gerek yok.
- }
- void loop(){
- for(int fadeValue = 0; fadeValue <= 255; fadeValue += 5) { //Parlıyor
- analogWrite(ledPin, fadeValue);
- delay(2);
- }
- for(int fadeValue = 255; fadeValue >= 0; fadeValue -= 5) { // Sönüyor
- analogWrite(ledPin, fadeValue);
- delay(2);
- }
- }
- ```
- 5. Rasgele üretilen bir sayıya göre baglı olan LED pinlerini yakan program yazın.
- ```c
- const int ledPin[] = {0,2,4,6,8,10,12,14,16}; //Led pinlerimiz
- int sayi1;
- int i;
- void setup(){
- for(i= 0; i < 9;i++){//Led pinlerimizi çıkış olarak ayarladık
- pinMode(ledPin[i], OUTPUT);
- }
- }
- void loop(){
- sayi1 = random() % 9; //ilk rastgele değer
- digitalWrite(ledPin[sayi1], HIGH); //ledi yaktık
- delay(100);
- digitalWrite(ledPin[sayi1], LOW); //ledi söndürdük
- ```
- 6. Potansiyometreden okunan deger kadar bekleyip led yakan ve sonduren programı yazınız.
- ```c
- //Rast gele yak söndür
- const int ledPin=2; //Led pini
- const int potPin = A0; //Pot pini
- int potdeger;
- int i;
- void setup(){
- pinMode(ledPin, OUTPUT);
- pinMode(potPin, INPUT); //Pot pini giriş olarak ayarladık
- }
- void loop(){
- potdeger = analogRead(potPin); //potansiyometreden değeri okuduk
- digitalWrite(ledPin, HIGH);
- delay(potdeger);
- digitalWrite(ledPin, LOW); //ledi söndürdük
- delay(potdeger);
- }
- ```
- 7. Okunan sıcaklık degerine göre eger sıcaklık 30 dereceden buyukse sık sık(200 mili saniye) blink, yoksa seyrek(1000 milisaniye) blink yapan program yazın.
- ```c
- float tempC;
- int tempPin = 0; // ısı sensoru 0 pine baglı
- int ledPin = 9; // LED pin 9 baglı
- void setup()
- {
- Serial.begin(9600);
- pinMode(ledPin, OUTPUT); // Led pin output
- }
- void loop()
- {
- tempC = analogRead(tempPin); // ısı sensor oku
- tempC = (5.0 * tempC * 100.0)/1024.0; // degeri santigrata cevir
- if tempC>30
- digitalrite)ledPin,HIGH);
- else
- digitalrite)ledPin,LOW);
- Serial.print((byte)tempC); //sıcaklıgı ekrana yazar
- delay(1000); //wait one second
- }
- ```
- 8. Beş adet LED ve bir potansiyometre bağlı sistemde, eğer potansiyometre değeri:
- * 0-200 (200 dahil) : Birinci LEDi yakan
- * 200-400 (400 dahil) : İkinci LEDi yakan
- * 400-600 (600 dahil) : Üçüncü LEDi yakan
- * 600-800 (800 dahil) : Dördüncü LEDi yakan
- * 800-1000 (1000 dahil) : Beşinci LEDi yakan prgramı tazın.
- ```c
- int analog = A2; //Analaog pini
- int led[] = {3,4,5,6,7,8}; //led pinleri
- int potdeger = 0;
- void setup(){
- for(int i= 1; i < 6 ; i++){
- pinMode(led[i], OUTPUT);
- }
- Serial.begin(9600);
- }
- void loop(){
- potdeger = 0;
- potdeger = analogRead(analog); //potdegeri analogdan atanır
- if(potdeger >= 0 && potdeger <= 200 ){ //sıra ile led ler yakılır
- digitalWrite(led[1],HIGH);
- digitalWrite(led[2],LOW);
- digitalWrite(led[3],LOW);
- digitalWrite(led[4],LOW);
- digitalWrite(led[5],LOW);
- }else if(potdeger <= 400 && potdeger >= 200){
- digitalWrite(led[1],LOW);
- digitalWrite(led[2],HIGH);
- digitalWrite(led[3],LOW);
- digitalWrite(led[4],LOW);
- digitalWrite(led[5],LOW);
- }else if(potdeger <= 600 && potdeger >= 400){
- digitalWrite(led[1],LOW);
- digitalWrite(led[2],LOW);
- digitalWrite(led[3],HIGH);
- digitalWrite(led[4],LOW);
- digitalWrite(led[5],LOW);
- }else if(potdeger <= 800 && potdeger >= 600){
- digitalWrite(led[1],LOW);
- digitalWrite(led[2],LOW);
- digitalWrite(led[3],LOW);
- digitalWrite(led[4],HIGH);
- digitalWrite(led[5],LOW);
- }else if(potdeger <=1000 && potdeger >= 800){
- digitalWrite(led[1],LOW);
- digitalWrite(led[2],LOW);
- digitalWrite(led[3],LOW);
- digitalWrite(led[4],LOW);
- digitalWrite(led[5],HIGH);
- }
- Serial.println(potdeger); //serial monitorden degeri okumak için
- delay(100);
- }
- ```
- 9. Sistemde biri yeşil diğeri kırmızı 2 LED ve 1 buton olsun. Butona her basıldığında bir LEDi yakıp diğerini söndüren program yazın.
- ```c
- int buttonPin=2; // Button Pini
- int greenLED=9; // Yeşil LED pini
- int redLED=10; // Kırmızı LED pini
- void setup(){
- pinMode(buttonPin, INPUT);
- pinMode(greenLED, OUTPUT);
- pinMode(redLED, OUTPUT);
- durum = HIGH;
- }
- void loop(){
- if (digitalRead(buttonPin)==HIGH){ // Butona basıldıysa
- digitalWrite(greenLED, durum); // yeşil LED durum sinyali
- digitalWrite(redLED, !durum); // kırmızı LED durum sinyali tersi
- durum = !durum;
- }
- }
- ```
- 10. Sıcaklık sensöründe okunan değere gore, eğer sıcaklık 34 dereceden buyukse ekrana “Sogutucu açın” yazıp LED yakani aksi halde ekrana “Normal calısıyor” yazıp LED söndüren program yazın.
- ```c
- void setup() {
- Serial.begin(9600);
- pinMode // ısı sensoru
- pinMode(9, OUTPUT);
- }
- void loop() {
- sicaklık =
- if ( sıcaklık > 34 ){
- Serial.Println(“Sogutucu açın”);
- digitalWrite(9, HIGH) ;
- delay(6000);
- }
- else
- { Serial.Println(“Normal calısıyor”);
- digitalWrite(9, LOW) ;
- delay(6000);
- }
- }
- ```
- 11. Işık sensorunden okunan değerlere gore LEDleri yakın, eğer değer:
- * 300 den kucukse birinci LEDi yakan
- * 300-350 arasındaysa birinci ve ikinci LEDi yakan
- * 350-400 arasındaysa birnci ikinci ve ucuncu LEDi yakan
- * 400 den buyukse 5 kere butun LEDleri yakıp ardından sonduren sinyal veren program yazınız.
- ```c
- int photoIn = 0; // photoresistor on Analogue Pin 1, ışık sensoru
- int led2 = 2; // LED on Digital Pin 2
- int led3 = 3;
- int led4 = 4;
- int aiValue = 0; // input value
- void setup()
- {
- Serial.begin (9600);
- pinMode(led2, OUTPUT); // Configure the Digital Pin Direction for the LED
- pinMode(led3, OUTPUT); // Configure the Digital Pin Direction for the LED
- pinMode(led4, OUTPUT); // Configure the Digital Pin Direction for the LED
- }
- void loop() {
- aiValue = analogRead(photoIn); // Analog değeri oku
- Serial.println (aiValue);
- delay(500);
- if (aiValue < 300)
- {
- digitalWrite(led2, HIGH); // It has got dark, turn the LED on.
- }
- if (aiValue > 300 && aiValue < 350)
- {
- digitalWrite(led2, HIGH);
- digitalWrite(led3, HIGH); // It has got dark, turn the LED on.
- }
- if (aiValue > 350 && aiValue < 400)
- {
- digitalWrite(led2, HIGH);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, HIGH);
- }
- if (aiValue > 400)
- {
- for (int x=0; x<5; x++)
- {
- digitalWrite(led2, HIGH);
- digitalWrite(led3, HIGH);
- digitalWrite(led4, HIGH);
- delay(200);
- digitalWrite(led2, LOW);
- digitalWrite(led3, LOW);
- digitalWrite(led4, LOW);
- delay(200);
- }
- }
- }
- ```
- 12. Verilen farklı sıralamalarda LEDleri yakınız, orneğin : {0, 1, 0, 1, 0, 1 } sıralamasında LED sırasıyla ilk led sonuk, sonraki yanık, sonraki sonuk, sonraki yanık olacak.
- ```c
- int LEDCOUNT = 6;
- int pwmLEDPins[6] = {3, 5, 6, 9, 10, 11};
- void setup() {
- Serial.begin(9600);
- for (int i = 0; i < LEDCOUNT; i++) {
- pinMode(pwmLEDPins[i], OUTPUT);
- }
- }
- void loop() {
- seqOne();
- seqTwo();
- turnAll(HIGH);
- delay(2000);
- }
- void seqOne() {
- int seqOne[6] = {0, 0, 0, 0, 0, 0 };
- for (int j = 0; j < 5; j++) {
- for (int i = 0; i < LEDCOUNT; i++) {
- digitalWrite(pwmLEDPins[i], seqOne[i]);
- delay(50);
- }
- }
- }
- void seqTwo() {
- int seqTwo[6] = {0, 1, 0, 1, 0, 1 };
- for (int j = 0; j < 5; j++) {
- for (int i = 0; i < LEDCOUNT; i++) {
- digitalWrite(pwmLEDPins[i], seqTwo[i]);
- delay(100);
- }
- }
- }
- void turnAll(int value) {
- for (int i = 0; i < LEDCOUNT; i++) {
- digitalWrite(pwmLEDPins[i], value);
- }
- }
- ```
- 13. “12 metreye” kadar ptansiyometre kontrollu bir digitalmetre yapılacaktır. Buna gore her metre için bir LED bağlanacaktır. Potansiyometre dondukce ilgili metreyi gosteren program yazınız.
- ```c
- int potPin = 0;
- int i = 0;
- void setup()
- {
- pinMode(1, OUTPUT);
- pinMode(2, OUTPUT);
- pinMode(3, OUTPUT);
- pinMode(4, OUTPUT);
- pinMode(5, OUTPUT);
- pinMode(6, OUTPUT);
- pinMode(7, OUTPUT);
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- pinMode(10, OUTPUT);
- pinMode(11, OUTPUT);
- pinMode(12, OUTPUT);
- }
- void loop()
- {
- for (i = 1; i<=12; i++);
- digitalWrite(i, LOW);
- int val = analogRead(potPin);
- int count = map(val, 0, 1023, 0, 12);
- for (i = 1; i<=12; i++)
- if (i<=count)
- {
- digitalWrite(i, HIGH);
- }
- else
- {
- digitalWrite(i, LOW);
- }
- }
- ```
- 14. Bir Digital thermometer yapılacaktır. Termometre 20 derecen itibaren 2ser 2ser ısı deregerlerini gosterecek 6 led baglanacaktır. Eger ısı 20-21 ise brinci LED, 22-23 ise birici ve ikinci, 24-25 ise birinci ikinci ve ucuncu….. program yazın.
- ```c
- float temperature;
- int sensorPin = 0;
- int startTemp=20;
- void setup()
- {
- Serial.begin(9600);
- for (int i=2;i<8; i++){ // output channels from 2 to 7
- pinMode(i,OUTPUT); // pin is a output
- }
- }
- void loop()
- {
- temperature = analogRead(sensorPin); // reading analog sensor value LM35
- temperature = temperature*0.488; // celcius
- for (int i=0;i<8; i++){
- if (temperature>((i*2)+startTemp)){
- digitalWrite(i,HIGH);
- }
- else {
- digitalWrite(i,LOW);
- }
- }
- Serial.println(temperature);
- delay(500);
- }
- ```
- 15. Ultraosnic sensörden değer okuyup, distance=(duration/2/29 formülü kullanarak measafe bulan, Eger mesafe degeri(distance) 7 den buyukse ekrana “ileri git ” yazdıran, Degilse ekrana “sola dön” yazdıran program yazınız.
- ```c
- duration = pulseIn(echoPin, HIGH);
- distance=(duration/2)/29.1;
- Serial.println(“”);
- Serial.println(distance);
- if(distance >7)
- {
- Serial.println(“ileri git”);
- }
- else // engel
- {
- Serial.println(“sola dön”);
- }
- }
- ```
- 16. Load cell sensöründen değer okuyup 20 lik dizide tutan ve ortalama değeri hesaplayan programı yazın.
- ```c
- readings[index] = analogRead(loadCell); // read from the sensor
- total= total + readings[index]; // add the reading to the total:
- index = index + 1; // advance to the next position in the array:
- if (index >= numReadings) // if we're at the end of the array wrap around to the beginning
- index = 0;
- Average = total / numReadings;
- ```
- 17. Seriporttan r,g,b degerleri string halinde gönderen ve sonra rgb ledde yaktıran kodu yazın:
- ```c
- void setup()
- {
- pinMode(kirmiziPin, OUTPUT);
- pinMode(yesilPin, OUTPUT);
- pinMode(maviPin, OUTPUT);
- Serial.begiin(9600);
- }
- void loop() {
- String readString;
- int commaIndex = myString.indexOf(',');
- int secondCommaIndex = myString.indexOf(',', commaIndex + 1);
- if (Serial.available() > 0) {
- if (Serial.available()) {
- char c = Serial.read(); //gets one byte from serial buffer
- if (c == '\n'') {
- String firstValue = myString.substring(0, commaIndex);
- String secondValue = myString.substring(commaIndex + 1, secondCommaIndex);
- String thirdValue = myString.substring(secondCommaIndex + 1); // To the end of the string
- int r = firstValue.toInt();
- int g = secondValue.toInt();
- int b = thirdValue.toInt();
- analogWrite(kirmiziPin, r);
- analogWrite(yesilPin, g);
- analogWrite(maviPin, b);
- }
- else {
- readString += c; //makes the string readString
- }
- // veya readbytes until veya readstring de kullanılabilir
- // String first = Serial.readStringUntil(',');
- // Serial.read(); //next character is comma, so skip it using this
- // String second = Serial.readStringUntil(',');
- // Serial.read();
- // String third = Serial.readStringUntil('\0');
- ```
- 18. Sekildeki gibi gaussmetre yazın.
- ```c
- /*
- GaussPlot
- (Miniature Radiometric Linear Hall Efect Sensor)
- Sensor connected to Analog channel 0.
- */
- #define XRANGE 50
- int x,gss;
- void setup(){
- Serial.begin(9600);
- }
- void loop(){
- int aValue =analogRead(0);
- x = map(aValue, 0, 1024, 0, XRANGE);
- gss = map(aValue, 102, 922, -640, 640);
- Serial.print("|");
- for (int i=0;i<x;i++){
- if(i==XRANGE/2-1)Serial.print("|");
- else Serial.print("-");
- }
- Serial.print("O");
- for (int i=x+1;i<XRANGE;i++){
- if(i==XRANGE/2-1)Serial.print("|");
- else Serial.print("-");
- }
- Serial.print("|");
- Serial.print(gss);
- Serial.println("Gauss");
- delay(100);
- }
- ```
- 19. Loadcell ile 10 tane okuma yapıp, ortalamsını veren kodu yazın:
- ```c
- /*
- Stage 1 sketch for the load cell
- Stage 1 simply sets up the load cell and take an analogue reading.
- */
- int loadCell = A1; //output from load cell
- int analogValue = 0;
- const int numReadings = 10; //determines the number of values in the rolling average
- int readings[numReadings]; // the readings from the analog input
- int index = 0; // the index of the current reading
- int total = 0; // the running total
- int rollingAverage = 0; // the rolling average reading
- void setup()
- {
- Serial.begin(9600);
- for (int thisReading = 0; thisReading < numReadings; thisReading++) //This need to be in the set-up section to aviod resetting the array in the loop
- readings[thisReading] = 0; // initialize all the readings in the array to 0
- }
- void loop(){
- analogValue = analogRead(loadCell);
- rollingReading();
- Serial.print(analogValue);
- Serial.print(", ");
- Serial.println(rollingAverage);
- delay(500);
- }
- void rollingReading() {
- total= total - readings[index]; // subtract the last reading
- readings[index] = analogRead(loadCell); // read from the sensor
- total= total + readings[index]; // add the reading to the total:
- index = index + 1; // advance to the next position in the array:
- if (index >= numReadings) // if we're at the end of the array wrap around to the beginning
- index = 0;
- rollingAverage = total / numReadings;
- // Serial.println(rollingAverage);
- delay(1); // delay in between reads for stability
- }
- ```
- 20. “2 nolu” interrupt pininden veri alıp kontrolet fonksiyonuna gidip …sıcaklık control edip led control eden interrupt yazın
- ```c
- int pin = 10;
- volatile int durum = LOW;
- void setup()
- { pinMode(pin, OUTPUT);
- digitalWrite(2, HIGH);
- attachInterrupt(0, kontrolet, FALLING);
- }
- void loop()
- { }
- void kontrolet()
- {
- if(durum == LOW) {
- durum = HIGH;
- } else {
- state = LOW;
- }
- digitalWrite(pin, state);
- }
- ```
- 21. Timer interrupt kullanarak bir ledi 1 er saniye aralıklarla yakıp söndürelim ve her 3 saniyede bir başka bir ledi yakıp söndürmek yada başka bir buton durumunu kontrol etmek istersek timer interruptlarını kullanırız.
- ```c
- #include <TimerOne.h>
- void setup()
- {
- pinMode(13, OUTPUT);
- Timer1.initialize(100000); // 1 saniyede tetiklenmesi
- Timer1.attachInterrupt( kontrolet );
- }
- void loop()
- { }
- void kontrolet()
- {
- // Toggle LED
- digitalWrite( 13, digitalRead( 13 ) ^ 1 );
- }
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement