Go Down

Topic: Keine Ausgabe auf Display! (Read 3628 times) previous topic - next topic

petemanzel

Hallo,

ich habe acht Schalter ueber einen 4051 Multiplexer an meinem Arduino UNO und ein 2,4" TFT Display.

In meinem SerialMonitor werden alle Schalter richtig gelesen und ausgegeben. Aber mein Display bleibt "ROT" als ob es im Setup haengen bleiben wuerde.

Wer kann mir da auf die Spruenge helfen?

Danke!

Code: [Select]

//25.08.2015
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library


#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

// Assign human-readable names to some common 16-bit color values:
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

byte state = 0;                 // Zustände
int lastState = 0;
int sensorState = HIGH;
int zaehler = 1;

int bit1 = 0;
int bit2 = 0;
int bit3 = 0;

void problem(void) {
  tft.fillScreen(RED);
  tft.setCursor(38, 150);
  tft.setTextColor(WHITE);  tft.setTextSize(4);
  tft.println("KEIN");
  tft.setCursor(38, 200);
  tft.println("SIGNAL");
}

void drawChar(char c)
{
  tft.fillScreen(WHITE);
  tft.setCursor(20, 20);
  tft.setTextColor(RED); 
  tft.setTextSize(40);
  tft.print(c);
}

void setup(void) {
  tft.reset();
  tft.begin(0x9341);
  tft.setRotation(0);
  tft.fillScreen(RED);
   
  pinMode(sensorState,INPUT /*_PULLUP*/ );
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  for ( zaehler = 0 ; zaehler <= 7; zaehler++ ) {

  bit1 = bitRead(zaehler, 0);
  bit2 = bitRead(zaehler, 1);
  bit3 = bitRead(zaehler, 2);

  digitalWrite(10, bit1);
  digitalWrite(11, bit2);
  digitalWrite(12, bit3);

  sensorState = digitalRead(13);
  Serial.print("Sensor:");
  Serial.print(zaehler);
  Serial.print(" ");
  Serial.print(sensorState);
  Serial.print("\t");
 }
 Serial.println("");

  if(zaehler == 0 && sensorState == LOW) state = 0; // N
  if(zaehler == 1 && sensorState == LOW) state = 1; // 1
  if(zaehler == 2 && sensorState == LOW) state = 2; // 2
  if(zaehler == 3 && sensorState == LOW) state = 3; // 3
  if(zaehler == 4 && sensorState == LOW) state = 4; // 4
  if(zaehler == 5 && sensorState == LOW) state = 5; // 5
  if(zaehler == 6 && sensorState == LOW) state = 6; // 6
  if(zaehler == 7 && sensorState == LOW) state = 7; // R
 
  if(lastState != state) {
  lastState = state;
   
      switch (state)
      {
     case 0:
         drawChar('0');
      break;
     
      case 1:   
        drawChar('1');
      break;
     
      case 2:   
        drawChar('2');
      break; 
     
      case 3:   
        drawChar('3');
      break;
     
      case 4:   
        drawChar('4');
      break;
     
      case 5: 
        drawChar('5');
      break;
     
      case 6:   
        drawChar('6');
      break;
     
      case 7: 
       drawChar('7');
      break;
     
      default:
      problem();
      }
  }
}
Der Pete

gregorss

In meinem SerialMonitor werden alle Schalter richtig gelesen und ausgegeben. Aber mein Display bleibt "ROT" als ob es im Setup haengen bleiben wuerde.
Hattest Du denn schon mal ein Bild auf dem Display?

Gruß

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

petemanzel

#2
Feb 24, 2016, 09:58 pm Last Edit: Feb 24, 2016, 10:06 pm by petemanzel
Hattest Du denn schon mal ein Bild auf dem Display?

Gruß

Gregor

Ja, aber da habe ich einen Wert von einem Poti an A5 ausgegeben!
Der Pete

gregorss

