Hej udviklere
Jeg er i gang med at forsøge og en vejrstation, der er baseret på to Arduinoer. Min setup er således: Uden for huset sidder der en mindre Arduino med nogle sensorer. Lige p.t. er det kun temperatur og fugtighed. Ideen er at denne Arduino trådløst sender sensorernes data ind til en anden Arduino, der er forbundet til et LCD display, hvor sensorernes data så bliver vist på. Forbindelsen mellem de to Arduino foregår med RF links og det library der hedder VirtualWire.
Jeg er kommet så langt, at jeg har formået at læse sensorerne, sende deres data trådløst til Arduino inden for. Jeg har også formået at få den modtager Arduinoen til at printe hvad den modtager i serial monitoren. Det ser ud til at være korrekt (22.1 er temperature, 46.0 er fugtighed:
- 22.1, 46.0,
-
- 22.1, 46.0,
-
- 22.1, 46.0,
-
- 22.1, 46.0,
Mit problem er, at jeg gerne vil adskille de forskellige data, som den modtager, så jeg lettere kan printe dataerne på et LCD display. I dette tilfælde kunne ville det være, at adskille 22.1 og 46.0 og måske gemme dem i hver sin data type. (Float ville vel være det oplagte??)
Jeg håber i forstår mit problem og kan hjælpe mig med det! :-)
Transmitter kode:- #include <VirtualWire.h>
- #include <DHT.h>
-
- //Defining DHT sensor
- #define DHTPIN 2
- #define DHTTYPE DHT11
- DHT dht(DHTPIN, DHTTYPE);
- float H = 0;
-
- int tempPin = 0;
- float calTemp;
-
- char tString[24];
- char hString[24];
- char msg[27];
-
-
- void setup()
- {
- Serial.begin(9600);
-
- //VirtualWire setup
- vw_set_tx_pin(12);
- vw_setup(2000);
-
-
- dht.begin();
- }
-
- void loop() {
- H = dht.readHumidity();
- analogReference(INTERNAL);
- temp(analogRead(tempPin)); //Calculating temperature in celcius
- analogReference(DEFAULT);
- sendData();
- delay(100);
- }
-
- void temp(int value) {
- long temperature = 0;
- //Reading the sensor 20 times and calculating the average reading
- int aRead = 0;
- for (int i = 0; i < 20; i++) {
- aRead = aRead+value;
- }
- aRead = aRead / 20;
-
- //Converting the temperature to celsius
- temperature = ((100*1.1*aRead)/1024)*10;
-
- // prints a value of 123 as 12.3
- long hele = temperature / 10;
- float deci = (temperature % 10)/10.0;
- calTemp = hele + deci;
- }
-
- int sendData (){
- //Converting temperature to a string
- dtostrf(calTemp, 5, 1, tString);
- //Converting humidity to a string
- dtostrf(H, 5, 1,hString);
- //Combining to one string
- sprintf(msg, "%s, %s,", tString, hString);
- Serial.print("message to send: [");
- Serial.print(msg);
- Serial.println("]");
- //Sending the string
- vw_send((uint8_t *)msg, strlen(msg));
- vw_wait_tx();
- }
Receiver Data:- #include <VirtualWire.h>
-
- void setup()
- {
- Serial.begin(9600);
-
- //VirtualWire Setup
- vw_setup(2000);
- vw_set_rx_pin(10);
- vw_rx_start();
- }
-
- void loop()
- {
- uint8_t buflen = VW_MAX_MESSAGE_LEN; //Maximum length of the message
- uint8_t buf[buflen]; // The buffer that holds the message
-
- if (vw_get_message(buf, &buflen))
- {
-
- buf[buflen] = '\0';
- Serial.println((char *)buf);
-
- }
- }
Indlæg senest redigeret d. 23.09.2014 10:38 af Bruger #16553