Sari la conținut
ELFORUM - Forumul electronistilor

Problema arduino comunicatie seriala


Vlad Mihai

Postări Recomandate

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
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Vlad Mihai

    3

  • Liviu M

    2

  • costi002

    1

  • digix

    1

Zile populare

Top autori în acest subiect

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
  • 2 săptămâni mai târziu...

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări