Skocz do zawartości

Przesyłanie danych przez HC-12


Kuba323

Pomocna odpowiedź

Witam forumowiczów!

Mam problem z przesłaniem danych przez HC-12 mianowicie chciałbym przesłać 3 dane(2 temperatury i wilgotność) na wyświetlacz dotykowy, próbowałem już oto kod nadajnika:


#include <DallasTemperature.h>
#include <OneWire.h>
#include <DHT.h>
#include <SoftwareSerial.h>
SoftwareSerial radio(4, 5);
DHT dht;
OneWire oneWire(A4); 
DallasTemperature sensors(&oneWire);

void setup() {
 // vw_setup(2000);
// vw_set_tx_pin(transmit_pin);
 radio.begin(9600);
Serial.begin(9600);
 dht.setup(A5);
sensors.begin();

}

void loop() {
  sensors.requestTemperatures();


int a = (sensors.getTempCByIndex(0));
int b = dht.getTemperature();
int c = dht.getHumidity();
delay(1000);

radio.write(b) ;
radio.write(c);
radio.write(a);

 delay(4000);
}

kod odbiornika:

#include <DS3231.h>
#include <SPFD5408_Adafruit_GFX.h>
#include <SPFD5408_Adafruit_TFTLCD.h> 
#include <SPFD5408_TouchScreen.h>
#include <SoftwareSerial.h>
//#include <VirtualWire.h>
SoftwareSerial radio(10, 11);
//#define receive_pin 13
//#define led_pin 13 
DS3231 clock;
RTCDateTime dt;


#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RT A4

#define Lekkoczarny 0x31A6
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define Orange  0xFD20      
#define GreenYellow 0xAFE5
#define Navy     0x000F      
#define DarkGreen   0x03E0     
#define DarkCyan  0x03EF    
#define Maroon   0x7800    
#define Purple  0x780F     
#define Olive  0x7BE0      
#define LightGrey  0xC618      
#define DarkGrey  0x7BEF
#define LightBlue 0x879F

#define TS_MINX 100
#define TS_MINY 100
#define TS_MAXX 1000
#define TS_MAXY 1000


Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RT); 

#define YP A2
#define XM A3 
#define YM 8  
#define XP 9

#define MINPRESSURE 200
#define MAXPRESSURE 350

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
unsigned long currentMillis;
unsigned long previousMillis = 0;    
unsigned long interval = 60000;       
char page;
String hum1;
String tempe1;
String temp1;

void setup() {

tft.reset();
tft.begin(0x9341);
page = 0;
Serial.begin(9600);
radio.begin(9600);
Serial.println("Initialize DS3231");

     clock.begin();

 clock.setDateTime(__DATE__, __TIME__);
tft.setRotation(0);

}
void loop() {
dotyk();
 unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval){
   previousMillis = currentMillis;
 dt = clock.getDateTime();
ekranstartowy();
}
} 



void dotyk () {
  digitalWrite(13, HIGH);
TSPoint p = ts.getPoint();
digitalWrite(13, LOW);
pinMode(XM, OUTPUT);
   pinMode(YP, OUTPUT);
if (p.z > MINPRESSURE && p.z < MAXPRESSURE){
p.x = map(p.x, TS_MAXX, TS_MINX, 240, 0);
  p.y = map(p.y, TS_MAXY, TS_MINY,320, 0);
if (page == 0) {       
  if(p.x>120 && p.x<150 && p.y>50 && p.y<300){      

drawpg ();
 page = 1;   
}    
if(p.x>150 && p.x<200 && p.y>50 && p.y<300){        

drawtemp ();
page = 2;
 }
}

else  if (page == 1) {   
if(p.x>50 && p.x<100 && p.y>50 && p.y<300){       

ekranstartowy(); 
 page = 0; 
}
}
else if (page == 2) {  
if(p.x>50 && p.x<100 && p.y>50 && p.y<300);    
ekranstartowy(); 
page = 0;
}
}
}



void ekranstartowy (){
tft.fillScreen(Lekkoczarny);
tft.setTextSize(2);
tft.setTextColor(LightBlue);
tft.setCursor(30,10);
tft.print(clock.dateFormat("d F Y ",  dt));
tft.setTextSize(4);
tft.setCursor(60,40);
tft.print(clock.dateFormat("H:i",dt));
tft.setTextSize(4);
tft.setCursor(45,90);
tft.print(clock.readTemperature()); 
tft.drawCircle(170, 93, 4, LightBlue);
tft.setCursor(180,90);
tft.println("C");
tft.fillRect(10,150, 220, 70, DarkGrey);
tft.setTextSize(3);
tft.setTextColor(LightBlue);
tft.setCursor(20,160);
tft.print("Pogoda na ");
tft.setCursor(20, 190);
tft.print("polu");
tft.fillRect(10,230, 220, 70, DarkGrey);
tft.setTextSize(3);
tft.setTextColor(LightBlue);
tft.setCursor(20,240);
tft.print("Temperatura");
tft.setCursor(20, 270);
tft.print("na piecu");

}
void drawpg () {      
if(radio.available()>1){

     int b = radio.read(); 
     int c = radio.read(); 
tft.fillScreen(Lekkoczarny);
tft.setTextSize(3);
tft.fillRect(10,20,220,80, DarkGrey);
tft.setTextColor(LightBlue);
tft.setCursor(80,50);
tft.print("<-");
tft.setTextColor (LightBlue);
tft.setCursor(10, 210);
tft.print("Wilgotnosc:");
tft.setCursor(10, 240);
tft.print(c);
tft.println("%");
tft.setTextColor(LightBlue);
tft.setCursor(10,120);
tft.print("Temperatura:");
tft.setCursor(10, 150);
tft.print(b);
tft.drawCircle(50, 152, 4, LightBlue);
tft.setCursor(58, 150);
tft.print("C");
} 
}

void drawtemp (){
if(radio.available()){

 int a = radio.read();

tft.fillScreen(Lekkoczarny);
tft.setTextColor(LightBlue);
tft.setTextSize(3);
tft.setCursor(10,150);
tft.print("Temperatura:");
tft.setCursor(10, 180);
tft.print(a);
tft.drawCircle(50, 180, 4, LightBlue);
tft.setCursor(58, 180);
tft.print("C");
tft.fillRect(10,20,220,80, LightGrey);
tft.setTextColor(LightBlue);
tft.setCursor(80,50);
tft.print("<-");
 }  
} 

Jak mówiłem próbowałem , ale z marnym skutkiem, bo dane wyświetlają mi się nie zawsze w tych miejscach do których je przypisałem i dane nie zawsze ukazują prawdziwą temp. czujniki działają bo sprawdzałem na serial monitorze i jest ok. Jeśli ktoś miał styczność z HC-12 i wie jak to naprawić to bardzo proszę o pomoc.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.