Jump to content

Gizzum

Members
  • Posts

    18
  • Joined

  • Last visited

Reputation

3 Neutral

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Yeah... played with the refresh rate and at 200 it still bins out. I dont think the uno is man enough to do it all. If i reduce the amount it displays then it takes a while longer before resetting. May have to do seven segment displays for altitude and use the tft for something else... Or can I just get a better Arduino?
  2. had to change to code a bit... #include <Adafruit_GFX.h> #include <MCUFRIEND_kbv.h> #define colour1 0x07E0 //0, 255, 0 #define colour2 0xFFE6 //255, 255, 51 #define colour3 0xF81F //255, 0, 255 #define colour4 0x07FF //0, 255, 255 #define colour5 0xFADF //255,90,255 #define colour6 0x319F //50, 50, 255 #define colour7 0x0000 //0, 0, 0 #define BLACK 0xFFFF // work in line numbers. Font height in ht uint16_t ht = 16, top = 2, line, lines = 28, scroll; MCUFRIEND_kbv myGLCD; void setup() { myGLCD.reset(); uint16_t id = myGLCD.readID(); myGLCD.begin(id); myGLCD.setRotation(0); //LANDSCAPE myGLCD.fillScreen(BLACK); //SAS-Modus HOLD malen //Das macht uns in Zukunft die Positionierung einfacher int x = 47; int y = 55; //myGLCD.setColor(0, 255, 0); //colour1 //myGLCD.setFont(SmallFont); myGLCD.setCursor(x-2, y-1); myGLCD.print("~"); //myGLCD.setFont(BigFont); myGLCD.drawCircle(x, y, 7, colour1); //SAS-Modus PROGRADE malen //Das macht uns in Zukunft die Positionierung einfacher // x = 47; y = 80; //myGLCD.setColor(255, 255, 51); //colour2 myGLCD.drawCircle(x, y, 7, colour2); myGLCD.drawPixel(x, y, colour2); myGLCD.drawLine(x-8, y, x-12, y, colour2); myGLCD.drawLine(x+8, y, x+12, y, colour2); //SAS-Modus RETROGRADE malen //Das macht uns in Zukunft die Positionierung einfacher // x = 47; y = 105; //myGLCD.setColor(255, 255, 51); //colour2 myGLCD.drawCircle(x, y, 7, colour2); myGLCD.drawLine(x, y-12, x, y-8, colour2); myGLCD.drawLine(x+7, y+4, x+10, y+6, colour2); myGLCD.drawLine(x-7, y+4, x-10, y+6, colour2); myGLCD.drawLine(x-5, y+5, x+5, y-5, colour2); myGLCD.drawLine(x-5, y-5, x+5, y+5, colour2); //SAS-Modus NORMAL malen //Das macht uns in Zukunft die Positionierung einfacher // x = 47; y = 130; //myGLCD.setColor(255, 0, 255); //colour3 myGLCD.drawLine(x-9, y+5, x+8, y+5, colour3); myGLCD.drawLine(x-9, y+5, x, y-9, colour3); myGLCD.drawLine(x, 121, x+8, y+5, colour3); myGLCD.drawPixel(x, y, colour3); //SAS-Modus ANTINORMAL malen //Das macht uns in Zukunft die Positionierung einfacher // x = 47; y = 155; //myGLCD.setColor(255, 0, 255); //colour3 myGLCD.drawLine(x-9, y-5, x+8, y-5, colour3); myGLCD.drawLine(x-9, y-5, x, y+9, colour3); myGLCD.drawLine(x, y+9, x+8, y-5, colour3); myGLCD.drawPixel(x, y, colour3); myGLCD.drawLine(x, y-12, x, y-5, colour3); myGLCD.drawLine(x+5, y+2, x+10, y+6, colour3); myGLCD.drawLine(x-5, y+2, x-10, y+6, colour3); //SAS-Modus RADIAL malen //Das macht uns in Zukunft die Positionierung einfacher // x = 47; y = 180; //myGLCD.setColor(0, 255, 255); //colour4 myGLCD.drawCircle(x, y, 7, colour4); myGLCD.drawLine(x-5, y+5, x+5, y-5, colour4); myGLCD.drawLine(x-5, y-5, x+5, y+5, colour4); //myGLCD.setColor(0, 0, 0); myGLCD.fillCircle(x, y, 3, colour7); //myGLCD.setColor(0, 255, 255,); myGLCD.drawPixel(x, y, colour4); //SAS-Modus ANTIRADIAL malen //Das macht uns in Zukunft die Positionierung einfacher // x = 47; y = 205; //myGLCD.setColor(0, 255, 255); //colour4 myGLCD.drawCircle(x, y, 7, colour4); myGLCD.drawLine(x-8, y+8, x+8, y-8, colour4); myGLCD.drawLine(x-8, y-8, x+8, y+8, colour4); //myGLCD.setColor(0, 0, 0); myGLCD.fillCircle(x, y, 6, colour7); //myGLCD.setColor(0, 255, 255); myGLCD.drawPixel(x, y, colour7); //SAS-Modus TARGET malen //Das macht uns in Zukunft die Positionierung einfacher // x = 47; y = 230; //myGLCD.setColor(255, 90, 255); //colour5 myGLCD.drawCircle(x, y, 7, colour5); //myGLCD.setColor(0, 0, 0); myGLCD.fillRect(x-2, y-8, x+2, y+8, colour7); myGLCD.fillRect(x-8, y+2, x+8, y-2, colour7); //myGLCD.setColor(255, 90, 255); myGLCD.drawPixel(x, y, colour5); //SAS-Modus ANTITARGET malen //Das macht uns in Zukunft die Positionierung einfacher // x = 47; y = 255; //myGLCD.setColor(255, 90, 255); //colour5 myGLCD.drawPixel(x, y, colour5); myGLCD.drawLine(x, y+9, x, y+7, colour5); myGLCD.drawLine(x+5, y-5, x+8, y-7, colour5); myGLCD.drawLine(x-5, y-5, x-8, y-7, colour5); //SAS-Modus MANEUVER malen //Das macht uns in Zukunft die Positionierung einfacher // x = 47; y = 280; //myGLCD.setColor(50, 50, 255); //colour6 myGLCD.drawLine(x-4, y-8, x+4, y-8, colour6); myGLCD.drawLine(x-4, y+6, x-8, y, colour6); myGLCD.drawLine(x+4, y+6, x+8, y, colour6); myGLCD.drawLine(x, y-7, x, y-5, colour6); myGLCD.drawLine(x-6, y+3, x-3, y+1, colour6); myGLCD.drawLine(x+6, y+3, x+3, y+1, colour6); myGLCD.drawPixel(x, y-1, colour6); } void loop() { } draws the icons fine but with a big white rectangle over the bottom icons... Photo here... http://s347.photobucket.com/user/gizzum1275/profile/ I have done a video of the test script from MCUFriend... The UNO has started to randomly reset itself. I did have this running fine with Altitude messages and Apsides. But it will now not even run with that... video here... Is this the same experience you had Benji? I gather this is due to the Uno not being man enough to receive and display at the same time??
  3. There is a demo test sketch that comes with the MCUfriend library... // All the mcufriend.com UNO shields have the same pinout. // i.e. control pins A0-A4. Data D2-D9. microSD D10-D13. // Touchscreens are normally A1, A2, D7, D6 but the order varies // // This demo should work with most Adafruit TFT libraries // If you are not using a shield, use a full Adafruit constructor() // e.g. Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); #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 #include <SPI.h> // f.k. for Arduino-1.5.2 #include "Adafruit_GFX.h"// Hardware-specific library #include <MCUFRIEND_kbv.h> MCUFRIEND_kbv tft; //#include <Adafruit_TFTLCD.h> //Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // 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 #ifndef min #define min(a, b) (((a) < (b)) ? (a) : (b)) #endif void setup(void); void loop(void); unsigned long testFillScreen(); unsigned long testText(); unsigned long testLines(uint16_t color); unsigned long testFastLines(uint16_t color1, uint16_t color2); unsigned long testRects(uint16_t color); unsigned long testFilledRects(uint16_t color1, uint16_t color2); unsigned long testFilledCircles(uint8_t radius, uint16_t color); unsigned long testCircles(uint8_t radius, uint16_t color); unsigned long testTriangles(); unsigned long testFilledTriangles(); unsigned long testRoundRects(); unsigned long testFilledRoundRects(); void progmemPrint(const char *str); void progmemPrintln(const char *str); void runtests(void); uint16_t g_identifier; extern const uint8_t hanzi[]; void showhanzi(unsigned int x, unsigned int y, unsigned char index) { uint8_t i, j, c, first = 1; uint8_t *temp = (uint8_t*)hanzi; uint16_t color; tft.setAddrWindow(x, y, x + 31, y + 31); //设置区域 temp += index * 128; for (j = 0; j < 128; j++) { c = pgm_read_byte(temp); for (i = 0; i < 8; i++) { if ((c & (1 << i)) != 0) { color = RED; } else { color = BLACK; } tft.pushColors(&color, 1, first); first = 0; } temp++; } } void setup(void) { Serial.begin(9600); uint32_t when = millis(); // while (!Serial) ; //hangs a Leonardo until you connect a Serial if (!Serial) delay(5000); //allow some time for Leonardo Serial.println("Serial took " + String((millis() - when)) + "ms to start"); static uint16_t identifier; // tft.reset(); //we can't read ID on 9341 until begin() g_identifier = tft.readID(); // Serial.print("ID = 0x"); Serial.println(g_identifier, HEX); if (g_identifier == 0x00D3 || g_identifier == 0xD3D3) g_identifier = 0x9481; // write-only shield if (g_identifier == 0xFFFF) g_identifier = 0x9341; // serial // g_identifier = 0x9329; // force ID tft.begin(g_identifier); } #if defined(MCUFRIEND_KBV_H_) uint16_t scrollbuf[320]; // my biggest screen is 320x480 #define READGRAM(x, y, buf, w, h) tft.readGRAM(x, y, buf, w, h) #else uint16_t scrollbuf[320]; // Adafruit only does 240x320 // Adafruit can read a block by one pixel at a time int16_t READGRAM(int16_t x, int16_t y, uint16_t *block, int16_t w, int16_t h) { uint16_t *p; for (int row = 0; row < h; row++) { p = block + row * w; for (int col = 0; col < w; col++) { *p++ = tft.readPixel(x + col, y + row); } } } #endif void windowScroll(int16_t x, int16_t y, int16_t wid, int16_t ht, int16_t dx, int16_t dy, uint16_t *buf) { if (dx) for (int16_t row = 0; row < ht; row++) { READGRAM(x, y + row, buf, wid, 1); tft.setAddrWindow(x, y + row, x + wid - 1, y + row); tft.pushColors(buf + dx, wid - dx, 1); tft.pushColors(buf + 0, dx, 0); } if (dy) for (int16_t col = 0; col < wid; col++) { READGRAM(x + col, y, buf, 1, ht); tft.setAddrWindow(x + col, y, x + col, y + ht - 1); tft.pushColors(buf + dy, ht - dy, 1); tft.pushColors(buf + 0, dy, 0); } } void loop(void) { uint8_t aspect; uint16_t pixel; char *aspectname[] = { "PORTRAIT", "LANDSCAPE", "PORTRAIT_REV", "LANDSCAPE_REV" }; char *colorname[] = { "BLUE", "GREEN", "RED", "GRAY" }; uint16_t colormask[] = { 0x001F, 0x07E0, 0xF800, 0xFFFF }; uint16_t dx, rgb, n, wid, ht; tft.setRotation(0); // for (uint8_t i = 0; i < 2; i++) showhanzi(0, 0, i), delay(1000); runtests(); delay(2000); if (tft.height() > 64) { for (uint8_t cnt = 0; cnt < 4; cnt++) { aspect = (cnt + 0) & 3; tft.setRotation(aspect); wid = tft.width(); ht = tft.height(); testText(); dx = wid / 32; for (n = 0; n < 32; n++) { rgb = n * 8; rgb = tft.color565(rgb, rgb, rgb); tft.fillRect(n * dx, 48, dx, 64, rgb & colormask[aspect]); } tft.setTextSize(2); tft.setTextColor(colormask[aspect], BLACK); tft.setCursor(0, 72); tft.print(colorname[aspect]); tft.setTextColor(WHITE); tft.println(" COLOR GRADES"); tft.setTextColor(WHITE, BLACK); tft.setCursor(0, 184); tft.println(aspectname[aspect]); delay(1000); tft.drawPixel(0, 0, YELLOW); pixel = tft.readPixel(0, 0); #if defined(MCUFRIEND_KBV_H_) extern const uint8_t penguin[]; tft.setAddrWindow(wid - 40 - 40, 20 + 0, wid - 1 - 40, 20 + 39); tft.pushColors(penguin, 1600, 1); tft.setTextColor(WHITE, BLACK); tft.println("VERTICAL SCROLL UP"); uint16_t maxscroll; if (tft.getRotation() & 1) maxscroll = wid; else maxscroll = ht; for (uint16_t i = 1; i <= maxscroll; i++) { tft.vertScroll(0, maxscroll, i); delay(10); } tft.vertScroll(0, maxscroll, 0); tft.setCursor(0, 200); tft.println("VERTICAL SCROLL DN"); for (uint16_t i = 1; i <= maxscroll; i++) { tft.vertScroll(0, maxscroll, 0 - (int16_t)i); delay(10); } delay(1000); tft.vertScroll(0, maxscroll, 0); if ((aspect & 1) == 0) { //Portrait tft.setCursor(0, 200); tft.setTextColor(BLUE, BLACK); tft.println("ONLY THE COLOR BAND"); for (uint16_t i = 1; i <= 64; i++) { tft.vertScroll(48, 64, i); delay(20); } delay(1000); tft.vertScroll(0, maxscroll, 0); } #endif tft.setCursor(0, 200); tft.setTextColor(YELLOW, BLACK); if (pixel == YELLOW) { tft.println("SOFTWARE SCROLL "); #if 0 for (int16_t i = 45, dx = 2, dy = 1; i > 0; i -= dx) { windowScroll(24, 8, 90, 40, dx, dy, scrollbuf); } #else // scroll a whole width of the screen n = (wid > 320) ? 320 : wid; for (int16_t i = n, dx = 4, dy = 0; i > 0; i -= dx) { windowScroll(0, 200, n, 16, dx, dy, scrollbuf); } #endif } else if (pixel == CYAN) tft.println("readPixel() reads as BGR"); else if ((pixel & 0xF8F8) == 0xF8F8) tft.println("readPixel() should be 24-bit"); else { tft.print("readPixel() reads 0x"); tft.println(pixel, HEX); } delay(5000); } } tft.println("INVERT DISPLAY"); tft.invertDisplay(true); delay(2000); tft.invertDisplay(false); } typedef struct { PGM_P msg; uint32_t ms; } TEST; TEST result[12]; #define RUNTEST(n, str, test) { result[n].msg = PSTR(str); result[n].ms = test; delay(500); } void runtests(void) { uint8_t i, len = 24, cnt; uint32_t total; RUNTEST(0, "FillScreen ", testFillScreen()); RUNTEST(1, "Text ", testText()); RUNTEST(2, "Lines ", testLines(CYAN)); RUNTEST(3, "Horiz/Vert Lines ", testFastLines(RED, BLUE)); RUNTEST(4, "Rectangles (outline) ", testRects(GREEN)); RUNTEST(5, "Rectangles (filled) ", testFilledRects(YELLOW, MAGENTA)); RUNTEST(6, "Circles (filled) ", testFilledCircles(10, MAGENTA)); RUNTEST(7, "Circles (outline) ", testCircles(10, WHITE)); RUNTEST(8, "Triangles (outline) ", testTriangles()); RUNTEST(9, "Triangles (filled) ", testFilledTriangles()); RUNTEST(10, "Rounded rects (outline) ", testRoundRects()); RUNTEST(11, "Rounded rects (filled) ", testFilledRoundRects()); tft.fillScreen(BLACK); tft.setTextColor(GREEN); tft.setCursor(0, 0); uint16_t wid = tft.width(); if (wid > 176) { tft.setTextSize(2); #if defined(MCUFRIEND_KBV_H_) tft.print("MCUFRIEND "); #if MCUFRIEND_KBV_H_ != 0 tft.print(0.01 * MCUFRIEND_KBV_H_, 1); #else tft.print("for"); #endif tft.println(" UNO"); #else tft.println("Adafruit-Style Tests"); #endif } else len = wid / 6 - 8; tft.setTextSize(1); total = 0; for (i = 0; i < 12; i++) { PGM_P str = result[i].msg; char c; if (len > 24) { if (i < 10) tft.print(" "); tft.print(i); tft.print(": "); } uint8_t cnt = len; while ((c = pgm_read_byte(str++)) && cnt--) tft.print(c); tft.print(" "); tft.println(result[i].ms); total += result[i].ms; } tft.setTextSize(2); tft.print("Total:"); tft.print(0.000001 * total); tft.println("sec"); g_identifier = tft.readID(); tft.print("ID: 0x"); tft.println(tft.readID(), HEX); tft.print("Reg(00):0x"); tft.println(tft.readReg(0x00), HEX); tft.print("F_CPU:"); tft.print(0.000001 * F_CPU); #if defined(__OPTIMIZE_SIZE__) tft.println("MHz -Os"); #else tft.println("MHz"); #endif delay(10000); } // Standard Adafruit tests. will adjust to screen size unsigned long testFillScreen() { unsigned long start = micros(); tft.fillScreen(BLACK); tft.fillScreen(RED); tft.fillScreen(GREEN); tft.fillScreen(BLUE); tft.fillScreen(BLACK); return micros() - start; } unsigned long testText() { unsigned long start; tft.fillScreen(BLACK); start = micros(); tft.setCursor(0, 0); tft.setTextColor(WHITE); tft.setTextSize(1); tft.println("Hello World!"); tft.setTextColor(YELLOW); tft.setTextSize(2); tft.println(123.45); tft.setTextColor(RED); tft.setTextSize(3); tft.println(0xDEADBEEF, HEX); tft.println(); tft.setTextColor(GREEN); tft.setTextSize(5); tft.println("Groop"); tft.setTextSize(2); tft.println("I implore thee,"); tft.setTextSize(1); tft.println("my foonting turlingdromes."); tft.println("And hooptiously drangle me"); tft.println("with crinkly bindlewurdles,"); tft.println("Or I will rend thee"); tft.println("in the gobberwarts"); tft.println("with my blurglecruncheon,"); tft.println("see if I don't!"); return micros() - start; } unsigned long testLines(uint16_t color) { unsigned long start, t; int x1, y1, x2, y2, w = tft.width(), h = tft.height(); tft.fillScreen(BLACK); x1 = y1 = 0; y2 = h - 1; start = micros(); for (x2 = 0; x2 < w; x2 += 6) tft.drawLine(x1, y1, x2, y2, color); x2 = w - 1; for (y2 = 0; y2 < h; y2 += 6) tft.drawLine(x1, y1, x2, y2, color); t = micros() - start; // fillScreen doesn't count against timing tft.fillScreen(BLACK); x1 = w - 1; y1 = 0; y2 = h - 1; start = micros(); for (x2 = 0; x2 < w; x2 += 6) tft.drawLine(x1, y1, x2, y2, color); x2 = 0; for (y2 = 0; y2 < h; y2 += 6) tft.drawLine(x1, y1, x2, y2, color); t += micros() - start; tft.fillScreen(BLACK); x1 = 0; y1 = h - 1; y2 = 0; start = micros(); for (x2 = 0; x2 < w; x2 += 6) tft.drawLine(x1, y1, x2, y2, color); x2 = w - 1; for (y2 = 0; y2 < h; y2 += 6) tft.drawLine(x1, y1, x2, y2, color); t += micros() - start; tft.fillScreen(BLACK); x1 = w - 1; y1 = h - 1; y2 = 0; start = micros(); for (x2 = 0; x2 < w; x2 += 6) tft.drawLine(x1, y1, x2, y2, color); x2 = 0; for (y2 = 0; y2 < h; y2 += 6) tft.drawLine(x1, y1, x2, y2, color); return micros() - start; } unsigned long testFastLines(uint16_t color1, uint16_t color2) { unsigned long start; int x, y, w = tft.width(), h = tft.height(); tft.fillScreen(BLACK); start = micros(); for (y = 0; y < h; y += 5) tft.drawFastHLine(0, y, w, color1); for (x = 0; x < w; x += 5) tft.drawFastVLine(x, 0, h, color2); return micros() - start; } unsigned long testRects(uint16_t color) { unsigned long start; int n, i, i2, cx = tft.width() / 2, cy = tft.height() / 2; tft.fillScreen(BLACK); n = min(tft.width(), tft.height()); start = micros(); for (i = 2; i < n; i += 6) { i2 = i / 2; tft.drawRect(cx - i2, cy - i2, i, i, color); } return micros() - start; } unsigned long testFilledRects(uint16_t color1, uint16_t color2) { unsigned long start, t = 0; int n, i, i2, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); n = min(tft.width(), tft.height()); for (i = n; i > 0; i -= 6) { i2 = i / 2; start = micros(); tft.fillRect(cx - i2, cy - i2, i, i, color1); t += micros() - start; // Outlines are not included in timing results tft.drawRect(cx - i2, cy - i2, i, i, color2); } return t; } unsigned long testFilledCircles(uint8_t radius, uint16_t color) { unsigned long start; int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2; tft.fillScreen(BLACK); start = micros(); for (x = radius; x < w; x += r2) { for (y = radius; y < h; y += r2) { tft.fillCircle(x, y, radius, color); } } return micros() - start; } unsigned long testCircles(uint8_t radius, uint16_t color) { unsigned long start; int x, y, r2 = radius * 2, w = tft.width() + radius, h = tft.height() + radius; // Screen is not cleared for this one -- this is // intentional and does not affect the reported time. start = micros(); for (x = 0; x < w; x += r2) { for (y = 0; y < h; y += r2) { tft.drawCircle(x, y, radius, color); } } return micros() - start; } unsigned long testTriangles() { unsigned long start; int n, i, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); n = min(cx, cy); start = micros(); for (i = 0; i < n; i += 5) { tft.drawTriangle( cx , cy - i, // peak cx - i, cy + i, // bottom left cx + i, cy + i, // bottom right tft.color565(0, 0, i)); } return micros() - start; } unsigned long testFilledTriangles() { unsigned long start, t = 0; int i, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); start = micros(); for (i = min(cx, cy); i > 10; i -= 5) { start = micros(); tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, tft.color565(0, i, i)); t += micros() - start; tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, tft.color565(i, i, 0)); } return t; } unsigned long testRoundRects() { unsigned long start; int w, i, i2, red, step, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); w = min(tft.width(), tft.height()); start = micros(); red = 0; step = (256 * 6) / w; for (i = 0; i < w; i += 6) { i2 = i / 2; red += step; tft.drawRoundRect(cx - i2, cy - i2, i, i, i / 8, tft.color565(red, 0, 0)); } return micros() - start; } unsigned long testFilledRoundRects() { unsigned long start; int i, i2, green, step, cx = tft.width() / 2 - 1, cy = tft.height() / 2 - 1; tft.fillScreen(BLACK); start = micros(); green = 256; step = (256 * 6) / min(tft.width(), tft.height()); for (i = min(tft.width(), tft.height()); i > 20; i -= 6) { i2 = i / 2; green -= step; tft.fillRoundRect(cx - i2, cy - i2, i, i, i / 8, tft.color565(0, green, 0)); } return micros() - start; } It runs sweet as a nut. Suggest a good video hosting site and I'll upload it running your code. If i can get it running that is. I have basic info at the moment and it seems to handling it.
  4. Only got it working!!! works well with just altitude at the moment... there is a small lag but close enough for government work!!! I need to write the code to clear the screen when changing scenes and also get the cursor positioned correctly but initial tests are SWEET!!. using a uno r3 btw Thanks so much for your help Benjji. I'll keep you updated. the tft display is approx 74mm x 51mm and sits nicely on the duo. Once i get it working I will try and do a vid and post it up. Jez
  5. When you say before void loop(): do you mean in setup(): ?? or outside setup as well?
  6. Now I am getting... Arduino: 1.8.2 (Mac OS X), Board: "Arduino/Genuino Uno" /Users/Jez/Dropbox/Arduino/KSP/KSP.ino: In function 'void loop()': KSP:53: error: 'myAltitude' was not declared in this scope tft.println(myAltitude.sealevel); ^ exit status 1 'myAltitude' was not declared in this scope This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences. Really???
  7. You have got to be f*****g S******g me! God I love it when that happens... cheers Benji. Jez Leatherman!
  8. Ok guys... I have bought this. https://www.amazon.co.uk/gp/product/B01J34JO0K/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1 I have used one of the examples from mcufriend and have the TFT printing stuff. So I copied the code into my KSP... #include <Adafruit_GFX.h> #include <MCUFRIEND_kbv.h> #include <KerbalSimpit.h> #include <KerbalSimpitMessageTypes.h> #include <PayloadStructs.h> #define WHITE 0x0000 #define YELLOW 0x001F #define CYAN 0xF800 #define MAGENTA 0x07E0 #define RED 0x07FF #define GREEN 0xF81F #define BLUE 0xFFE0 #define BLACK 0xFFFF MCUFRIEND_kbv tft; // KerbalSimPit object KerbalSimPit mySimPit(Serial); // work in line numbers. Font height in ht int16_t ht = 16, top = 2, line, lines = 28, scroll; void setup() { Serial.begin(115200); while (!mySimPit.init()) { delay(100); } mySimPit.inboundHandler(messageHandler); mySimPit.registerChannel(ALTITUDE_MESSAGE); tft.reset(); uint16_t id = tft.readID(); tft.begin(id); tft.setRotation(0); //Portrait tft.fillScreen(MAGENTA); tft.setTextColor(WHITE, RED); tft.setTextSize(2); // System font is 8 pixels. ht = 8*2=16 tft.setCursor(100, 0); tft.print("Hello World"); if (id == 0x9320 || id == 0x9325 || id == 0xB509) { top = 0; // these controllers scroll full screen lines = tft.height() / ht; // we are in portrait mode } } void loop() { mySimPit.update(); tft.setCursor(0, (scroll + top) * ht); if (++scroll >= lines) scroll = 0; tft.vertScroll(top * ht, lines * ht, (scroll) * ht); tft.println(String(myAltitude.sealevel) + ": [" + String(scroll) + "] "); delay(100); line++; } void messageHandler(byte messageType, byte msg[], byte msgSize) { switch(messageType) { case ALTITUDE_MESSAGE: if (msgSize == sizeof(altitudeMessage)) { altitudeMessage myAltitude; myAltitude = parseAltitude(msg); } break; } } and I get the errors... Arduino: 1.8.2 (Mac OS X), Board: "Arduino/Genuino Uno" KSP:18: error: 'KerbalSimPit' does not name a type KerbalSimPit mySimPit(Serial); ^ /Users/Jez/Dropbox/Arduino/KSP/KSP.ino: In function 'void setup()': KSP:26: error: 'mySimPit' was not declared in this scope while (!mySimPit.init()) { ^ KSP:29: error: 'mySimPit' was not declared in this scope mySimPit.inboundHandler(messageHandler); ^ /Users/Jez/Dropbox/Arduino/KSP/KSP.ino: In function 'void loop()': KSP:49: error: 'mySimPit' was not declared in this scope mySimPit.update(); ^ KSP:53: error: 'myAltitude' was not declared in this scope tft.println(String(myAltitude.sealevel) + ": [" + String(scroll) + "] "); ^ exit status 1 'KerbalSimPit' does not name a type This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences. I think I need to buy some arduino books as I am getting headache from this! Any ideas or am I being a complete leatherman? (the ultimate tool!) Jez
  9. Apologies... it was a rushed post as we were travelling off to see relatives for the weekend. I will have another try tonight and get back with errors and code etc.
  10. Hi Guys... not been on for a while and am well impressed at the progress you have made. So, from my end... Bit the bullet and bought some lcd & tft displays for my uno. I have managed to get the tft printing text but for the love of god cannot add the simpit code into arduino ide without it giving me compiling errors. I notice some of you have mentioned the lcd displays. Any chance you could stick up some examples so that I can try and figure out what I am doing wrong??? All I am trying to do at the moment is get it to display altitude info from KSP... Much appreciated.. keep up the good work!!! Jez
  11. defo gonna try it now! . The only problem is that my CDO (I am so OCD I have to put it in alphabetical order!!) is gonna be screaming at me to check the state of switches now when I change crafts! It would be "a nice to have" that the status led flashes if it is the wrong position?? So how do you go about getting the action group status out of the game. Is it the same procedure as the telemetry? I don't have much time this weekend as I am a photographer at a wedding all day tomorrow but I would love to figure that part out as well.
  12. Thanks stibbons, i had managed to get the switch to work as you discribed but was thinking if there was a point in the game where you go to a ship that has rcs on and your switch is in the off position it would instantly turn it off. Or worse something like landing gear. If the switch was in the gear up position and you swap to a lander you wouldn't want you ship retracting its gear and falling over. Could that happen or am I talking rubbish.
  13. OK... been reading and my head hurts... a lot! If I want to implement a switch for the standard action groups for example RCS, I would need check for the current status of the RCS_bit and then activate or deactivate the action accordingly dependent on the position of the switch. How do I request from KSP the state of the RCS_Bit? Is there an RCS_MESSAGE?
  14. Thanks Stibbons. If I where to try and understand what you are doing so that I may contribute to this where would you suggest is a good place to start researching? I love to find out how things work so would love to follow this and actually understand what you guys are talking about, where the info comes from and how it integrates with the arduino. Please fell free to tell me to do one if I am standing on your toes!
×
×
  • Create New...