Sziasztok,
Adott egy Arduino Mega 2560-as panel, egy 7 colos Nextion tapis LCD, három darab Max6675k hőmérő, illetve egy nyomásmérő 0,5-5V kimenettel ami 0-30 PSI között mér plusz egy Nema 17-es léptetőmotor.
A vezérlési feladat amit el kell látnia az mérni, és folyamatosan megjeleníteni a kijelzőn a hőmérséklet értékeket, a nyomásmérőtől kapott adatra pedig PID vezérléssel egy huzatajtót mozgat, illetve beállított értéken tart.
A program végleges változata még odébb van, jelenleg ott tartok, hogy kettő darab hőmérsékletet, és a nyomásértéket folyamatosan meg szeretném jeleníteni a kijelzőn.
Elkezdtem bíbelődni a "sisak" nevű hőmérővel, a többi érték beállítása még nem történt meg, mivel ez sem működik megfelelően.
A program működik, soros monitoron minden szépen látszik is, de a kijelzőre nem jut ki a mért érték, vagy ha igen, akkor is csak egyszer.( ha lehúzom az LCD tápját és visszaadom) A csatolt képen továbbá az is látszik, hogy ha a sisak értékre ugyanazt méri mint az előző, akkor nem küld újabbat.
Tudnátok ebben segíteni, hogy az LCD-re miért nem jut ki adat? ( az 50,22 érték azt jelenti, hogy nem kapott adatot írhattam volna error-t is )
A kód:
#include <max6675.h>
float sisak;
float sisakold;
float sisaknew;
float cefre; //Hőmérséklet változók
int pressureIn = A0;
int sensorValue = 0;
float barValue = 0;
int Pressure = 0; //Nyomásméréshez szükséges változók
int T0_gnd = 45;
int T0_vcc = 47;
int T0_so = 53;
int T0_cs = 51;
int T0_sck = 49; //Max6675 K-hőelemhez szükséges lábkiosztás
int T1_gnd = 33;
int T1_vcc = 35;
int T1_so = 41;
int T1_cs = 39;
int T1_sck = 37; //Max6675 K-hőelemhez szükséges lábkiosztás
MAX6675 thermocouple(T0_sck, T0_cs, T0_so);
MAX6675 thermocouple1(T1_sck, T1_cs, T1_so); //Max6675 K-hőelem könyvtárához kell
void setup() {
Serial.begin(9600); // Soros port nyitás
pinMode(T0_vcc, OUTPUT);
pinMode(T0_gnd, OUTPUT);
pinMode(T1_vcc, OUTPUT);
pinMode(T1_gnd, OUTPUT);
digitalWrite(T0_vcc, HIGH);
digitalWrite(T0_gnd, LOW);
digitalWrite(T1_vcc, HIGH);
digitalWrite(T1_gnd, LOW); // Kimenetek beállítása, hőelemek táp alá
}
void loop() {
sisaknew = (thermocouple.readCelsius()); // Hőmérséklet érték beolvasása
(Serial.available()>1); // bevallom nem tudom mi célt szolgál egy másik működő mérésemben benne volt
if (sisaknew==sisakold)
{;}
else
{ sisakold=sisaknew; // szintén nem tiszta a dolog, hogy miért kell az if, else kombó de a másik mérésem csak így működött.
sisak=sisaknew;
Serial.print("sisak.txt="); // a nextion sisak.txt=**** néven várja a kiírandó adatot
Serial.write(0x22);
Serial.print(sisak);
Serial.write(0x22);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff); // szintén a várt formátum miatt szükséges
}
cefre = (thermocouple1.readCelsius()); // mivel az első hőmérséklet sem tökéletes, ezért nem csináltam tovább, de a soros monitoron így is jön
sensorValue = analogRead(pressureIn);
Pressure = map(sensorValue, 0, 1023, -28, 272);
barValue = Pressure * 0.006895;
Serial.print("cefre.txt=");
Serial.print(cefre);
Serial.print("press.txt=");
Serial.println(barValue);
delay(1000);
Pid huzatvezérlés nyomás függvényében (Nextion LCD)
Pid huzatvezérlés nyomás függvényében (Nextion LCD)
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Re: Pid huzatvezérlés nyomás függvényében (Nextion LCD)
Elsőre kellene Nextion lib!
Én ezt találtam: https://github.com/bborncr/nextion
Telepíteni, megnézni a minta alkalmazásokat!
Aztán be kelene hivni:
Ezek mind hiányoznak a programodból!
Első Google találat: http://openhardware.gridshield.net/home ... or-arduino
Én ezt találtam: https://github.com/bborncr/nextion
Telepíteni, megnézni a minta alkalmazásokat!
Aztán be kelene hivni:
Kód: Egész kijelölése
#include <Nextion.h>
//Hova kötötted??? Példányosítani kel:
Serial1 nextion(18, 19);// Nextion TX1 to pin 18 and RX1 to pin 19 of Arduino Mega
Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps
void setup() {
Serial.begin(9600);
myNextion.init(); // Üzembe helyezés!
}
void loop() {
// feliratot kirakni
myNextion.setComponentText("t0", "Hello");
delay(1000);
int value = 1234;
myNextion.setComponentText("t0", String(value));
delay(1000);
}
Első Google találat: http://openhardware.gridshield.net/home ... or-arduino
Re: Pid huzatvezérlés nyomás függvényében (Nextion LCD)
Köszi a választ, próbáltam az általad is említett megoldást, és a mintaalkalmazást is. Ellenőrzés közben hibára fut a
Nextion myNextion(nextion, 9600);
soron, hogy :
error: 'myNextion' was not declared in this scope
exit status 1
'Nextion' does not name a type
Nextion myNextion(nextion, 9600);
soron, hogy :
error: 'myNextion' was not declared in this scope
exit status 1
'Nextion' does not name a type
Re: Pid huzatvezérlés nyomás függvényében (Nextion LCD)
Megvan! Köszönöm a választ, rossz volt a nextion lib amit használtam.... Nem tudom honnan szedtem... Félrevezetett egy olyan példaprogram amit a Nextion könyvtár nélkül is lehetett használni. De így lényegesen egyszerűbb. A kód, ha később szükségeltetik valakinek.
Kód: Egész kijelölése
#include <SoftwareSerial.h>
#include <Nextion.h>
#include <max6675.h>
SoftwareSerial nextion(18, 19);// Nextion TX to pin 2 and RX to pin 3 of Arduino
Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps
float sisak;
float cefre; //Hőmérséklet változók
int pressureIn = A0;
int sensorValue = 0;
float barValue = 0;
int Pressure = 0; //Nyomásméréshez szükséges változók
int T0_gnd = 45;
int T0_vcc = 47;
int T0_so = 53;
int T0_cs = 51;
int T0_sck = 49; //Max6675 K-hőelemhez szükséges lábkiosztás
int T1_gnd = 33;
int T1_vcc = 35;
int T1_so = 41;
int T1_cs = 39;
int T1_sck = 37; //Max6675 K-hőelemhez szükséges lábkiosztás
MAX6675 thermocouple(T0_sck, T0_cs, T0_so);
MAX6675 thermocouple1(T1_sck, T1_cs, T1_so); //Max6675 K-hőelem könyvtárához kell
void setup() {
Serial.begin(9600); // Soros port nyitás
myNextion.init();
pinMode(T0_vcc, OUTPUT);
pinMode(T0_gnd, OUTPUT);
pinMode(T1_vcc, OUTPUT);
pinMode(T1_gnd, OUTPUT);
digitalWrite(T0_vcc, HIGH);
digitalWrite(T0_gnd, LOW);
digitalWrite(T1_vcc, HIGH);
digitalWrite(T1_gnd, LOW); // Kimenetek beállítása, hőelemek táp alá
}
void loop() {
sisak = (thermocouple.readCelsius()); // Hőmérséklet érték beolvasása
cefre = (thermocouple1.readCelsius());
sensorValue = analogRead(pressureIn);
Pressure = map(sensorValue, 0, 1023, -28, 272);
barValue = Pressure * 0.006895; //Nyomás érték átszámítása Bar-ba
myNextion.setComponentText("sisak", String(sisak));
myNextion.setComponentText("cefre", String(cefre));
myNextion.setComponentText("press", String(barValue)); // Adatok kiküldése a kijelzőre
Serial.print("cefre.txt=");
Serial.print(cefre);
Serial.print("press.txt=");
Serial.println(barValue); // Soros portra küldés
delay(1000);
}