mischiare due sketch

ho realizzato un circuito che in base alla temperatura letta da una termocoppia mi cambia la posizione dello stepper e mi indica la temperatura su un display.
Ho creato due sketch, uno che mi indica la temperatura sul display e l'altro che mi cambia la posizione dello stepper in base alla temperatura. questi sketch li ho recuperati dal web e ho modificato qualche valore e basta e funzionano bene.

questo è il codice per il display e la termocoppia

#include <LiquidCrystal.h>

/* Corrispondenza pin LCD <-> pin digitali di Arduino */

#define RS  12
#define EN  11
#define D7  2  
#define D6  3
#define D5  4
#define D4  5

/* Numero del pin analogico sul quale è collegato l'AD595  */
#define AD595_pin 5

/* Definizioni globali */
float vref = 5.0;	                      // Vref dell'ADC (quell'interno è di 1,1V)
LiquidCrystal lcd( RS, EN, D4, D5, D6, D7 ); // 'lcd' è una variabile di tipo LiquidCrystal */


/* Impostazione dell'hardware */

void setup() 
{
  analogReference( DEFAULT );  // per l'ADC usiamo il Vref interno da 1,1V (migliore precisione)
  analogRead( AD595_pin );       // Prima lettura "a vuoto" (serve per l'assestamento dell'ADC)
  lcd.begin( 4, 16 );           // Impostazione per l' LCD (4x16)
}

void loop()
{
  float temp = readTemp();  // legge il valore della temperatura e la memorizza nella var. temp.
  sendTempToLCD( temp );    // invia il valore al LCD
}

/* Legge la temperatura */
float readTemp()
{
  float temp = 0.0;       // valore convertito in temperatura (°C)
  int val = 0;            // valore quantizzato dall'ADC [0..1023]
  int nread = 5;          // numero di letture (da 5 a 8)
  float somma = 0.0;      // somma delle letture
  for (int i=0; i<nread; i++)
  {
    val = analogRead( AD595_pin );              // legge il dato della tensione sul pin 'LM35_pin' 
    temp = ( 100.0 *  vref * val ) / 1024.0;   // lo converte in °C
    somma += temp;                             // aggiunge alla somma delle temperature lette   
  }   
  return ( somma / nread );                     // ne calvola il valore medio 
}

/* Invia la temperatura su un LCD (modo 4bit) */
void sendTempToLCD( float temp )
{
  lcd.clear();               // Pulisce lo schermo 
  lcd.setCursor( 0, 0 );     // Va in posizione di home: colonna 1, riga 1
  lcd.print( "Temperatura FUMI");
  lcd.setCursor( 0, 1 );     // Va in posizione di home: colonna 1, riga 2
  lcd.print( temp );         // Stampa solo la parte intera della temp.
  lcd.print( ' ' );          // Stampa uno spazio
  lcd.print( (char) 223 );   // Stampa '°'
  lcd.print( 'C' );
  delay( 1000 );
}

e questo è per lo stepper e la termocoppia

#include <Stepper.h>
#define STEPS 1000

Stepper stepper(STEPS, 8, 9, 10, 11);

long previous = STEPS / 2;

void setup()
{
  stepper.setSpeed(20);
}

void loop()
{
  long val = (long)analogRead(5) * STEPS / 1024;

  stepper.step(val - previous);

  previous = val;
}

in futuro vorrei inserire un menù che mi permette di modificare i passi e la velocità dello stepper tramite una tastiera analogica letta su un solo pin analogico di arduino, sperando che inizzi ad imparare qualcosa a livello di programmazione!

nel primo sketch metti il secondo sketch, ma al posto di analogRead al motore gli pasi temp.

Ho creato due sketch

permettimi di dubitare di questa affermazione

infatti li ho recuperati in giro per il web, l'ho scritto anche su!

mi è sfuggito :slight_smile:

comunque loop e setup vanno unificati, e lo stesso vale per le variabili globali, inlude e define.

invece le altre funzioni non vanno unite, nel senso che se due funzioni si chiamano nello stesso modo, allora una delle due va chiamato in un altro modo, ma va comunque inclusa.

Prova, se hai problemi posta il codice nuovo e l'errore che ti compare e vediamo come si risolve

lesto:
nel primo sketch metti il secondo sketch, ma al posto di analogRead al motore gli pasi temp.

Ho creato due sketch

permettimi di dubitare di questa affermazione

Se non modifica e/o il primo e/o il secondo non va, lo stepper ed il display utilizzano alcuni degli stessi pin

ho cambiato i pin usati dal display e dallo stepper e unificato void setup e void loop ed impostato lo stesso pin analogico per la lettura della termocoppia non mi da errore, devo provare con il circuito e vedere come si comporta

provato con il circuito, funziona discretamente. ho problemi con il delay del display, cioè se imposto il delay a 1 secondo lui muove lo stepper dopo un secondo ed aggiorna il display ed mi abbassa la velocità di movimento dello stepper cioè non posso impostare la velocità a 100 ma solo 20, ho provato con delay a 20 ma va in crisi e mi perde i passi. Si può escludere lo stepper dal delay??

non usare il delay, ma usa la millis.
la millis ti da il tempo trascorso (in millisecondi) dall'avvio del micro (si azzera ogni 50 giorni)

quindi tu dici: se son trascorsi almeno 200 microsecondi (è un buon valore per evitare il fliccheraggio) aggiorna LCD

in realtà con un dealy a 200 microsec non dovresti avere problemi, ne con l'LCD ne copl motore

se tolgo delay e metto millis mi da questo errore

C:\Arduino\arduino-1.0.1\hardware\arduino\cores\arduino/Arduino.h: In function 'void sendTempToLCD(float)':
C:\Arduino\arduino-1.0.1\hardware\arduino\cores\arduino/Arduino.h:105: error: too many arguments to function 'long unsigned int millis()'
prova_display_stepper_ad595:72: error: at this point in file

un'altra domanda se alimento il circuito e non alimento arduino mi si accendono fievolmente i led, i led della board di arduino, perchè?? ho notato che l'alimentazione arriva da qualche pin del display, devo mettere dei diodi??

bhe certo, non basta cambiare il comando alla cieca, bisogna capire a che cosa serve.
tutti (o quasi) i comandi che puoi usare sono quì, nel magico reference:

e anche le librerie ufficiali:

poi se vuoi esempi di codice, o altre librerie non ufficiali il playgound è fonte di conoscienza:
(questo è quello in italiano: Arduino Playground - HomePage)