// Seven Segment Display // software mock-up // // Robert Twomey // 8/16/2007 // Constants // timing int ON_TIME = 0;//1000; int lineOn = 1000; int HOLD_TIME = 32000; // graphics constants int L= 48; int S = 5; int XSPACING = S*4; int CHARXSIZE = L+S*2+XSPACING; int YSPACING = 80; int CHARYSIZE = L*2+S*4+YSPACING; int NUMCHARS = 12; // Globals // text buffers String inputBuff =""; String outputBuff=""; String list[] = { "" }; int listPos = 500; // character font byte[] font = new byte[128]; byte[] mapping = new byte[128]; // Program void setup() { size(CHARXSIZE*(NUMCHARS+2), CHARYSIZE); background(0); initCharacterArray(); loadText(); }; void draw() { int charIndex; char k; // display text buffers //displayInputBuff(); //displayOutputBuff(); displayNextLine(); delay(lineOn); } void loadText() { //String lines[] = loadStrings("two stroke engine2.txt"); String lines[] = loadStrings("script.txt"); //String lines[] = loadStrings("SCIP.txt"); //String lines[] = loadStrings("serialart.txt"); println("there are " + lines.length + " lines:"); for (int i=0; i < lines.length; i++) { //println(lines[i]); /*String currLine[] = split(lines[i]); for (int j=0; j < currLine.length; j++) { list=append(list, currLine[j]); //println(currLine[j]); }*/ int j=0; // loop to parse text into NUMCHARS length chunks while (j+NUMCHARS < lines[i].length()) { String nextChunk = lines[i].substring(j, j+NUMCHARS); list = append(list, nextChunk); println(nextChunk); j+=NUMCHARS; } // handle remainder of last line String nextChunk = lines[i].substring(j, lines[i].length()); list = append(list, nextChunk); println(nextChunk); } for(int i=0; i+ font[39]=0x02; // '=HIGH_RIGHT_VERTICAL //font[39]=0x01; // '=HIGH_BAR //font[46]=0x0C; // .->LOWER_RIGHT_ANGLE font[46]=0x00; mapping[46]=95; // .->_ font[58]=0x00; mapping[58]=95; // :->_ font[43]=0x46; // + font[44]=0x00; mapping[44]=95; // ,->_ font[45]=0x40; // - font[48]=0x3F; // 0 font[49]=0x06; // 1 font[50]=0x5B; // 2 font[51]=0x4F; // 3 font[52]=0x66; // 4 font[53]=0x6D; // 5 font[54]=0x7D; // 6 font[55]=0x07; // 7 font[56]=0x7F; // 8 font[57]=0x67; // 9 for(i=58; i<65; i++) font[i]=0x00; // blank // upper case letters. font[65]=0x77; // A font[66]=0x7F; // B font[67]=0x39; // C //font[68]=0x00; mapping[68] = 100; // D->d font[68]=0x3F; // D font[69]=0x79; // E font[70]=0x71; // F font[71]=0x3D; // G font[72]=0x76; // H font[73]=0x06; // I font[74]=0x0E; // J font[75]=0x00; mapping[75]=72; // K->H font[76]=0x38; // L font[77]=0x00; mapping[77]=78; // M->N font[78]=0x37; // N font[79]=0x3F; // O font[80]=0x73; // P font[81]=0x00; mapping[81]=113; // Q->q font[82]=0x00; mapping[82]=65; // R->A font[83]=0x6D; // S font[84]=0x07; // T font[85]=0x3E; // U font[86]=0x00; mapping[86]=85; // V->U font[87]=0x00; mapping[87]=85; // W->U font[88]=0x00; mapping[88]=72; // X->H` font[89]=0x66; // Y font[90]=0x5B; // Z for(i=91; i<95; i++) font[i]=0x00; // blank font[95]=0x08; // _ font[96]=0x00; // blank // lower case letters font[97]=0x5c; // a font[98]=0x7C; // b font[99]=0x58; // c font[100]=0x5E; // d font[101]=0x00; mapping[101]=69; // e->E font[102]=0x71; // f font[103]=0x6F; // g font[104]=0x74; // h font[105]=0x04; // i font[106]=0x0c; // j font[107]=0x00; mapping[107]=72; // k->H font[108]=0x06; // l font[109]=0x00; mapping[109]=110; // m->n font[110]=0x54; // n font[111]=0x5C; // o font[112]=0x73; // p font[113]=0x67; // q font[114]=0x50; // r font[115]=0x00; mapping[115]=83; // s->S font[116]=0x46; // t, alternately, could be 0x70 font[117]=0x1C; // u font[118]=0x00; mapping[118]=117; // v->u font[119]=0x00; mapping[119]=117; // w->u font[120]=0x00; mapping[120]=72; // x->H font[121]=0x6E; // y font[122]=0x00; mapping[122]=90; // z->Z for(i=123; i<128; i++) font[i]=0x00; // blank } void putChar(int charIndex, int timeOn, int xPos, int yPos) { int actualIndex; if(charIndex >= 0 && charIndex < 128) { if(mapping[charIndex]!=0) { actualIndex=mapping[charIndex]; } else { actualIndex=charIndex; } // put character to display //outb(PORTA, font[actualIndex]); //timerPause(timeOn); drawLights(font[actualIndex], xPos, yPos); delay(timeOn); } } // display hardware emulation void displayNextLine() { // show next line of text buffer at top of screen int charIndex; char k; String currLine; background(0); //currLine = (list[listPos]); currLine = list[listPos]; for(int i=0;i= list.length) listPos = 0; } void drawLights(byte charData, int xPos, int yPos) { int X=xPos; int Y=yPos; stroke(255); // 'a' segment if((charData & 0x01)==0x01) { line(X+S, Y-1, X+S+L, Y-1); line(X+S, Y+1, X+S+L, Y+1); }; // 'b' segment if((charData & 0x02)==0x02) { line(X+S+S+L-1, Y+S, X+S+S+L-1, Y+S+L); line(X+S+S+L+1, Y+S, X+S+S+L+1, Y+S+L); }; // 'c' segment if((charData & 0x04)==0x04) { line(X+S+S+L-1, Y+S+S+S+L, X+S+S+L-1, Y+S+S+S+L+L); line(X+S+S+L+1, Y+S+S+S+L, X+S+S+L+1, Y+S+S+S+L+L); }; // 'd' segment if((charData & 0x08)==0x08) { line(X+S, Y+S+S+S+S+L+L-1, X+S+L, Y+S+S+S+S+L+L-1); line(X+S, Y+S+S+S+S+L+L+1, X+S+L, Y+S+S+S+S+L+L+1); }; // 'e' segment if((charData & 0x10)==0x10) { line(X-1, Y+S+S+S+L, X-1, Y+S+S+S+L+L); line(X+1, Y+S+S+S+L, X+1, Y+S+S+S+L+L); }; // 'f' segment if((charData & 0x20)==0x20) { line(X-1, Y+S, X-1, Y+S+L); line(X+1, Y+S, X+1, Y+S+L); }; // 'g' segment if((charData & 0x40)==0x40) { line(X+S, Y+S+S+L-1, X+S+L, Y+S+S+L-1); line(X+S, Y+S+S+L+1, X+S+L, Y+S+S+L+1); }; //println(hex(charData)); } void sendBuffToDisplay() { outputBuff=inputBuff; //println(inputBuff); inputBuff=""; background(0); }