salve a tutti nella mia ignoranza dopo prove ho cercato di creare un termostato wireless con due arduino micro, due moduli rf , un dispay 16*2, un sesore lm 35, due pulsanti e una schedina rele per la potenza....
su un arduino ho messo sensore lm 35 e rf tx.
e questo legge e trasmette la temperatura...
nel altro dispay, i due pulsanti per incremento e diminuzione temperatura impostata, modulino rf rx, e la schedina rele...
in maniera oscena ma ho fatto gli sketch...
dopo vari tentativi funzionava provando con i due arduino su due pc e i serial monitor..
fino a quando non ho provato a fare scrivere sul display ma la temperatura effetiva mi perde la prima cifra esempuio 26 scrive solo 6 ..
allego sketch ricevente
#include <LiquidCrystal.h>
#include <VirtualWire.h>
int temperaturaimpostata=62;
int temperaturaeffetiva=0;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
vw_setup(2000); // Bits per sec
vw_rx_start(); // Start the receiver PLL running
pinMode(12, INPUT);//pulsante aumento temp.impostata
pinMode(10, INPUT);//pulsante diminuzione temp. impostata
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Temp. Impo:");
lcd.setCursor(0,1);
lcd.print("Temp. Effe:");
}
void loop() {
if(digitalRead(12)==HIGH)
{
temperaturaimpostata=temperaturaimpostata+1;
}
if(digitalRead(10)==HIGH)
{
temperaturaimpostata=temperaturaimpostata-1;
}
lcd.setCursor(12, 0);
lcd.print(temperaturaimpostata);
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
// Wait for a message
if (vw_get_message(buf, &buflen)) // Non-blocking
{
int i;
const char *msg = "prova";
digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
Serial.print("temperatura ");
for (i = 0; i < buflen; i++)
{temperaturaeffetiva=(buf[i]-48);
lcd.setCursor(12,1);
lcd.print(temperaturaeffetiva);
Serial.print(temperaturaeffetiva);
}
Serial.println(" ");
// Send a reply
vw_send((uint8_t *)msg, strlen(msg));
digitalWrite(13, false);
}
delay(200);
}
trasmitente
#include <VirtualWire.h>;
const short sensore=0;
int temp=0;
void setup()
{
Serial.begin(9600); // inizializa monitor seriale
// Inizializza trasmettitore
vw_setup(2000); // Bits per sec
vw_rx_start(); // Start the receiver PLL running
}
void loop()
{
temp=(analogRead(sensore)*5/1023.0*100);
Serial.print("temperatura ");
Serial.print(temp);
Serial.print(" ");
const char *msg = "0";//variabile di char
switch (temp)
{
case 1:
msg="1";
break;
case 2:
msg="2";
break;
case 3:
msg="3";
break;
case 4:
msg="4";
break;
case 5:
msg="5";
break;
case 6:
msg="6";
break;
case 7:
msg="7";
break;
case 8:
msg="8";
break;
case 9:
msg="9";
break;
case 10:
msg="10";
break;
case 11:
msg="11";
break;
case 12:
msg="12";
break;
case 13:
msg="13";
break;
case 14:
msg="14";
break;
case 15:
msg="15";
break;
case 16:
msg="16";
break;
case 17:
msg="17";
break;
case 18:
msg="18";
break;
case 19:
msg="19";
break;
case 20:
msg="20";
break;
case 21:
msg="21";
break;
case 22:
msg="22";
break;
case 23:
msg="23";
break;
case 24:
msg="24";
break;
case 25:
msg="25";
break;
case 26:
msg="26";
break;
case 27:
msg="27";
break;
case 28:
msg="28";
break;
case 29:
msg="29";
break;
case 30:
msg="30";
break;
case 31:
msg="31";
break;
case 32:
msg="32";
break;
case 33:
msg="33";
break;
case 34:
msg="34";
break;
case 35:
msg="35";
break;
case 36:
msg="36";
break;
case 37:
msg="37";
break;
case 38:
msg="38";
break;
case 39:
msg="39";
break;
case 40:
msg="40";
break;
case 41:
msg="41";
break;
case 42:
msg="42";
break;
case 43:
msg="43";
break;
case 44:
msg="44";
break;
case 45:
msg="45";
break;
case 46:
msg="46";
break;
case 47:
msg="47";
break;
case 48:
msg="48";
break;
case 49:
msg="49";
break;
case 50:
msg="50";
break;
case 51:
msg="51";
break;
case 52:
msg="52";
break;
case 53:
msg="53";
break;
case 54:
msg="54";
break;
case 55:
msg="55";
break;
case 56:
msg="56";
break;
case 57:
msg="57";
break;
case 58:
msg="58";
break;
case 59:
msg="59";
break;
case 60:
msg="60";
break;
case 61:
msg="61";
break;
case 62:
msg="62";
break;
case 63:
msg="63";
break;
case 64:
msg="64";
break;
case 65:
msg="65";
break;
case 66:
msg="66";
break;
case 67:
msg="67";
break;
case 68:
msg="68";
break;
case 69:
msg="69";
break;
case 70:
msg="70";
break;
case 71:
msg="71";
break;
case 72:
msg="72";
break;
case 73:
msg="73";
break;
case 74:
msg="74";
break;
case 75:
msg="75";
break;
case 76:
msg="76";
break;
case 77:
msg="77";
break;
case 78:
msg="78";
break;
case 79:
msg="79";
break;
case 80:
msg="80";
break;
case 81:
msg="81";
break;
case 82:
msg="82";
break;
case 83:
msg="83";
break;
case 84:
msg="84";
break;
case 85:
msg="85";
break;
case 86:
msg="86";
break;
case 87:
msg="87";
break;
case 88:
msg="88";
break;
case 89:
msg="89";
break;
case 90:
msg="90";
break;
case 91:
msg="91";
break;
case 92:
msg="2";
break;
case 93:
msg="93";
break;
case 94:
msg="94";
break;
case 95:
msg="95";
break;
case 96:
msg="96";
break;
case 97:
msg="97";
break;
case 98:
msg="98";
break;
case 99:
msg="99";
break;
}
Serial.println(msg);
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
digitalWrite(13, true); // Flash led 13 quando trasmetti
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
Serial.println("Sent");
digitalWrite(13, false);
// Wait at most 200ms for a reply
if (vw_wait_rx_max(200))
{
if (vw_get_message(buf, &buflen)) // Non-blocking
{
int i;
// Message with a good checksum received, dump it.
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println("");
}
}
else
Serial.println("Timout");
delay(2000);
}
spero di avere fatto giusto a inserire gli sketch
grazie in anticipo
Luigi