Ja aber da habe ich einen wert von einem Poti an A5 ausgegeben!
Dann ist das Display schonmal nicht der Schuldige. Fülle das Display mal mit einer anderen Farbe und/oder probiere, ob etwas im Display erscheint, wenn Du noch in setup() etwas darauf ausgibst. Wenn das funktioniert, kannst Du diese Zeile an unterschiedlichen Stellen im Code platzieren und dadurch evtl. herausfinden, an welcher Stelle genau ein Fehler auftritt.

HTH

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

petemanzel

Dann ist das Display schonmal nicht der Schuldige. Fülle das Display mal mit einer anderen Farbe und/oder probiere, ob etwas im Display erscheint, wenn Du noch in setup() etwas darauf ausgibst. Wenn das funktioniert, kannst Du diese Zeile an unterschiedlichen Stellen im Code platzieren und dadurch evtl. herausfinden, an welcher Stelle genau ein Fehler auftritt.

HTH

Gregor

Danke fuer den Tip!
Klappt alles bis zu den if Abfragen.
Wenn ich einen Text davor Ausgeben lasse blinkt der Text.
Der Pete

gregorss

Klappt alles bis zu den if Abfragen.
Wenn ich einen Text davor Ausgeben lasse blinkt der Text.
Könntest Du Dich genauer ausdrücken? Tritt der Fehler nach dem Serial.println("")* auf?

Gruß

Gregor

* mach' Serial.println(); daraus.
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

petemanzel

Könntest Du Dich genauer ausdrücken? Tritt der Fehler nach dem Serial.println("")* auf?

Gruß

Gregor

* mach' Serial.println(); daraus.
Sorry!

Ja, genau!

Wenn ich eine Testzeile vor dieser Abfrage:
 
