Yes of course. You can help me...
// Copyright (C) 2010 Landoni Boris
// http://technolando.blogspot.com/
// http://www.futurashop.it
// http://www.elettronicain.it/
//
// WS2300 is free software: you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// WS2300 is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
NewSoftSerial mySerial(2, 3); //NewSoftSerial mySerial(rx,tx);
const int ledPin = 6; // the pin that the LED is attached to
const int rts = 4;
const int dtr = 5;
void leggiSeriale() {
int incomingByteSer; // a variable to read incoming serial data into
// see if there's incoming serial data:
if (Serial.available() > 0) {
// read the oldest byte in the serial buffer:
incomingByteSer = Serial.read();
// if it's a capital H (ASCII 72), turn on the LED:
Serial.flush();
if (incomingByteSer == 'R') {
Serial.println("RESET");
delay(2000);
digitalWrite(rts, HIGH);
digitalWrite(dtr, LOW);
delay(2000);
digitalWrite(rts, LOW);
digitalWrite(dtr, HIGH);
delay(1000);
mySerial.print(byte(06));
delay(1000);
}
if (incomingByteSer == 'o') {
String data=getTime();
Serial.print("ora ");
Serial.println(data);
}
if (incomingByteSer == 'd') {
String data=getDay();
Serial.print("giorno ");
Serial.println(data);
}
if (incomingByteSer == 't') {
String data=getTempIn();
Serial.print("temperatura interna ");
Serial.println(data);
}
if (incomingByteSer == 'T') {
String data=getTempOut();
Serial.print("temperatura esterna ");
Serial.println(data);
}
if (incomingByteSer == 'h') {
String data=getHumIn();
Serial.print("umidità interna ");
Serial.println(data);
}
if (incomingByteSer == 'H') {
String data=getHumOut();
Serial.print("umidità esterna ");
Serial.println(data);
}
if (incomingByteSer == 'p') {
String data=getPress();
Serial.print("pressione ");
Serial.println(data);
}
if (incomingByteSer == 'w') {
String data=getWind(0);
Serial.print("wind speed ");
Serial.println(data);
}
if (incomingByteSer == 'W') {
String data=getWind(1);
Serial.print("wind dir ");
Serial.println(data);
}
if (incomingByteSer == 'r') {
String data=getRain1();
Serial.print("rain 1 ");
Serial.println(data);
}
// if it's an L (ASCII 76) turn off the LED:
if (incomingByteSer == 'L') {
digitalWrite(ledPin, LOW);
}
}
}
// Function to clear a string
void clearStr (char* str) {
int len = strlen(str);
for (int c = 0; c < len; c++) {
str[c] = 0;
}
}
String Leggi (int mem[]) {
String inString = String(35);
int incomingByte; // a variable to read incoming serial data into
int time=0;
/* Serial.print("memoria ");
for (int tmp=0; tmp<5; tmp++){
Serial.print(mem[tmp],HEX);
Serial.print(" ");
}
Serial.println();
*/
incomingByte=0;
while ((incomingByte!=2) && (time<20)){
time++;
mySerial.print(byte(06));
delay(20);
/*while ((mySerial.available() == 0) && (time<100)){
delay(20);
time++;
}
time=0;
*/
if (mySerial.available() > 0) {
incomingByte = mySerial.read();
inString.append(incomingByte);
// Serial.print("RICEVUTO ");
// Serial.println(incomingByte);
}
}
clearStr(inString);
mySerial.flush();
if (time==100){
// Serial.print("errore reset ");
return("0");
}
for (int tmp=0; tmp<5; tmp++){
mySerial.print(byte(mem[tmp]));
//Serial.print("-> ");
//Serial.println((mem[tmp]),HEX);
while ((mySerial.available() == 0) && (time<100)){
delay(30);
time++;
}
if (time==100){
// Serial.print("errore ");
// Serial.println(tmp);
return("0");
break;
}
time=0;
/*if (mySerial.available() > 0) {
incomingByte = mySerial.read();
inString.append(incomingByte);
Serial.print("RICEVUTO ");
Serial.println(incomingByte,HEX);
}
*/
//delay(200);
while (mySerial.available() > 0) {
delay(20);
incomingByte = mySerial.read();
//inString.append(incomingByte,HEX);
// Serial.print("<- ");
// Serial.println(incomingByte,HEX);
// Serial.println(incomingByte);
//(incomingByte & B11110000);
if (tmp<4){
//Serial.print("nibble ");
//Serial.println(((incomingByte & B11110000)/B10000),HEX); //isolo il nibble più significativo e lo faccio slittare
//Serial.print("tmp ");
//Serial.print(tmp);
if (tmp!=((incomingByte & B11110000)/B10000)){
// Serial.print("confronto ERRATO ");
return("0");
break;
}
//else
//{
// Serial.print("confronto OK ");
//}
}
if (tmp==4){
if (incomingByte<=0xF){
inString.append(0);
}
inString.append(incomingByte,HEX);
}
}
}
// Serial.print("stringa ricevuta ");
// Serial.println(inString);
return(inString);
}
String getTime(){
String dataStr=0;
Serial.print("leggo ora ");
int my_array[] = {0x82,0x8A,0x82,0x82,0xDA};
dataStr= elabTime(my_array);
return(dataStr);
}
String getDay(){
String dataStr=0;
Serial.print("leggo giorno ");
int my_array[] = {0x82,0x8A,0x8E,0xAE,0xEE};
dataStr= elabDay(my_array);
return(dataStr);
}
String getTempIn(){
String dataStr=0;
Serial.print("leggo temperatura interna ");
int my_array[] = {0x82,0x8E,0x92,0x9A,0xFA};
dataStr= elabTemp(my_array);
return(dataStr);
}
String getTempOut(){
String dataStr=0;
Serial.print("leggo temperatura esterna ");
int my_array[] = {0x82,0x8E,0x9E,0x8E,0xFA};
dataStr= elabTemp(my_array);
return(dataStr);
}
String getHumIn(){
String dataStr=0;
Serial.print("leggo umidità interna ");
int my_array[] = {0x82,0x8E,0xBE,0xAE,0xDA};
dataStr= elabHum(my_array);
return(dataStr);
}
String getHumOut(){
String dataStr=0;
Serial.print("leggo umidità esterna ");
int my_array[] = {0x82,0x92,0x86,0xA6,0xDA};
dataStr= elabHum(my_array);
return(dataStr);
}
String getPress(){
String dataStr=0;
Serial.print("leggo pressione ");
int my_array[] = {0x82,0x96,0xBA,0x8A,0xD6};
dataStr= elabPress(my_array);
return(dataStr);
}
String getWind(int dato){
String dataStr=0;
Serial.print("leggo wind ");
int my_array[] = {0x82,0x96,0x8A,0x9E,0xF2};
dataStr= elabWind(my_array,dato);
return(dataStr);
}
String getRain1(){
String dataStr=0;
Serial.print("leggo pioggia 1h ");
int my_array[] = {0x82,0x92,0xAE,0x92,0xDA};
dataStr= elabRain1(my_array);
return(dataStr);
}
String elabTime(int my_array[]){
String inString = String(35);
String dataStr = String(5);
//float dataFloat=0;
for (int ritenta=0; ritenta<3; ritenta++){
// Serial.print("ritenta ");
// Serial.println(ritenta);
inString=Leggi(my_array);
//Serial.print("stringa ricevuta2 ");
//Serial.println(inString);
if (inString.length()>5){
//data= inString.substring(4,6); //estraggo i decimali della temperatura
dataStr.append(inString.substring(6,8)); //estraggo i decimali della temperatura
dataStr.append(":");
dataStr.append(inString.substring(4,6)); //estraggo i decimali della temperatura
dataStr.append(":");
dataStr.append(inString.substring(2,4)); //estraggo le decine e unità della temperatura
//Serial.print("tempin ricevuta ");
//Serial.println(dataStr);
//tempin=data;
//dataFloat = (atof(dataStr));
//Serial.print("tempin float ");
//Serial.println(dataFloat);
break