Vlad Mihai Postat Decembrie 5, 2014 Partajează Postat Decembrie 5, 2014 Salut, implementez o mini statie meteo cu un atmega328 smd si pe langa asta vreau sa actionez independent 3 relee. Partea hardware e gata, iar la soft e o oarecare problema.... vreau ca atunci cand trimit o litera pe serial (W) sa imi schimbe starea la un releu si o mentina asa pana cand ii trimit alta litera pe serial. Comunicatia se face cu un convetor usb-serial ftdi din Labview. Va rog sa aruncati un ochi pe codul sursa si sa imi spuneti ce imi scapa. Multumesc! #include "dht.h"#include <Wire.h>#include <Adafruit_BMP085.h>Adafruit_BMP085 bmp;#define dht_dpin 13dht DHT;int led=3;int releu1=5;int releu2=6;int releu3=7;int AByte = 0; unsigned int val1; unsigned int val2; unsigned int val3;void setup() {Serial.begin(9600); // opens serial port, sets data rate to 9600 bps pinMode(led, OUTPUT); pinMode(releu1,OUTPUT); pinMode(releu2,OUTPUT); pinMode(releu3,OUTPUT);if (!bmp.begin()) { Serial.println("nu exsita senzor compatibil BMP085 sau BMP180"); while (1) {} }}void loop() { DHT.read11(dht_dpin); analogWrite(led, 128); float presiune1 = bmp.readPressure()/101.325; presiune1 = presiune1 * 0.760;//while (Serial.available() == 0) {} //Wait for information before continuing //read serial AByte = Serial.read(); digitalWrite(releu1,LOW); digitalWrite(releu2, LOW); digitalWrite(releu3, LOW); //STOP //RELEU1 if (AByte == 'W') { val1=10; //releu1 on } if (AByte == 'S') { val1=20; //releu1 off } if (val1 == 10){ digitalWrite(releu1,HIGH); } if (val1 == 20){ digitalWrite(releu1,LOW); } //RELEU2 if (AByte == 'Q') { val2=15; //releu2 on } if (AByte == 'A') { val2=25; //releu2 off } if (val2 == 15){ digitalWrite(releu2,HIGH); } if (val2 == 25){ digitalWrite(releu2,LOW); } //RELEU3 if (AByte == 'E') { val3=30; //releu3 on } if (AByte == 'D') { val3=35; //releu3 off } if (val3 == 30){ digitalWrite(releu3,HIGH); } if (val3 == 35){ digitalWrite(releu3,LOW); } Serial.print("Z"); Serial.print(bmp.readPressure()); Serial.print("n"); Serial.print(presiune1); Serial.print("n"); Serial.print(DHT.humidity); Serial.print("n"); Serial.print(DHT.temperature); Serial.print("n"); delay(500);} Link spre comentariu
Liviu M Postat Decembrie 5, 2014 Partajează Postat Decembrie 5, 2014 Ai uitat sa zici ce nu face. Link spre comentariu
Vlad Mihai Postat Decembrie 5, 2014 Autor Partajează Postat Decembrie 5, 2014 Scuze, pai cand ii trimit o litera pe serial sa schimbe starea releului, o face si o pastreaza pentru cateva zeci de secunde si dupa revine la starea initiala fara sa ii trimit nimic. aici e problema ca eu nu vreau sa revina decat dupa ce ii trimit eu o alta litera(comanda). Link spre comentariu
costi002 Postat Decembrie 5, 2014 Partajează Postat Decembrie 5, 2014 (editat) Pai vad ca in main faci releul iarasi off. De ce? Editat Decembrie 5, 2014 de costi002 Link spre comentariu
Vlad Mihai Postat Decembrie 14, 2014 Autor Partajează Postat Decembrie 14, 2014 Scuze, abia acum am vazut ca mi s-a raspuns, da costi002 acolo era problema. Multumesc anticipat! Link spre comentariu
Liviu M Postat Decembrie 14, 2014 Partajează Postat Decembrie 14, 2014 Multumesc anticipat!Cam intarziata anticipatia asta... 1 Link spre comentariu
digix Postat Decembrie 14, 2014 Partajează Postat Decembrie 14, 2014 Aprob "pozitiv" dar totusi cele cateva zeci de secunde nu erau cam multe pentru parcurgerea unui singur loop() ? Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum