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); } } |
1 Arduino İle 2 Farklı Görev Yaptırma (Koda Müdahale Edebilir Misiniz ?
-
-
Şu bağlantıdan yardım alabilirsin;
https://googledaariyim.com/?q=Arduino+assembly+dersleri
< Bu ileti iOS uygulamasından atıldı > -
oradan kendin bir yararlan önce belki nakil falan yaptırırsın.
-
Bu yazdığın koddaki eksik nedir ?
< Bu ileti Android uygulamasından atıldı > -
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;
}
-------------------------------------------
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X