This demonstrates generation of Code-39 barcodes on an LCD display.
LCD display is this http://www.sparkfun.com/products/9351
With SerialGLCD download | SourceForge.net and serialGLCD library for Arduino download | SourceForge.net
Text 7 characters or less can be generated on screen. The barcode is perfectly readable with Zbar.
The code is somewhat rough:
#include <serialGLCD.h>
#include <ctype.h>
serialGLCD lcd;
char ctl[]="NwNnWnWnN";
char zero[]="NnNwWnWnN";
char one[]="WnNwNnNnW";
char two[]="NnWwNnNnW";
char three[]="WnWwNnNnN";
char four[]="NnNwWnNnW";
char five[]="WnNwWnNnN";
char six[]="NnWwWnNnN";
char seven[]="NnNwNnWnW";
char eight[]="WnNwNnWnN";
char nine[]="NnWwNnWnN";
char A[]="WnNnNwNnW";
char B[]="NnWnNwNnW";
char C[]="WnWnNwNnN";
char D[]="NnNnWwNnW";
char E[]="WnNnWwNnN";
char F[]="NnWnWwNnN";
char G[]="NnNnNwWnW";
char H[]="WnNnNwWnN";
char I[]="WnNnNwWnN";
char J[]="WnNnNwWnN";
char K[]="WnNnNnNwW";
char L[]="NnWnNnNwW";
char M[]="WnWnNnNwN";
char N[]="NnNnWnNwW";
char O[]="WnNnWnNwN";
char P[]="NnWnWnNwN";
char Q[]="NnNnNnWwW";
char R[]="WnNnNnWwN";
char S[]="NnWnNnWwN";
char T[]="NnNnWnWwN";
char U[]="WwNnNnNnW";
char V[]="NwWnNnNnW";
char W[]="WwWnNnNnN";
char X[]="NwNnWnNnW";
char Y[]="WwNnWnNnN";
char Z[]="NwWnWnNnN";
char sp[]="NwWnNnWnN";
int xc = 1;
void intr(char *c){
int n;
for(n = 0;n < 9;n++){
switch(c[n]){
case 'W': lcd.drawLine(xc, 0, xc, 64, 0); delay(7); lcd.drawLine(xc+1, 0, xc+1, 64, 0); delay(6); xc+=2; break;
case 'N': lcd.drawLine(xc, 0, xc, 64, 0); delay(7); xc++; break;
case 'w': xc+=2; break;
case 'n': xc++; break;
}
if(xc > 128){Serial.println("OVRFLW");}
}
xc++;
}
void str(char *s){
char a;
char *x;
for(a = 0;a < strlen(s);a++){
switch(tolower(s[a])){
case '*': x=ctl; break;
case 'a': x=A; break;
case 'b': x=B; break;
case 'c': x=C; break;
case 'd': x=D; break;
case 'e': x=E; break;
case 'f': x=F; break;
case 'g': x=G; break;
case 'h': x=H; break;
case 'i': x=I; break;
case 'j': x=J; break;
case 'k': x=K; break;
case 'l': x=L; break;
case 'm': x=M; break;
case 'n': x=N; break;
case 'o': x=O; break;
case 'p': x=P; break;
case 'q': x=Q; break;
case 'r': x=R; break;
case 's': x=S; break;
case 't': x=T; break;
case 'u': x=U; break;
case 'v': x=V; break;
case 'w': x=W; break;
case 'x': x=X; break;
case 'y': x=Y; break;
case 'z': x=Z; break;
case ' ': x=sp; break;
case '0': x=zero; break;
case '1': x=one; break;
case '2': x=two; break;
case '3': x=three; break;
case '4': x=four; break;
case '5': x=five; break;
case '6': x=six; break;
case '7': x=seven; break;
case '8': x=eight; break;
case '9': x=nine; break;
default : x=sp;
}
intr(x);
}
}
void setup(){
Serial.begin(115200);
delay(1500);
lcd.resetLCD();
delay(250);
unsigned char x,y;
for(x = 0;x < 128;x++){
for(y = 0;y < 64;y++){
lcd.togglePixel(x, y, 1);
}
}
str("*TEST*");
}
void loop(){
}