mega heeft ruzie met tft en ethernet
6 berichten
• Pagina 1 van 1
mega heeft ruzie met tft en ethernet
beste,
ik heb een arduino mega 2560 met het kleine tft schermpje en een ethernet module.
nu had ik het probleem dan me sd kaart niet gelezen werd en na lang zoeken blijkt dat als ik de verbinding op pen 50 van de tft los haal dat hij het wel doet,
maar dan werkt mijn tft niet meer.
is er een mogenlijkheid om de tft verbinding op punt 50 om te zetten naar bv. pen 41(deze is nog vrij onder andere)
voor het geval dat hier mijn code:
alvast bedankt.
gr martijn
ik heb een arduino mega 2560 met het kleine tft schermpje en een ethernet module.
nu had ik het probleem dan me sd kaart niet gelezen werd en na lang zoeken blijkt dat als ik de verbinding op pen 50 van de tft los haal dat hij het wel doet,
maar dan werkt mijn tft niet meer.
is er een mogenlijkheid om de tft verbinding op punt 50 om te zetten naar bv. pen 41(deze is nog vrij onder andere)
voor het geval dat hier mijn code:
- Code: Alles selecteren
#include <OneWire.h>
#include <TFT.h>
#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
//ethernet kaart gebruikt pin: 8 11 12 en 13
const int ven1 = 22; // de pin voor ven1
const int ven2 = 23; // de pin voor ven2
const int ven3 = 24; // de pin voor ven3
const int pomp = 25;
const int Kachel = 26; // de pin voor Kachel
const int Reset = 2;
const int keteltemp = 3;
const int stroming = 7;
const int termostaat = 5; //xxxx11 is 6 geworden
const int termostaataanled = 27; //xxxx12 is 27 geworden
const int tempWater = A0;
const int storing = 5;
const int storingstroming = 49;
const int storingketeltemp = 48;
const int storingtempwater = 47;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 178, 121);
EthernetServer server(80);
File webFile;
// pin definition for the Uno
#define cs 10
#define dc 9
#define rst 6 //xxx8 is 4 geworden
OneWire ds(A0);
// create an instance of the library
TFT TFTscreen = TFT(cs, dc, rst);
// char array to print to the screen
char sensorPrintout[16];
String sensortext = ("aan");
void setup() {
#ifdef AVR
Wire.begin();
#else
Wire1.begin();
#endif
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
Serial.println("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("ERROR - SD card initialization failed!");
return;
}
Serial.println("SUCCESS - SD card initialized.");
if (!SD.exists("index.htm")) {
Serial.println("ERROR - Can't find index.htm file!");
return;
}
Serial.println("SUCCESS - Found index.htm file.");
if (!SD.exists("zolder.jpg")) {
Serial.println("ERROR - Can't find zolder.jpg file!");
return;
}
Serial.println("SUCCESS - Found zolder.jpg file.");
TFTscreen.begin();
pinMode(ven1, OUTPUT);
pinMode(ven2, OUTPUT);
pinMode(ven3, OUTPUT);
pinMode(Kachel, OUTPUT);
pinMode(pomp, OUTPUT);
pinMode(termostaataanled, OUTPUT);
pinMode(storing, OUTPUT);
pinMode(storingstroming, OUTPUT);
pinMode(storingketeltemp, OUTPUT);
pinMode(storingtempwater, OUTPUT);
pinMode(keteltemp, INPUT);
pinMode(Reset, INPUT);
pinMode(stroming, INPUT);
pinMode(termostaat, INPUT);
Serial.begin(9600);
digitalWrite(Kachel, HIGH);
digitalWrite(ven1, HIGH);
digitalWrite(ven2, HIGH);
digitalWrite(ven3, HIGH);
digitalWrite(pomp, HIGH);
digitalWrite(termostaataanled, LOW);
digitalWrite(storing, LOW);
digitalWrite(storingstroming, HIGH);
digitalWrite(storingketeltemp, HIGH);
digitalWrite(storingtempwater, HIGH);
}
void loop() {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
//Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print("ROM =");
for ( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
Serial.println(" Chip = DS18S20"); // or old DS1820
type_s = 1;
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
delay(0); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
Serial.print(" Data = ");
Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
Serial.print(data[i], HEX);
Serial.print(" ");
}
// Serial.print(" CRC=");
// Serial.print(OneWire::crc8(data, 8), HEX);
// Serial.println();
// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10) {
// "count remain" gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
//TFTscreen.stroke(255, 255, 255);
if (digitalRead (5)) {
TFTscreen.background(255, 0, 0);
}
else {
TFTscreen.background(0, 0, 0);
}
sensortext.toCharArray(sensorPrintout, 16);
String sensorVal = String(celsius);
sensorVal.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 40, 5);
TFTscreen.setTextSize(1);
TFTscreen.text("Temp:\n ", 0, 5);
TFTscreen.setTextSize(1);
TFTscreen.text("Pomp:\n ", 0, 25);
TFTscreen.setTextSize(1);
TFTscreen.text("Ven1:\n ", 0, 45);
TFTscreen.setTextSize(1);
TFTscreen.text("Ven2:\n ", 0, 65);
TFTscreen.setTextSize(1);
TFTscreen.text("Ven3:\n ", 0, 85);
TFTscreen.setTextSize(1);
TFTscreen.text("Kachel:\n ", 75, 5);
TFTscreen.setTextSize(1);
TFTscreen.text("K Max:\n ", 75, 25);
TFTscreen.setTextSize(1);
TFTscreen.text("Termos:\n ", 75, 45);
TFTscreen.setTextSize(1);
TFTscreen.text("Stroming:\n ", 75, 65);
TFTscreen.setTextSize(1);
TFTscreen.text("Max temp:\n ", 75, 85);
TFTscreen.setTextSize(1);
TFTscreen.stroke(255, 255, 255);
TFTscreen.setTextSize(1);
if (digitalRead (25)) {
sensortext = ("uit");
}
else {
sensortext = ("aan") ;
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 50, 25);
if (digitalRead (22)) {
sensortext = ("uit");
}
else {
sensortext = ("aan") ;
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 50, 45);
if (digitalRead (23)) {
sensortext = ("uit");
}
else {
sensortext = ("aan") ;
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 50, 65);
if (digitalRead (24)) {
sensortext = ("uit");
}
else {
sensortext = ("aan") ;
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 50, 85);
//storing
if (digitalRead (49)) {
sensortext = (""); //stroming
}
else {
sensortext = ("geen stroming");
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 40, 100);
if (digitalRead (48)) {
sensortext = (""); //ketel temp
}
else {
sensortext = ("ketel temp");
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 40, 110);
if (digitalRead (47)) {
sensortext = (""); //temp water
}
else {
sensortext = ("water temp");
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 40, 120);
//storing
if (digitalRead (26)) {
sensortext = ("uit");
}
else {
sensortext = ("aan") ;
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 135, 5);
if (digitalRead (3)) {
sensortext = ("uit");
}
else {
sensortext = ("aan") ;
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 135, 25);
if (digitalRead (11)) {
sensortext = ("aan");
}
else {
sensortext = ("uit") ;
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 135, 45);
if (digitalRead (7)) {
sensortext = ("Ok");
}
else {
sensortext = ("NOK") ;
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 135, 65);
if (celsius > 90) {
String (water);
if (water = 1) {
sensortext = ("aan");
}
}
else {
sensortext = ("uit") ;
}
sensortext.toCharArray(sensorPrintout, 16);
TFTscreen.text(sensorPrintout, 135, 85);
int toetsWaarde = digitalRead(Reset);
int toetsWaarde1 = digitalRead(stroming);
int toetsWaarde2 = digitalRead(termostaat);
int toetsWaarde3 = digitalRead(keteltemp);
if (celsius > 30.00) {
digitalWrite(ven1, LOW);
}
if (celsius < 25.00) {
digitalWrite(ven1, HIGH);
}
if (celsius > 45.00) {
digitalWrite(ven2, LOW);
}
if (celsius < 40.00) {
digitalWrite(ven2, HIGH);
}
if (celsius > 60.00) {
digitalWrite(ven3, LOW);
}
if (celsius < 50.00) {
digitalWrite(ven3, HIGH);
}
//storing
if (celsius > 90) {
digitalWrite(storing, HIGH);
digitalWrite(storingtempwater, LOW);
}
if (toetsWaarde1 == LOW && digitalRead(25) == LOW) {
digitalWrite(storing, HIGH);
digitalWrite(storingstroming, LOW);
}
if (toetsWaarde3 == LOW) {
digitalWrite(storing, HIGH);
digitalWrite(storingketeltemp, LOW);
}
//storing
//reset
if (toetsWaarde == HIGH) {
digitalWrite(storing, LOW);
digitalWrite(storingtempwater, HIGH);
digitalWrite(storingstroming, HIGH);
digitalWrite(storingketeltemp, HIGH);
}
//reset
if (toetsWaarde2 == HIGH) {
digitalWrite(pomp, LOW);
}
{
delay(1500);
}
if (toetsWaarde2 == HIGH && toetsWaarde3 == HIGH && toetsWaarde1 == HIGH) {
digitalWrite(Kachel, LOW);
}
else {
digitalWrite(Kachel, HIGH);
}
if (toetsWaarde2 == HIGH) {
digitalWrite(termostaataanled, HIGH);
}
else {
digitalWrite(termostaataanled, LOW);
}
if (toetsWaarde2 == LOW && tempWater <= 10) {
digitalWrite(pomp, HIGH);
}
if (celsius > 90) {
digitalWrite(Kachel, HIGH);
}
if (celsius < 10) {
digitalWrite(pomp, LOW);
}
Serial.println();
Serial.print("tempWater: ");
Serial.println(celsius);
Serial.print("Kachel: ");
Serial.println(digitalRead(26));
Serial.print("ven1: ");
Serial.println(digitalRead(22));
Serial.print("ven2: ");
Serial.println(digitalRead(23));
Serial.print("ven3: ");
Serial.println(digitalRead (24));
Serial.print("pomp: ");
Serial.println(digitalRead (25));
Serial.print("termostaat: ");
Serial.println(digitalRead (11) );
Serial.print("tempwater1: ");
Serial.println(float (celsius > 90));
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
webFile = SD.open("index.htm");
if (webFile) {
while (webFile.available()) {
byte data = webFile.read(); // read next byte
if ( data == '$')
{
byte token = webFile.read(); // read token after the '$'
switch ( token)
{
case 'A':
client.print(celsius);
break;
case 'B':
client.print(digitalRead (25));
break;
case 'C':
client.print(digitalRead (26));
break;
case 'D':
client.print(digitalRead (5));
break;
case 'E':
client.print(digitalRead (11));
break;
case 'F':
client.print(digitalRead (22));
break;
case 'G':
client.print(digitalRead (23));
break;
case 'H':
client.print(digitalRead (24));
break;
case 'I':
client.print(digitalRead (49));
break;
case 'J':
client.print(digitalRead (48));
break;
case 'K':
client.print(digitalRead (47));
break;
default:
// token not recognized, print data as if nothing happened.
client.write( data);
client.write( token);
break;
}
}
else {
client.write( data); // send byte client
}
}
webFile.close();
}
break;
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
client.stop();
}
}
alvast bedankt.
gr martijn
Advertisement
Re: mega heeft ruzie met tft en ethernet
Kun je vertellen welk TFT scherm je gebruikt ? Graag met een link naar het product.
Is dat het Arduino TFT scherm ?
En je gebruikt de standaard meegeleverde Arduino TFT library ?
Deze ? https://www.arduino.cc/en/Main/GTFT
Met deze library ? https://www.arduino.cc/en/Reference/TFTLibrary
En je prikt dat TFT shield niet op het board, maar je verbindt alles met draden ?
Maar dan hebben beide shields een SD socket, dat gaat niet goed.
De SPI bus is helaas niet zo goed gedefinieerd als de I2C bus. Daarom kunnen shields soms niet samen, als ze beide een SPI bus hebben.
De eenvoudigste oplossing lijkt me een softwarematige SPI voor het TFT display.
Maar ik kan niet vinden hoe dat te doen. Alle voorbeelden zijn met hardware SPI.
Volgens mij gebruikt het Ethernet Shield : pin 4, 10, 50, 51, 52, 53.
Pin 50 is de MISO (Master In, Slave Out). Dat is typisch het signaal dat het meeste problemen geeft als meerdere SPI bussen gecombineerd worden.
Je sketch is één lang stuk code. Het is wel goed te lezen, maar als je een paar dingen in functies onderbrengt, dan wordt het eenvoudiger.
In de Arduino Mega past veel code, dus je zou zelfs meerdere tabbladen kunnen gebruiken. Mijn Arduino Mega project heeft (gecompileerd) 70 kbyte aan flash code, en ik heb nu al 26 tabbladen. En dat werkt best redelijk, die 26 tabbladen vind ik niet te veel.
Is dat het Arduino TFT scherm ?
En je gebruikt de standaard meegeleverde Arduino TFT library ?
Deze ? https://www.arduino.cc/en/Main/GTFT
Met deze library ? https://www.arduino.cc/en/Reference/TFTLibrary
En je prikt dat TFT shield niet op het board, maar je verbindt alles met draden ?
Maar dan hebben beide shields een SD socket, dat gaat niet goed.
De SPI bus is helaas niet zo goed gedefinieerd als de I2C bus. Daarom kunnen shields soms niet samen, als ze beide een SPI bus hebben.
De eenvoudigste oplossing lijkt me een softwarematige SPI voor het TFT display.
Maar ik kan niet vinden hoe dat te doen. Alle voorbeelden zijn met hardware SPI.
Volgens mij gebruikt het Ethernet Shield : pin 4, 10, 50, 51, 52, 53.
Pin 50 is de MISO (Master In, Slave Out). Dat is typisch het signaal dat het meeste problemen geeft als meerdere SPI bussen gecombineerd worden.
Je sketch is één lang stuk code. Het is wel goed te lezen, maar als je een paar dingen in functies onderbrengt, dan wordt het eenvoudiger.
In de Arduino Mega past veel code, dus je zou zelfs meerdere tabbladen kunnen gebruiken. Mijn Arduino Mega project heeft (gecompileerd) 70 kbyte aan flash code, en ik heb nu al 26 tabbladen. En dat werkt best redelijk, die 26 tabbladen vind ik niet te veel.
Re: mega heeft ruzie met tft en ethernet
Dit is een link naar mijn tft:
https://www.conrad.nl/nl/arduino-a000096-lcd-tft-kleurenscherm-117-inch-45-cm-095444.html
Die heeft idd ook een sd poort.
Ik gebruik de standaard tft.h uit Arduino ide
Ik hoop dat iemand een oplossing heeft.
Gr martijn
https://www.conrad.nl/nl/arduino-a000096-lcd-tft-kleurenscherm-117-inch-45-cm-095444.html
Die heeft idd ook een sd poort.
Ik gebruik de standaard tft.h uit Arduino ide
Ik hoop dat iemand een oplossing heeft.
Gr martijn
Re: mega heeft ruzie met tft en ethernet
Na wat beter lezen, blijkt het er toch te staan
Hier: https://www.arduino.cc/en/Reference/TFTLibrary
Bij: "When not using hardware SPI, you can use any available pins..."
Dus op die manier is er software SPI en kun je iedere pin gebruiken. Gebruik niet pin 4, 10, 50, 51, 52, 53, die ik eerder noemde.
Dan wordt de hardware SPI bus gebruikt voor de Ethernet and SD card (op the ethernet shield).
Een software SPI wordt gebruikt voor het TFT scherm.
En de SD card op het TFT scherm heb je niet nodig, en is waarschijnlijk niet te gebruiken met software SPI (maar Adafruit heeft ook een SD library voor software SPI).
Hier: https://www.arduino.cc/en/Reference/TFTLibrary
Bij: "When not using hardware SPI, you can use any available pins..."
- Code: Alles selecteren
#define SCLK 4
#define MOSI 5
#define CS 6
#define DC 7
#define RESET 8
TFT myScreen = TFT(CS, DC, MOSI, SCLK, RESET);
Dus op die manier is er software SPI en kun je iedere pin gebruiken. Gebruik niet pin 4, 10, 50, 51, 52, 53, die ik eerder noemde.
Dan wordt de hardware SPI bus gebruikt voor de Ethernet and SD card (op the ethernet shield).
Een software SPI wordt gebruikt voor het TFT scherm.
En de SD card op het TFT scherm heb je niet nodig, en is waarschijnlijk niet te gebruiken met software SPI (maar Adafruit heeft ook een SD library voor software SPI).
Re: mega heeft ruzie met tft en ethernet
dank je wel voor je hulp!!
het is gelukt met de volgende code:
super bedankt alles werkt nu.
gr martijn
het is gelukt met de volgende code:
- Code: Alles selecteren
#define CS 10
#define DC 9
#define MOSI 45
#define SCLK 52
#define RST 6
TFT TFTscreen = TFT(CS, DC, RST);
super bedankt alles werkt nu.
gr martijn
Re: mega heeft ruzie met tft en ethernet
Je mengt nu dingen. Misschien ontstaat er een soort kortsluiting als je een pin voor verschillende dingen gebruikt. Ik denk dat het beter is om alles gescheiden te houden. Kun je andere pinnen gebruiken voor pin 10 en pin 52 ?
6 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 28 gasten