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