Tony Evo ha scritto:@brando
il controller della 14.7 spartan.
per gli egt usero un Max6675.
E che cazz è?
Cioè tutta sta cosa e poi devi comperare un controller intero lo stesso???
Tony Evo ha scritto:@brando
il controller della 14.7 spartan.
per gli egt usero un Max6675.
Guzzi82 ha scritto:Io ho fatto lo stesso tuo lavoro. Identico.
Ti allego il codice che ho usato e che funziona.
Spero vivamente di avere salvato l'ultima versione....
Unica differenza, io avevo usato un arduino micro (non ho letto cosa usi tu ma immagino uno r3) che è piccolissimo, grosso la metà del display.
Provalo.
Codice: Seleziona tutto
// Sample Arduino MAX6675 Arduino Sketch
#include "max6675.h"
int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
void setup() {
Serial.begin(9600);
// give the MAX a little time to settle
delay(500);
}
void loop() {
// basic readout test
Serial.print("Deg C = ");
Serial.print(ktc.readCelsius());
Serial.print("\t Deg F = ");
Serial.println(ktc.readFahrenheit());
delay(500);
}
Codice: Seleziona tutto
/*
LiquidCrystal Library
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* LCD VSS pin to ground
* LCD VCC pin to 5V
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
* ingresso valore dal modulo AFR pin 0
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
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
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(3, 0);
lcd.print("ACCENSIONE");
*/
lcd.setCursor(2, 0);
lcd.print("BENVENUTO");
lcd.setCursor(4, 1);
lcd.print("A BORDO");
/*
lcd.setCursor(3, 0);
lcd.print("BENVENUTO");
lcd.setCursor(4, 1);
lcd.print("ABOARD");
*/
// 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);
// applico un piccolo ritardo per stabilizzare la lettura
delay(delayValue);
}
Codice: Seleziona tutto
// Librerie:
#include <LiquidCrystal.h>
#include <max6675.h>
// Pin librerie:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
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;
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, 2);
//Stampo il valore EGT sul display:
lcd.print("EGT = ");
lcd.print(ktc.readCelsius());
// applico un piccolo ritardo per stabilizzare la lettura
delay(delayValue);
}
Torna a “Elettronica generale”
Visitano il forum: Nessuno e 26 ospiti