Pagina 7 di 9

Re: Arduino for dummies

Inviato: 08/08/2016, 21:19
da Tony Evo
errore

Codice: Seleziona tutto

Arduino:1.6.10 Hourly Build 2016/05/18 07:34 (Windows 10), Scheda:"Arduino/Genuino Uno"

ATTENZIONE: Cartella spuria .github nella libreria 'MAX6675 library'
sketch_aug08b:7: error: 'ktcCLK' was not declared in this scope

 MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

             ^

sketch_aug08b:7: error: 'ktcCS' was not declared in this scope

 MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

                     ^

sketch_aug08b:7: error: 'ktcSO' was not declared in this scope

 MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

                            ^

exit status 1
'ktcCLK' was not declared in this scope

Questo report potrebbe essere più ricco di informazioni con l'opzione
"Mostra un output dettagliato durante la compilazione"
abilitata in File -> Impostazioni

Re: Arduino for dummies

Inviato: 08/08/2016, 21:27
da Tony Evo
Ho risolto i problemi del codice precedente(ho cambiato l'ordine delle stringe)
e poi avevo il problema che sia afr che egt erano sulla stessa riga e ho risolto anche quello

Codice: Seleziona tutto

// Librerie:
#include <LiquidCrystal.h>
#include <max6675.h>

// Pin librerie:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


int sensorPin = A0;    // definisce il pin al quale applicare il segnale dal modulo AFR
int sensorValue1 = 0;  // variable to store the value coming from AFR module
int sensorValue0 = 0;  // variable to store the value coming from AFR module
int sensorValue2 = 0;  // variable to store the value coming from AFR module
float lagFactor = 40.00;  // definizione del fattore di smorzamento della lettura
int delayValue = 100;  // attesa tra le varie letture
float AFR = 0;  // variable to store the real AFR value
float AFR1 = 0;  // variable to store the real AFR value
int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  //inizializza la comunicazione seriale col pc per la visualizzazione dei dati
  Serial.begin(9600);

  // MESSAGGIO INIZIALE
  // imposta la posizione del cursore e scrive un messaggio iniziale sul LCD.
      lcd.setCursor(2, 0);
      lcd.print("BENVENUTO");
      lcd.setCursor(4, 1);
      lcd.print("A BORDO");
   
    // APPLICA UN RITARDO DI 5 SECONDI
  delay(5000);
     
     // pulisce lo schermo
   lcd.clear();

   //INTESTAZIONE MONITOR SERIALE
   //stampa su monitor seriale i 5 dati principali
     Serial.print("lettura precedente DAC");
          Serial.print("lettura attuale DAC");
              Serial.print("lettura precedente VOLT");
                  Serial.print("lettura attuale VOLT");
                       Serial.println("AFR precedente");
}

void loop() {
  // memorizza la letture precedente in una nuova variabile
   sensorValue0 = sensorValue2 ;
  // legge l'ingresso sul pin 0
  sensorValue1 = analogRead(sensorPin);

  //calcolo il valore letto in Volt
  float voltage0= sensorValue0 * (5.0 / 1023.0);
  float voltage1= sensorValue1 * (5.0 / 1023.0);
 

      //stampo a monitor tutte le variabilii           
      Serial.print(sensorValue0   );
          Serial.print(sensorValue1   );
              Serial.print(voltage0,2   );
                  Serial.print(voltage1,2   );
                     Serial.println(AFR,2   );
   
  //CALCOLO DEL VALORE AFR
  // applico un filtro al valore letto per evitare i disturbi
  sensorValue2 = sensorValue0 + (sensorValue1 - sensorValue0)*(0.40);
  // trasforma la lettura nel valore AFR
     AFR = map ( sensorValue2 ,0 , 1023 ,1000 ,2000 );
     AFR1=AFR/100 ;

       //STAMPA SUL DISPLAY DEL VALORE AFR
       // posiziono il cursore sulla terza colonna ovvero la n°2, prima riga ovvero la n°0
       lcd.setCursor(3, 1);
       
       // stampo il valore AFR sul display:
       lcd.print("AFR = ");
       lcd.print(AFR1);
       
       //Mi posiziono sulla 3° colonna, seconda riga.
       lcd.setCursor(3, 0);
       
       //Stampo il valore EGT sul display:
       lcd.print("EGT = ");
       lcd.print(ktc.readCelsius());
       
       // applico un piccolo ritardo per stabilizzare la lettura
       delay(delayValue);
}


ora devo solo risolvere il fatto che l'egt non funziona,rimane ad un valore fisso di 25.25°(variava con il programma base)

Re: Arduino for dummies

Inviato: 08/08/2016, 21:37
da Tony Evo
risolto anche questo

Codice: Seleziona tutto

// Librerie:
#include <LiquidCrystal.h>
#include <max6675.h>

// Pin librerie:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


int sensorPin = A0;    // definisce il pin al quale applicare il segnale dal modulo AFR
int sensorValue1 = 0;  // variable to store the value coming from AFR module
int sensorValue0 = 0;  // variable to store the value coming from AFR module
int sensorValue2 = 0;  // variable to store the value coming from AFR module
float lagFactor = 40.00;  // definizione del fattore di smorzamento della lettura
int delayValue = 100;  // attesa tra le varie letture
float AFR = 0;  // variable to store the real AFR value
float AFR1 = 0;  // variable to store the real AFR value
int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  //inizializza la comunicazione seriale col pc per la visualizzazione dei dati
  Serial.begin(9600);

  // MESSAGGIO INIZIALE
  // imposta la posizione del cursore e scrive un messaggio iniziale sul LCD.
      lcd.setCursor(2, 0);
      lcd.print("BENVENUTO");
      lcd.setCursor(4, 1);
      lcd.print("A BORDO");
   
    // APPLICA UN RITARDO DI 5 SECONDI
  delay(5000);
     
     // pulisce lo schermo
   lcd.clear();

   //INTESTAZIONE MONITOR SERIALE
   //stampa su monitor seriale i 5 dati principali
     Serial.print("lettura precedente DAC");
          Serial.print("lettura attuale DAC");
              Serial.print("lettura precedente VOLT");
                  Serial.print("lettura attuale VOLT");
                       Serial.println("AFR precedente");
}

void loop() {
  // memorizza la letture precedente in una nuova variabile
   sensorValue0 = sensorValue2 ;
  // legge l'ingresso sul pin 0
  sensorValue1 = analogRead(sensorPin);

  //calcolo il valore letto in Volt
  float voltage0= sensorValue0 * (5.0 / 1023.0);
  float voltage1= sensorValue1 * (5.0 / 1023.0);
 

      //stampo a monitor tutte le variabilii           
      Serial.print(sensorValue0   );
          Serial.print(sensorValue1   );
              Serial.print(voltage0,2   );
                  Serial.print(voltage1,2   );
                     Serial.println(AFR,2   );
   
  //CALCOLO DEL VALORE AFR
  // applico un filtro al valore letto per evitare i disturbi
  sensorValue2 = sensorValue0 + (sensorValue1 - sensorValue0)*(0.40);
  // trasforma la lettura nel valore AFR
     AFR = map ( sensorValue2 ,0 , 1023 ,1000 ,2000 );
     AFR1=AFR/100 ;

       //STAMPA SUL DISPLAY DEL VALORE AFR
       // posiziono il cursore sulla terza colonna ovvero la n°2, prima riga ovvero la n°0
       lcd.setCursor(3, 1);
       
       // stampo il valore AFR sul display:
       lcd.print("AFR = ");
       lcd.print(AFR1);
       
       //Mi posiziono sulla 3° colonna, seconda riga.
       lcd.setCursor(3, 0);
       
       //Stampo il valore EGT sul display:
       lcd.print("EGT = ");
       lcd.print(ktc.readCelsius());
       
       // applico un piccolo ritardo per stabilizzare la lettura
       delay(500);
}


era il delay non impostato

Re: Arduino for dummies

Inviato: 08/08/2016, 21:50
da Tony Evo
ultima minchiata e sono pronto.
sullo schermetto 16x2 è impossibile creare un logo(fiat) tipo come si faceva con i caratteri ASCII?

Re: Arduino for dummies

Inviato: 09/08/2016, 0:41
da ricki158
Bl4Ck ha scritto:In giro per internet ho visto qualche tutorial... sicuramente si può fare. Però non ci ho mai provato...

Il problema è la comunicazione Arduino / PC / tutto il resto dei programmi. Per tutto il resto viaggi con i multiplexer.

Re: Arduino for dummies

Inviato: 09/08/2016, 0:45
da ricki158
Tony Evo ha scritto:ultima minchiata e sono pronto.
sullo schermetto 16x2 è impossibile creare un logo(fiat) tipo come si faceva con i caratteri ASCII?

Si potrebbero creare dei caratteri speciali, ma non mi ricordo come si fa e non credo sia poi così semplice.

Re: Arduino for dummies

Inviato: 09/08/2016, 12:46
da vitoos
Qualcosa si può fare ma è un casino a livello di codice, in pratica devi accendere i pixel che ti servono in ogni riquadro di un carattere mettendo le coordinate del cursore e le sottocoordinate per accendere il pixel che ti servono

Re: Arduino for dummies

Inviato: 09/08/2016, 13:17
da ricki158
Essatto, però dovresti entrare nel codice dell'integrato del display e crearti un carattere tutto tuo flashando la memoria interna dell'integrato. Una volta fatto ciò devi richiamare il carattere speciale in una maniera speciale. Questo se non mi ricordo male.

Re: Arduino for dummies

Inviato: 09/10/2016, 12:22
da Bl4Ck
Eccolo... al solito bisogna verificare se compila :lol:

Codice: Seleziona tutto

// Librerie:
#include <LiquidCrystal.h>
#include <max6675.h>

// Pin librerie:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


int sensorPin = A0;    // definisce il pin al quale applicare il segnale dal modulo AFR
int sensorValue1 = 0;  // variable to store the value coming from AFR module
int sensorValue0 = 0;  // variable to store the value coming from AFR module
int sensorValue2 = 0;  // variable to store the value coming from AFR module
float lagFactor = 40.00;  // definizione del fattore di smorzamento della lettura
float AFR = 0;  // variable to store the real AFR value
float AFR1 = 0;  // variable to store the real AFR value
int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);

  // MESSAGGIO INIZIALE
  // imposta la posizione del cursore e scrive un messaggio iniziale sul LCD.
      lcd.setCursor(2, 0);
      lcd.print("BENVENUTO");
      lcd.setCursor(4, 1);
      lcd.print("A BORDO");
   
    // APPLICA UN RITARDO DI 5 SECONDI
  delay(5000);
     
     // pulisce lo schermo
   lcd.clear();

}

void loop() {
  // memorizza la letture precedente in una nuova variabile
   sensorValue0 = sensorValue2 ;
  // legge l'ingresso sul pin 0
  sensorValue1 = analogRead(sensorPin);

  //calcolo il valore letto in Volt
  float voltage0= sensorValue0 * (5.0 / 1023.0);
  float voltage1= sensorValue1 * (5.0 / 1023.0);
 
  //CALCOLO DEL VALORE AFR
  // applico un filtro al valore letto per evitare i disturbi
  sensorValue2 = sensorValue0 + (sensorValue1 - sensorValue0)*(0.40);
  // trasforma la lettura nel valore AFR
     AFR = map ( sensorValue2 ,0 , 1023 ,1000 ,2000 );
     AFR1=AFR/100 ;

       //STAMPA SUL DISPLAY DEL VALORE AFR
       // posiziono il cursore sulla terza colonna ovvero la n°2, prima riga ovvero la n°0
       lcd.setCursor(3, 1);
       
       // stampo il valore AFR sul display:
       lcd.print("AFR = ");
       lcd.print(AFR1);
       
       //Mi posiziono sulla 3° colonna, seconda riga.
       lcd.setCursor(3, 0);
       
       //Stampo il valore EGT sul display:
       lcd.print("EGT = ");
       lcd.print(ktc.readCelsius());
}

Re: Arduino for dummies

Inviato: 09/10/2016, 17:49
da Tony Evo
ho provato a compliarlo a casa e sembra essere ok nella compliazione.
lo proverò fra una settimana