[SOLVED]Sensor Shield e sketch che funziona solo su una scheda

Ciao a tutti,
sto riscontrando un problema strano e non riesco a capire come sia possibile.

Ho uno sketch che comanda un relè e riceve informazioni da due sensori di temperatura e una tastiera analogica, inoltre ci sono 2 schermi LCD collegati tramite i2c. Lo sketch si compila senza errori.

Quando lo scrissi lo feci sulla base di una scheda UNO e delle varie parti collegate alla scheda tramite un Sensor shield v5.0.

Passate un paio di settimane, dovendo aspettare la consegna di un componente, non ho toccato niente dello sketch, ma ho realizzato i cavi per collegare tutto in maniera pulita.

Oggi collego finalmente tutto e il relè scatta in continuazione. Ho fatto varie prove ma lui continua a scattare in continuazione, ignorando lo sketch. Mi è quindi venuta un’idea: provare lo sketch su Mega, in teoria dovrebbe funzionare tutto tramite il sensor shield tranne gli schermi.
E infatti funziona tutto alla perfezione.

Il relè scatta solo quando richiesto e gli schermi, collegati ai pin giusti (20 e 21) funzionano anche loro.

Ora la mia domanda: Come è possibile che lo stessa sensor shield, lo stesso sketch e gli stessi componenti funzionino in maniera corretta su Mega ma non su UNO? Inoltre, lo stesso sketch ha sempre funzionato su UNO mentre lo ideavo e lo programmavo…

Qualcuno mi sa dire come posso far funzionare di nuovo le cose su UNO?

Vi allego lo sketch così potete dare un’occhiata

/* Library for DS18B20 and declaration of sensors */
#include "Wire.h"
#include "OneWire.h"
#include "DallasTemperature.h"
#define ONE_WIRE_BUS_1 A1
#define ONE_WIRE_BUS_2 A2
OneWire ourWire1(ONE_WIRE_BUS_1);
OneWire ourWire2(ONE_WIRE_BUS_2);
DallasTemperature sensor1(&ourWire1);
DallasTemperature sensor2(&ourWire2);

/* Improved library to read the keypad: http://www.hellonull.com/?p=282 
 * & LCD Library and instance 
 */
#include "AnalogKeypad_Reader.h"
AnalogKeypad_Reader keypad;

/* Library for LCD I2C screens*/
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd(0x27,16,2);  
LiquidCrystal_I2C lcd2(0x25,16,2);

/* Stepper Library and instance */
#include <Stepper.h>
int stepsPerRevolution = 15;
Stepper myStepper(stepsPerRevolution, 2, 3, 11, 12);

/** Relay **/
#define RELAY1 A5 //Relay's pin

/* Definition of variables:
 * err1 & err2 -> DS18B20's error. Calibration should be done or leave the varibale to 0
 * tMin -> the minimum temperature to operate the process.
 * tMax -> the maximum temperature of the water to heat the acids.
 * val and state -> store the input pin status and the relay status. 
 */
int previous = 0;                   // Variable for stepper use
float err1 = -0.5;
float err2 = 0.5;
float tMin = 38;
float tMax = 42;
int val = 0;
int state = 0;
int stateSt =0;