if(lastState != state) {
  lastState = state;

ausgeben lasse, wird der Text angezeigt. Nach dieser Abfrage wird die Testzeile nicht ausgegeben und das Display bleibt "Rot".
Der Pete

uwefed

Code: [Select]
if(zaehler == 0 && sensorState == LOW) state = 0; // N
  if(zaehler == 1 && sensorState == LOW) state = 1; // 1
  if(zaehler == 2 && sensorState == LOW) state = 2; // 2
  if(zaehler == 3 && sensorState == LOW) state = 3; // 3
  if(zaehler == 4 && sensorState == LOW) state = 4; // 4
  if(zaehler == 5 && sensorState == LOW) state = 5; // 5
  if(zaehler == 6 && sensorState == LOW) state = 6; // 6
  if(zaehler == 7 && sensorState == LOW) state = 7; // R

ist das nicht das gleiche wie
Code: [Select]
if(sensorState == LOW) state = zaehler;
?

Grüße Uwe

petemanzel

Und zack, code sauberer!

Aber loest mein Problem immer noch nicht.

Der Zaehler, zaehlt von 0 bis 7 meine Eingaenge durch und wenn einer der Eingaenge "LOW" ist, soll die entsprechende Nummer des umgelegten Schalters im Display angezeigt werden.

Der Pete

petemanzel

#9
Feb 25, 2016, 10:02 am Last Edit: Feb 25, 2016, 11:23 am by petemanzel
Wenn ich die for- Schleife nur bis 1 zaehlen lasse, bekomme ich eine "2" (also case 2) einmal ausgegeben. Danach passiert nichts mehr.
Der Pete

petemanzel

Hat keiner eine Idee? Was mache ich da falsch?
Der Pete

Matze7779

Hi,

Code: [Select]

int sensorState = HIGH;
pinMode(sensorState,INPUT /*_PULLUP*/ );


was willst Du mit diesen Zeilen machen?

Gruß
Matze

petemanzel

Hi,

Code: [Select]

int sensorState = HIGH;
pinMode(sensorState,INPUT /*_PULLUP*/ );


was willst Du mit diesen Zeilen machen?

Gruß
Matze
Habe ich geaendert:

Code: [Select]

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library


#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

// Assign human-readable names to some common 16-bit color values:
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

byte state = 0;                 // Zustände
int lastState = 0;
int sensorState = 0;
int zaehler = 1;

int bit1 = 0;
int bit2 = 0;
int bit3 = 0;

void problem(void) {
  tft.fillScreen(RED);
  tft.setCursor(38, 150);
  tft.setTextColor(WHITE);  tft.setTextSize(4);
  tft.println("KEIN");
  tft.setCursor(38, 200);
  tft.println("SIGNAL");
}

void drawChar(char c)
{
  tft.fillScreen(WHITE);
  tft.setCursor(20, 20);
  tft.setTextColor(RED); 
  tft.setTextSize(40);
  tft.print(c);
}

void setup(void) {
  tft.reset();
  tft.begin(0x9341);
  tft.setRotation(0);
  tft.fillScreen(RED);
   
  pinMode(13,INPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  for ( zaehler = 0 ; zaehler <8; zaehler++ ) {

  bit1 = bitRead(zaehler, 0);
  bit2 = bitRead(zaehler, 1);
  bit3 = bitRead(zaehler, 2);

  digitalWrite(10, bit1);
  digitalWrite(11, bit2);
  digitalWrite(12, bit3);

  sensorState = digitalRead(13);
  Serial.print("Sensor:");
  Serial.print(zaehler);
  Serial.print(" ");
  Serial.print(sensorState);
  Serial.print("\t");
 }
 Serial.println("");

  if(zaehler == 0 && sensorState == LOW) state = 0; // N
  if(zaehler == 1 && sensorState == LOW) state = 1; // 1
  if(zaehler == 2 && sensorState == LOW) state = 2; // 2
  if(zaehler == 3 && sensorState == LOW) state = 3; // 3
  if(zaehler == 4 && sensorState == LOW) state = 4; // 4
  if(zaehler == 5 && sensorState == LOW) state = 5; // 5
  if(zaehler == 6 && sensorState == LOW) state = 6; // 6
  if(zaehler == 7 && sensorState == LOW) state = 7; // R
 
  if(lastState != state) {
  lastState = state;
   
      switch (state)
      {
     case 0:
         drawChar('0');
      break;
     
      case 1:   
        drawChar('1');
      break;
     
      case 2:   
        drawChar('2');
      break; 
     
      case 3:   
        drawChar('3');
      break;
     
      case 4:   
        drawChar('4');
      break;
     
      case 5: 
        drawChar('5');
      break;
     
      case 6:   
        drawChar('6');
      break;
     
      case 7: 
       drawChar('7');
      break;
     
      default:
      problem();
      }
  }
}
Der Pete

gregorss

Habe ich geaendert ...
Toll ...

Woher soll ich denn nun wissen, wo Du etwas geändert hast? Soll ich das etwa selber suchen?! Und inwiefern beantwortet das die gestellte Frage?

Bitte versetze Dich beim Schreiben ein bisschen in denjenigen, der es lesen und Dir helfen soll.

Gruß

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

petemanzel

Sorry Matze!
Sorry Gregor!

@Grogor, Du hast natuerlich recht!

Ich habe in den von Matze hingewiesenen Zeilen, einmal die Variable anlegen wollen, wo der Zustand des einzulesenden Pins des Multiplexors eingelesen wird. Deshalb "HIGH", weil im inaktiven Zustand ein "HIGH" vom Multiplexor ausgegeben wird.

Und dann habe ich dummerweise anstelle von "sensorPin" zum bestimmen des einzulesenden Pins wieder die selbe Variable eingetragen. Habe ich aber jetzt in soweit geaendert, dass ich jetzt Pin 13 direkt ohne Variable in die Zeile  "pinMode(sensorState,INPUT /*_PULLUP*/ );" eingetragen habe!

Sieht jetzt so aus:
pinMode(13 ,INPUT );

Vielen Dank!

Ich habe aber immer noch keine Loesung gefunden!
Der Pete

Go Up