Att få ut något vettigt från sändarn var inte det enklaste. Ändrade fördröjningen för varje givare
till 2 sekunder så mottagaren skulle hinna med.
I stället för:
sprintf(Send_Temp, "%d-%d", sender_id, send_data);
Som kunde ge "1-20". Så var det enklare att skicka allt som ett enda heltal.
sprintf(Send_Temp, "%d%d", sender_id, send_data);
Vilket ger "120" som är enklare att omvandla. Lär ju aldrig ha mer än 9 givare totalt.
Mottagar koden som den ser ut just nu. Fick omvandla datat tre gånger innan jag fick ut ett heltal.
#include <VirtualWire.h>
#define RX_PIN 4
long lasttime = 0;
void setup()
{
Serial.begin(9600);
vw_set_rx_pin(RX_PIN);
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_rx_start();
}
void loop()
{
unsigned long currenttime = millis();
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
char Sensor1CharMsg[5] = "", Value[5] = "", Sensor[5] = "", Temp[5] = "";
int Real_Temp = 0, Real_Sensor = 0, i = 0, Sensor1Data = 0;
long totaltime = (currenttime - lasttime) / 1000;
lasttime = millis();
for (i = 0; i < buflen; i++) Sensor1CharMsg[i] = char(buf[i]);
Sensor1CharMsg[buflen] = ' ';
Sensor1Data = atoi(Sensor1CharMsg); // Gör ett heltal av all mottaget data.
itoa(Sensor1Data,Value,10); // Gör en sträng av mottaget data.
sprintf(Sensor, "%c ", Value[0]); // Filtrera ut vilken givare som skickat data.
sprintf(Temp, "%c%c ", Value[1], Value[2]); // Filtrera ut tempen.
Real_Temp = atoi(Temp); // Gör om Tempen till ett heltal.
Real_Sensor = atoi(Sensor); // Gör om givare till ett heltal.
Serial.print("Sensor : ");
Serial.println(Real_Sensor);
Serial.print("Temp : ");
Serial.print(Real_Temp);
Serial.println(" C");
Serial.print(totaltime);
Serial.println(" seconds since last update.");
Serial.println("");
}
}
Kommentera gärna.
Innehållet som publiceras här omfattas av grundlagsskydd. Detta inkluderar inte kommentarsfälten. Du som kommenterar är helt ansvarig för det du skriver.
Kommenterarer på "Temperatur On the air #3"