mega heeft ruzie met tft en ethernet

Hardware geleverd door Arduino
Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

mega heeft ruzie met tft en ethernet

Berichtdoor tijne » 07 Nov 2016, 00:33

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

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: mega heeft ruzie met tft en ethernet

Berichtdoor Koepel » 07 Nov 2016, 09:40

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.

Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: mega heeft ruzie met tft en ethernet

Berichtdoor tijne » 07 Nov 2016, 10:20

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

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: mega heeft ruzie met tft en ethernet

Berichtdoor Koepel » 07 Nov 2016, 10:44

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..."
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).

Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: mega heeft ruzie met tft en ethernet

Berichtdoor tijne » 07 Nov 2016, 13:09

dank je wel voor je hulp!!

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

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: mega heeft ruzie met tft en ethernet

Berichtdoor Koepel » 07 Nov 2016, 15:08

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 ?

Terug naar Arduino hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 14 gasten