Pages: [1]   Go Down
Author Topic: codice da snellire  (Read 129 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

salve ragazzi...

avrei bisogno di qualche consiglio da voi esperti...

ho scritto questo semplice codice per leggere la temperatura di 3 sensori DS18B20 e gli ho dato degli intervalli per accendere e spegnere le 3 ventole con il relativo scambio visivo su lcd.

questa parte del codice funziona senza problemi però vorrei sapere se lo stesso si può snellire avendo le stesse funzioni

grazie

Code:
#include "OneWire.h"
#include "DallasTemperature.h"
#include "Wire.h"
#include "LiquidCrystal_I2C.h"

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

int temp1;
int temp2;
int temp3;
const int fanvasca=4;
const int fanplafo=5;
const int fancpu=6;

LiquidCrystal_I2C lcd(0x38,20,4);

void temperatura();

void setup (void) {
  lcd.init();
  Wire.begin();
  RTC.begin();
  sensors.begin();
  pinMode(fanvasca, OUTPUT);
  pinMode(fanplafo, OUTPUT);
  pinMode(fancpu, OUTPUT);
}

void loop(void) {
  temperatura();
}

void temperatura(){
  sensors.requestTemperatures();
  lcd.setCursor(0,2);
  lcd.print("T:");
  temp1=sensors.getTempCByIndex(0);
  lcd.print(temp1);
  lcd.print((char)223);
  lcd.print("C");
  lcd.print(" T:");
  temp2=sensors.getTempCByIndex(1);
  lcd.print(temp2);
  lcd.print((char)223);
  lcd.print("C");
  lcd.print(" T:");
  temp3=sensors.getTempCByIndex(2);
  lcd.print(temp3);
  lcd.print((char)223);
  lcd.print("C");
 
 
  if ((temp1)>=50){
    digitalWrite(fanplafo, HIGH);
    lcd.setCursor(0,3);
    lcd.print("F:-ON-");
    }
  else if ((temp1)<=45){
    digitalWrite(fanplafo, LOW);
    lcd.setCursor(0,3);
    lcd.print("F: OFF");
    }
   
    if ((temp2)>=24){
    digitalWrite(fanvasca, HIGH);
    lcd.setCursor(7,3);
    lcd.print("F:-ON-");
    }
  else if ((temp2)<=22){
    digitalWrite(fanvasca, LOW);
    lcd.setCursor(7,3);
    lcd.print("F: OFF");
    }
   
    if ((temp3)>=29){
    digitalWrite(fancpu, HIGH);
    lcd.setCursor(14,3);
    lcd.print("F:-ON-");
    }
  else if ((temp3)<=25){
    digitalWrite(fancpu, LOW);
    lcd.setCursor(14,3);
    lcd.print("F: OFF");
    }
  } 
Logged

Switzerland
Online Online
Faraday Member
**
Karma: 111
Posts: 5899
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mah ... molto dipende da cosa intendi per "snellire" ...

Sicuramente puoi risparmiare 3 bytes ( smiley-mr-green) cambiando :

Code:
const int fanvasca=4;
const int fanplafo=5;
const int fancpu=6;

in :

Code:
const byte fanvasca=4;
const byte fanplafo=5;
const byte fancpu=6;

e, volendo, ma proprio per pulizia, potresti fare una funzione, chiamiamola setFan, alla quale passi due valore il pin e lo stato da assumere, per fare quello che fai più volte ... un qualche cosa del tipo :

Code:
void setFan(fanPin, fanStatus) {
    byte curPos;
    
    switch (fanPin) {
        case fanplafo :
            curPos = 0;
            break;
        case fanvasca :
            curPos = 7;
            break;
        case fancpu :
           curPos = 7;
            break;
    }

    digitalWrite(fanPin, fanStatus);
    lcd.setCursor(curPos,3);
    if (fanStatus) lcd.print("F:-ON-");
    else lcd.print("F:-OFF-");
}

... così che nei tuoi if relativi alla temperatura richiami semplicemente la funzione passandogli il pin e HIGH o LOW e sfoltisci un po' il codice ...

N.B. : 1. Occhio, non l'ho provata e magari mi è scappato qualche errore ... ma spero sia chiaro il concetto  smiley-lol
          2.  Non sempre una cosa così è consigliabile ... dipende se uno deve dare priorità alle dimensioni del codice o alla velocità di esecuzione ... quindi NON è una regola generale ma va valutata a seconda dei casi smiley-wink


Guglielmo
« Last Edit: November 12, 2013, 01:38:56 am by gpb01 » Logged

Search is Your friend ... or I am Your enemy !

Pages: [1]   Go Up
Jump to: