string array probléma + LCD

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

string array probléma + LCD

Hozzászólás Szerző: Bazs87 »

Sziasztok!

A kód működik egészen addig a pontig, amíg az 1-19 stringet hívom meg. 20-tól valamilyen oknál fogva számolja a hibákat, de nem írja ki a hibaüzenetet.
Néztem notepad++-szal esetlegesen oda nem illő karaktereket, a for ciklust buheráltam, az sem segített, valami basic hibát vétettem volna, amit nem látok már 11-kor?:S
Amikor a kiíratásnál i+10-et adtam be neki akkor is csak 19ig írta be, az i aktuális értékétől függetlenül. A karakterláncban hol lehet még probléma?
Nincs valami ötletetek?

Köszi előre is!
Bazs87

Kód: Egész kijelölése

// I2C LCD
//   GND - GND
//   VCC - 5v
//   SDA - a4
//   SCL - a5

  #include <Wire.h>
  #include <LiquidCrystal_I2C.h>

  // I2C LCD
  LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

  boolean error[31];
  
  String msg[31] = { "                    ",
                     "  Errormassage 01   ","  Errormassage 02   ","  Errormassage 03   ","  Errormassage 04   ","  Errormassage 05   ",
                     "  Errormassage 06   ","  Errormassage 07   ","  Errormassage 08   ","  Errormassage 09   ","  Errormassage 10   ",
                     "  Errormassage 11   ","  Errormassage 12   ","  Errormassage 13   ","  Errormassage 14   ","  Errormassage 15   ",
                     "  Errormassage 16   ","  Errormassage 17   ","  Errormassage 18   ","  Errormassage 19   ","  Errormassage 20   ",
                     "  Errormassage 21   ","  Errormassage 22   ","  Errormassage 23   ","  Errormassage 24   ","  Errormassage 25   ",
                     "  Errormassage 26   ","  Errormassage 27   ","  Errormassage 28   ","  Errormassage 29   ","  Errormassage 30   "};
 
  void setup(){
    Serial.begin(9600);
    lcd.begin(20,4);
    lcd.backlight();

    for (int i=0; i<=30; i++) { error[i] = false; }
  }


  void loop(){    
    if( Serial.available() ) {
      
      int nerr = Serial.parseInt();
      Serial.println(nerr);
      
      if (nerr != 0) {
        if (nerr < 0) { error[abs(nerr)] = false; }
        if (nerr > 0) { error[nerr] = true ; }
      }
      else {
        for (int i=1; i<=30; i++) { error[i] = false; }
      }

      for (int i=1; i<=30; i++) { Serial.print(error[i]); }
      Serial.println("");

      lcd.clear();

// 20-tól nem jelez ki

      int j = 0;
      for (int i=1; i<=30; i++) {
        if (error[i] && j<=2) {
          lcd.setCursor(0,j);
          lcd.print(msg[i]);
          j++;
        }
      }
    
      j=0;
      for (int i=1; i<=30; i++) {
        if  (error[i]) { j++; }
      }
    
      lcd.setCursor(14,3);
      if (j<10) { lcd.print(" "); }
      lcd.print(j);
      lcd.print(" Err");
     
    }
  }

Avatar
rostasc3
Biztosítékgyilkos
Hozzászólások: 52
Csatlakozott: 2009. október 20. kedd, 6:00

Re: string array probléma + LCD

Hozzászólás Szerző: rostasc3 »

Kód: Egész kijelölése

        if (error[i] && j<=2) {
          lcd.setCursor(0,j);
          lcd.print(msg[i]);
          j++;
        }
Ha a cikluson belül íratod ki az error-t, akkor is az van beállítva, amit a serial-on kapott?
Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: string array probléma + LCD

Hozzászólás Szerző: Bazs87 »

most nézem, h message az a textben, nem massage:)
a serialos adatokat átvezetem a bool tömbbe, onnantól már csak a boolok állapotaitól függ minden. a ciklus csak a tömbben való "közlekedést" hivatott segíteni. A bool i-edik eleme a string array i-edik elemére vonatkozna. A boolba való beírással nincs gond, az lcd.print nem megy valamiért 19 felett
Bazs87
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2014. július 20. vasárnap, 20:27

Re: string array probléma + LCD

Hozzászólás Szerző: Bazs87 »

az alapfelvetés, ami a probléma megoldásában segített:
http://www.tavir.hu/konyv-tipushiba-1-string

char* msg[31] - amint így definiálom a tömbömet gond nélkül fut.

Vajon miért van ez? Ez ugyan megoldás, nem a hiba kikerülése, de jó lenne tudni a hiba okát is. Ötletek?
Köszi!
Válasz küldése