Arama butonu
Bu konudaki kullanıcılar: 1 misafir
4
Cevap
1026
Tıklama
0
Öne Çıkarma
1 Arduino İle 2 Farklı Görev Yaptırma (Koda Müdahale Edebilir Misiniz ?
M
3 yıl
Yarbay
Konu Sahibi

Selamlar,

Arduino ile buton üzerinden buzzer çalıştırıyorum. Aynı zamanda farklı bir Arduinodan Lcd ekrana sıcaklık sensörü verisini yazdırıyordum. Fakat bu iki görevi tek bir arduino kartı ile yaptırmam gerekiyor. Lütfen kodlarıma gerekli müdahaleyi nasıl yapabilceğimi tarif edebilri misiniz ?



#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const int sensorPin = A0;
float sensorValue;
float voltageOut;

float temperatureC;

// uncomment if using LM335
//float temperatureK;
const int buttonPin = 3;   // the number of the pushbutton pin
int Buzzer1 = 11;

// variables will change:
int buttonState = 0;     // variable for reading the pushbutton status

void setup() {
 pinMode(sensorPin, INPUT);
 Serial.begin(9600);

 if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
  Serial.println(F("SSD1306 allocation failed"));
  for (;;);
 }

 delay(2000);
 display.clearDisplay();
 display.setTextColor(WHITE);
 // initialize the piezo as output:
 pinMode(Buzzer1, OUTPUT);
 // initialize the pushbutton pin as an input:
 pinMode(buttonPin, INPUT);
}



void loop() {
 sensorValue = analogRead(sensorPin);
 voltageOut = (sensorValue * 5000) / 1024;

 // calculate temperature for LM35 (LM35DZ)
 temperatureC = voltageOut / 10;

 // calculate temperature for LM335
 //temperatureK = voltageOut / 10;
 //temperatureC = temperatureK - 273;
 //temperatureF = (temperatureC * 1.8) + 32;

 // calculate temperature for LM34
 //temperatureF = voltageOut / 10;
 //temperatureC = (temperatureF - 32.0)*(5.0/9.0);

 Serial.print("MOTOR SICAKLIK(ºC): ");
 Serial.print(temperatureC);
 Serial.print("ERHAN DEMIR 2021");


 // clear display
 display.clearDisplay();

 // display temperature Celsius
 display.setTextSize(1);
 display.setCursor(0, 0);
 display.print("MOTOR SICAKLIGI: ");
 display.setTextSize(2);
 display.setCursor(0, 10);
 display.print(temperatureC);
 display.print(" ");
 display.setTextSize(1);
 display.cp437(true);
 display.write(167);
 display.setTextSize(2);
 display.print("C");

 // display temperature Fahrenheit
 display.setTextSize(2);
 display.setCursor(0, 35);
 display.print("Erhan   Demir 2021 ");
 display.setTextSize(2);
 display.setCursor(0, 45);


 display.display();
 delay(1000);

 // read the state of the pushbutton value:
 buttonState = digitalRead(buttonPin);

 if (buttonState == HIGH) {
  // play th Music
  tone(Buzzer1, 194, 200);
  delay(40);
  tone(Buzzer1, 94, 40);
  delay(40);
 }
}



A
3 yıl
Teğmen

Şu bağlantıdan yardım alabilirsin;

https://googledaariyim.com/?q=Arduino+assembly+dersleri



< Bu ileti iOS uygulamasından atıldı >
Bu mesaja 1 cevap geldi.
B
3 yıl
Binbaşı

oradan kendin bir yararlan önce belki nakil falan yaptırırsın.




Bu mesajda bahsedilenler: @Hate Fate
G
3 yıl
Yüzbaşı

Bu yazdığın koddaki eksik nedir ?



< Bu ileti Android uygulamasından atıldı >

S
3 yıl
Teğmen

koddaki delay satırlarından kurtul, arduino timerlarından birini zamanlama sinyali olarak kullan, örneğin her saniye bir bayrak değişkeni "1" yap. sonsuz döngünde uzun delay içeren kodları bu bayrak değişkene (veya değişkenlere) bağla ve ilgili kod çalıştığında bu bayrak değişkeni "0" yapsın ve "timer interrupt" kodunda "1" olarak güncellenene kadar çalışmasın. Örneğin:
-----------------------------------------
int lcdbayrak;

//interrupt kodu
{
lcdbayrak=1;
}

//loop kodu;

if(lcdbayrak>0)
{
//lcd ile ilgili işlemler ve aynı periyotta çalıştırmak istediğin işlemler
sensorDegeri=sensorOku(kanal);
lcd.setCursor(x,y);
lcd.print("sensor:");
lcd.print(sensorDegeri);
lcdbayrak=0; //bayrak değişkeni kod grubunun sonunda "0" yap
}
-------------------
buna benzer bir çok periyodik kodu sorunsuz aynı döngüde kullanabilirsin, kimisi 5 saniyede bir çalışabilir kimisi her saniye çalışabilir.

Ya da:
millis fonksiyonu ile de yapabilirsin benzer etkiyi, örneğin.

------------------
//loop kodu gerekli değişkenlerin tanımlandığı varsayılarak
{
if((millis()-zamantakip)>1000) // zamantakip değişkeni periyod tespiti için
{
sayac1++; //her saniye artan bir sayaç
sayac2++;
}
if(sayac1>0)
{
//her saniye çalışmasını istediğin kod
sayac1=0; //sayacı "0" yaparak bir saniye sonra sayaç tekrar "1" yapılana kadar bu kod sonsuz döngüde es geçilir
}
if(sayac2>4)
{
//her beş saniyede bir çalışmasını istediğin kod
sayac2=0;
}

-------------------------------------------



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.