Skip to content

Instantly share code, notes, and snippets.

@canokay
Created June 15, 2019 20:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save canokay/51d3ccfc4221e11a72c73accb043a1e4 to your computer and use it in GitHub Desktop.
Save canokay/51d3ccfc4221e11a72c73accb043a1e4 to your computer and use it in GitHub Desktop.

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.
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);
        }
  1. Iki buttonla led baglanan sistemde 1. Butuna basınca yakan, ikinci buton basınca söndüren program yazınız.
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);

}
  1. Potansiyometre degerine göre led parlaklıgını yazdıran program yazın.
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.
}
  1. Aşağıdaki sisteme gore LEDin parlaklığını azar azar artıran ve sonra azaltan program yazın.
/*
  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);                                                                            
  } 
}
  1. Rasgele üretilen bir sayıya göre baglı olan LED pinlerini yakan program yazın.
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
  1. Potansiyometreden okunan deger kadar bekleyip led yakan ve sonduren programı yazınız.
//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);
}
  1. 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.
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 
}
  1. 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.
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);
}
  1. 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.
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;
    } 
 }
  1. 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.
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); 
   }
}
  1. 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.

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);
    }
  }
}
  1. 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.
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);
  }
}
  1. “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.
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);
  }
    

}
  1. 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.
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);                             
}
  1. 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.
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”);
}
}
  1. Load cell sensöründen değer okuyup 20 lik dizide tutan ve ortalama değeri hesaplayan programı yazın.
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;      
  1. Seriporttan r,g,b degerleri string halinde gönderen ve sonra rgb ledde yaktıran kodu yazın:
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');
  1. Sekildeki gibi gaussmetre yazın.
/*
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);
} 
  1. Loadcell ile 10 tane okuma yapıp, ortalamsını veren kodu yazın:
/*
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            
}
  1. “2 nolu” interrupt pininden veri alıp kontrolet fonksiyonuna gidip …sıcaklık control edip led control eden interrupt yazın
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);
}
  1. 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.
#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 );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment