Arduinoda yardım istiyen gelebilir

Arkadaslar lutfen yardim edin..
Butun sensorler ve roleler unoya bagli..
45 gundur uno yu- nodemcu 8266 ile internete baglamaya calisiyorum ..sonunda baglandim..
Bu seferde bylinkde verileri goruyorum. ama buton fonksiyonlari ile 4 relay role yi kontrol edemiyorum..
Kodlara bir bakarmisiniz..
bir de ilginc sorunlarim var.. nodemcu uzerinde internete baglaninca yanan led yanmiyor(yazilimla mi yaniyor bilemedim)
arduino uno yu enerjiye bagladigim an 4 role de aciliyor ve yazilim tamamen okununca ,yazilima gore roleler gorevlerini yapiyor..enerji takildigi an acilmamasini nasil saglayabilirim..
[
//ARDUINO YUKLE

//DHT11 Lib
#include <DHT.h>

//Arduino to NodeMCU Lib
#include <SoftwareSerial.h>
#include <ArduinoJson.h>

//Initialise Arduino to NodeMCU (10=Rx & 11=Tx)
SoftwareSerial nodemcu(10, 11);

//Initialisation of DHT11 Sensor
#define DHTPIN 2
DHT dht(DHTPIN, DHT11);
int temp;
int hum;

// MQ135 AYARLARI

#define sensor A1
int gas, co2lvl;



void setup() {
Serial.begin(9600);
pinMode(sensor, INPUT); //MQ135
dht.begin();
nodemcu.begin(115200);

pinMode(12,OUTPUT);

delay(1000);

Serial.println("Program started");
}


void loop() {

StaticJsonBuffer<1000> jsonBuffer;
JsonObject& data = jsonBuffer.createObject();

//Obtain Temp and Hum data
dht11_func();
mq135_func();
buton_func();

//Assign collected data to JSON Object
data["humidity"] = hum;
data["temperature"] = temp;
data["co2"] = co2lvl;

//Send data to NodeMCU
data.printTo(nodemcu);
jsonBuffer.clear();



delay(1000);
}

void dht11_func() {

hum = dht.readHumidity();
temp = dht.readTemperature();
Serial.print("Humidity: ");
Serial.println(hum);
Serial.print("Temperature: ");
Serial.println(temp);

}
void mq135_func() {

gas = analogRead(sensor);
co2lvl = gas-120;
co2lvl = map(co2lvl,0,1024,400,5000);
Serial.println(gas);
}
void buton_func() {
while (nodemcu.available() > 0 ) {
int val = nodemcu.parseInt();
if (nodemcu.read() == "\n") {
Serial.println(val);
if (val == HIGH) {
digitalWrite(12, HIGH);
}
else {
digitalWrite(12, LOW);
}
}
}
}
]

[
//NODEMCU YUKLE
#include <Blynk.h>
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

BlynkTimer timer;

char auth[] = "1HJh3g8b4ra9rFkhLjDz_ABL5CukkH4";
char ssid[] = "Kablonet Netmaster-C5B5-G_EXT";
char pass[] = "1971mm74";

#include <SoftwareSerial.h>
#include <ArduinoJson.h>

int a;

//D8 = RX & D7 = TX
SoftwareSerial nodemcu(D8, D7);

void send_data() {
StaticJsonBuffer<200> jsonBuffer;
JsonObject& data = jsonBuffer.parseObject(nodemcu);

if (data == JsonObject::invalid()) {
//Serial.println("Invalid Json Object");
jsonBuffer.clear();
return;
}



Serial.println("JSON Object Recieved");
Serial.print("Recieved Humidity: ");
float hum = data["humidity"];
Serial.println(hum);
Blynk.virtualWrite(V6,hum);

Serial.print("Recieved Temperature: ");
float temp = data["temperature"];
Serial.println(temp);
Blynk.virtualWrite(V5,temp);

Serial.print("Recieved co2: ");
float co2lvl = data["co2"];
Serial.println(co2lvl);
Blynk.virtualWrite(V7,co2lvl);

Serial.println("-----------------------------------------");
}

BLYNK_WRITE(V2)
{
a = param.asInt();
nodemcu.print(a);
nodemcu.println("\n");
Serial.println(a);
}

// ================= SETUP =============================
// ======================================================
void setup() {
// Initialize Serial port
Serial.begin(9600);
nodemcu.begin(115200);
while (!Serial) continue;

Blynk.begin(auth, ssid, pass,"blynk-cloud.com", 8080);
timer.setInterval(100L, send_data);

pinMode(D8, INPUT);
pinMode(D7, OUTPUT);

}


void loop() {
Blynk.run();
timer.run();
}
 

Ekli dosyalar

  • Screenshot_20210615-155315.jpg
    Screenshot_20210615-155315.jpg
    64.3 KB · Görüntüleme: 6
Artık bu başlığı takip etmeyi bırakıyorum sadece ilgili başlıkla açılan sorulara cevap veriyorum.
 
merhaba
benim sorunum lcd ekranda menü oluşturdum o menülerin içerisinde bazı değerler okuyorum ama sadece menüye ilk girişimde bir defa okuma yapıyor , ama okumayı yenilemiyor ekranda ilk okuduğu değer kalıyor.
 
#include <SPI.h>
#include <DMD.h>
#include <TimerOne.h>
#include "Arial_Black_16.h"

// Panel ayarları
#define DISPLAYS_ACROSS 2 // Yatay panel sayısı
#define DISPLAYS_DOWN 1 // Dikey panel sayısı
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN); // DMD ekran nesnesi oluştur

// Geri sayım ve durum değişkenleri
const byte validCommand[] = {0x02, 0x01, 0x44, }; // Beklenen komut dizisi
const int commandLength = sizeof(validCommand) / sizeof(validCommand[0]);
int receivedIndex = 0; // Alınan veri dizini
unsigned long relayOffTime = 0; // Rölenin kapalı kalması gereken zamanı tutar
bool countdownActive = false; // Geri sayımın aktif olup olmadığını kontrol eder
int lastRemainingTime = 0; // Son kalan zamanı saniye olarak kaydet
unsigned long lastDmdUpdate = 0; // Son DMD tarama güncellemesi zamanı
bool displayDur = true; // Başlangıçta "DUR" gösterildiğini belirtir

void scanDMD() {
dmd.scanDisplayBySPI();
}

void displayDurGec() {
dmd.clearScreen(true); // Ekranı temizle
dmd.selectFont(Arial_Black_16);

if (displayDur) {
dmd.drawString(0, 1, "DUR", 3, GRAPHICS_NORMAL); // Sol yarıda "DUR"
dmd.drawString(32, 0 , " ", 4, GRAPHICS_NORMAL); // Sağ yarıyı temizle
} else {
dmd.drawString(0, 0, " ", 4, GRAPHICS_NORMAL); // Sol yarıyı temizle
dmd.drawString(32, 1, "GEC", 3, GRAPHICS_NORMAL); // Sağ yarıda "GEÇ"
}

Serial.print("Panelde Gösterilen Mesaj: ");
if (displayDur) {
Serial.println("DUR (Sol taraf)");
} else {
Serial.println("GEÇ (Sağ taraf)");
}
}

void setup() {
Serial.begin(9600); // Seri iletişimi başlat
pinMode(3, OUTPUT); // Röle 1 pinini çıkış olarak ayarla
pinMode(4, OUTPUT); // Röle 2 pinini çıkış olarak ayarla
digitalWrite(3, LOW); // Röle 1'i başlangıçta kapalı tut
digitalWrite(4, LOW); // Röle 2'yi başlangıçta kapalı tut
dmd.clearScreen(true); // Ekranı temizle

// Başlangıçta "DUR" mesajını göster
displayDur = true;
displayDurGec();
Serial.println("Röleler pasif durumda.");
}

void activateRelay1() {
digitalWrite(3, HIGH); // bariyeri aç
Serial.println("bariyer aktif oldu (1 saniye).");
delay(1000); // 1 saniye bekle
digitalWrite(3, LOW); // bariyeri kapat
Serial.println("barıyer kapandı.");
}

void activateRelay2() {
digitalWrite(4, HIGH); // sireni aç
Serial.println("siren çalıyor (2 saniye).");
delay(2000); // 2 saniye bekle
digitalWrite(4, LOW); // sireni kapat
Serial.println("siren sustu .");
}

void loop() {
unsigned long currentTime = millis();

// Seri veriyi kontrol et ve tam komut dizisini oku
while (Serial.available() > 0) {
byte incomingByte = Serial.read(); // Gelen baytı oku

// Gelen baytı beklenen bayt ile karşıla
if (incomingByte == validCommand[receivedIndex]) {
receivedIndex++; // Doğruysa dizindeki ilerlemeyi artır

// Tüm baytlar doğru sırada geldiyse komutu tanı
if (receivedIndex == commandLength) {
Serial.println("Kod okundu"); // Komut tanındığında mesajı yaz

if (!countdownActive) {
// Eğer geri sayımda değilsek, röleleri hemen aktif yap ve geri sayımı başlat
activateRelay1();
activateRelay2();
relayOffTime = millis() + 20000; // 20 saniyelik geri sayımı başlat
countdownActive = true;
displayDur = false; // Geri sayım başladığında "GEÇ" gösterilsin
displayDurGec(); // Ekranda "GEÇ" göster
} else {
// Geri sayım sırasında komut tekrar okunduysa, yalnızca süreyi sıfırla
relayOffTime = millis() + 20000;
Serial.println("Geri sayım sıfırlandı, yeni 20 saniye başlatıldı.");
}

receivedIndex = 0; // Dizini sıfırla, yeni komutu bekle
}
} else {
// Yanlış bayt geldiyse dizini sıfırla ve yeni komutu bekle
Serial.println("Yanlış bayt alındı, komut sıfırlanıyor.");
receivedIndex = 0;
}
}

// Geri sayım işlemi
if (countdownActive) {
int remainingTime = (relayOffTime - currentTime) / 1000;

// Geri sayımı yalnızca saniyede bir göster
if (remainingTime != lastRemainingTime) {
Serial.print("Geri Sayım: ");
Serial.print(remainingTime);
Serial.println(" saniye");
lastRemainingTime = remainingTime;
}

// Geri sayım sona erdiğinde röleleri tekrar aktif yap ve döngüyü tamamla
if (currentTime >= relayOffTime) {
Serial.println("20 saniye doldu, röleler tekrar aktif ediliyor.");
activateRelay1(); // bariyeri tekrar açıp kapat
// activateRelay2(); // sireni tekrar açıp kapat
countdownActive = false; // Geri sayım bitti, yeni komut beklemeye geç
displayDur = true; // Geri sayım bittiğinde "DUR" gösterilsin
displayDurGec(); // Ekranda "DUR" göster
}
}

// DMD ekranını tarama, her 5 ms'de bir tarama yaparak güncelle
if (millis() - lastDmdUpdate > 1) {
scanDMD();
lastDmdUpdate = millis();
}
} merhaba 4 lu https://www.direnc.net/5v-4-kanal-role-karti arduıno role kartı kullandım . sıstem bazen calısıyor . bazen hıc tepkı vermıyor . gelen verıyı test ettım o verı gelıyor onu okuyorum . ama sanırım arduıno resetlıyor olabılır ya da kılıtlenıyor . enerjıyı kesıp yıne verdıgımde calısırsa 5- 10 -20 bazen calısıyor snra yıne kıtlenıyor . sıstem bırkez calısınca calısmaya devam edıyor yanı seneryoyu tamamlıyor . role kartı ve arduıno 10 a 5 volt beslemeden beslenıyor .
bu konuda yardımcı olurmusunuz
 
tempImage6xG4Fa.jpg
biraz amatör bir cızım oldu ama
 

Yeni mesajlar

Forum istatistikleri

Konular
130,236
Mesajlar
934,648
Kullanıcılar
453,442
Son üye
Emre75

Yeni konular

Geri
Üst