void setup(){
  pinMode(RELAY1, OUTPUT);
  lcd.init();
  lcd.backlight();
  lcd2.init();
  lcd2.backlight();
  delay(1000);
  Serial.begin(9600);
  Serial.println("Misura temperature con sensori DS18B20");
  Serial.println("T1 - > Temperatura acqua");
  Serial.println("T2 - > Temperatura acido");
  sensor1.begin();
  sensor2.begin();
  sensor1.setResolution(11);
  sensor2.setResolution(11);
}
/* Loop function */
void loop(){
  sensor1.requestTemperatures();
  sensor2.requestTemperatures();
  float T1 = sensor1.getTempCByIndex(0) + err1;
  float T2 = sensor2.getTempCByIndex(0) + err2;
  Serial.println("------");
  Serial.print("Sonda T1: ");
  Serial.print(T1);
  Serial.print(" C ");
  Serial.print("Errore: ");
  Serial.println(err1);
  Serial.print("Sonda T2: ");
  Serial.print(T2);
  Serial.print(" C ");
  Serial.print("Errore: ");
  Serial.println(err2);
/** LCD temperatures print **/
  lcd.setCursor(0,0);
  lcd.print("T1 ");
  lcd.print(T1, 1);
  lcd.print("  ");
  lcd.setCursor(0,1);
  lcd.print("T2 ");
  lcd.print(T2, 1);
  lcd.print("  ");

/*  Operation:
 *  Pressing UP_KEY the sketch will activate the ralay and starting the function heater(); 
 *  Pressing UP_KEY again to deactivate the relay board.
 */
val = keypad.getKey();
  if (val == UP_KEY){  
    state = 1 - state;  
  } 
  if (state == 1){  
    heater();
  }  
  else {  
    digitalWrite(RELAY1, HIGH);            //Relay disconnected -> "OUT"
    lcd2.setCursor(10,0);
    lcd2.print("H: OUT");
  }
/*  STEPPER OPERATION: alpha test   
 *  Pressing DOWN_KEY make the stepper works.
 *  Press it again to make it stop.
 */
val = keypad.getKey();
  if (val == DOWN_KEY) {  
    stateSt = 1 - stateSt;  
  } 
  if (stateSt == 1) {  
    stepr();
  }  
  else {
    lcd2.setCursor(0,0);
    lcd2.print("St:OFF");
    Serial.println("Stepper OFF");
  }
/*  Press RIGHT_KEY to make the stepper work.
 *  Release the key to make it stop.
 */
 val = keypad.getKey();    
  if (val == RIGHT_KEY){
    stepr();
    Serial.println("Stepper ON");
  } 
}
/*  heater(); FUNCTION
 *  Core of the relay board
 *  If T2<38 AND T1<42 -> Heater ON
 *  If T1<38 -> Heater ON
 *  Else -> Heater OFF
 */
void heater(){
float T1 = sensor1.getTempCByIndex(0) + err1;  //Request temp. and calculating error
float T2 = sensor2.getTempCByIndex(0) + err2;
    lcd2.setCursor(10,0);
    lcd2.print("H: ");
    if(T2 < tMin && T1 < tMax){     //If statament to activate relay when tCal1 < tMax (42°) AND tCal2 < tMin (38°)
      digitalWrite(RELAY1, LOW);          //Relay ON
      lcd2.print(" ON");
    }else if (T1 < tMin){
      digitalWrite(RELAY1, LOW);          //Relay ON
      lcd2.print(" ON");
    } else {
      digitalWrite(RELAY1, HIGH);         //Relay OFF
      lcd2.print("OFF");
    }
}
/* Stepper Function */
void stepr() {
  lcd2.setCursor(0,0);
  lcd2.print("St: On");
/* step one revolution  in one direction: */
  Serial.println("clockwise");
  myStepper.step(2*stepsPerRevolution);
  delay(10);
/* step one revolution in the other direction: */
Serial.println("counterclockwise");
  myStepper.step(-2*stepsPerRevolution);
  delay(10);
}
/** Relay **/
#define RELAY1 A5 //Relay's pin









Perchè colleghi il relè sul pin A5, che è usato dall'I2C

Fantastico!
Non sapevo che A5 fosse coinvolto nel i2c, visto che uso i due pin vicino al 13…

Grazie mille!
Funziona tutto!

bigjack:
Fantastico!
Non sapevo che A5 fosse coinvolto nel i2c, visto che uso i due pin vicino al 13...

Grazie mille!
Funziona tutto!

I due pin dopo AREF ? Sono un duplicato di A4 e A5, NON pin in più