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
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