・せっかく基板に付けたQFP版、使わなきゃ
ということで久しぶりのメキシカンハット
TEK4010(4014)端末エミュレーションです。
・以前使っていたスケッチが見つからず、アレンジしたら
ちょっと縦長のハットになりました
・手前が自作のCH340KのUSB-TTL変換
いつものFTDIケーブルはコネクタが故障
◆ATMega328でメキシカンハット
— とろ☆らぼ(星尾登路郎) (@TororoLab) 2024年11月21日
・せっかく基板に付けたQFP版、使わなきゃ
ということでメキシカンハット😆
TEK4010(4014)端末エミュレーション
・以前使っていたスケッチが見つからず、ちょっと縦長のハットです😅
・手前が自作のCH340KのUSB-TTL変換
いつものFTDIケーブルはコネクタが故障😭 pic.twitter.com/9tWFfed4SG
】
void setup() {
// put your setup code here, to run once:
// シリアルポートを開き、転送速度を9600bpsに設定する。
Serial.begin(115200);
}
//****************************************************************************
// Tera Term TEK関数
//****************************************************************************
/************** 色の属性を決める *******************/
/* 0:黒 1:赤 2:緑 3:黄 4:青 5:紫 6: 水色 7:白 */
void tekcolor(char color)
{
Serial.write(0x1b);
Serial.print("[3");
Serial.write(color + 0x30);
Serial.print("m");
}
void Tek_Clr(void)
{
Serial.write(0x1b); //ESC アルファモードへ戻す
Serial.write(0x0c); //FF
Serial.write(0x0d); //CR
Serial.write(0x0a); //LF
}
/* Dotを打つ 始点・終点を同じ座標にしたLine引き */
void Tek_Dot(int xs,int ys)
{
unsigned char x0,y0,x1,y1;
Serial.write(0x1D); //GS
x0=(unsigned char)(xs&0x1F); //下位5byteを取り出す
x0=x0|0x40; //Tag-Bitをセット
y0=(unsigned char)(ys&0x1F); //下位5byteを取り出す
y0=y0|0x60; //Tag-Bitをセット
x1=(unsigned char)((xs>>5)&0x1F); //上位byteを5個右シフトしたあと下位5byteを取り出す
x1=x1|0x20; //Tag-Bitをセット
y1=(unsigned char)((ys>>5)&0x1F); //上位byteを5個右シフトしたあと下位5byteを取り出す
y1=y1|0x20; //Tag-Bitをセット
Serial.write(y1); //座標送信
Serial.write(y0); //座標送信
Serial.write(x1); //座標送信
Serial.write(x0); //座標送信
Serial.write(y1); //座標送信
Serial.write(y0); //座標送信
Serial.write(x1); //座標送信
Serial.write(x0); //座標送信
Tek_Alpha(); //キャラクタモードに戻す
}
//*************文字描画モード(アルファモード)に戻す*************
void Tek_Alpha(void)
{
Serial.write(0x1F); //US アルファモードへ戻す
}
//**********グラフィックモードへ切り替え**********
void Tek_Graph(int vector_no)
{
Serial.write(0x1D); //GS
Serial.write(0x1B); //ESC
Serial.write(vector_no|0x60); //線種を選ぶ
}
/* 直線を引く[xs,ys]→[xg,yg] 座標は左下が[0,0] 幅1023 高さ778まで.
データは10bit+TagBitの構成で全部で8byte送信.
線種の番号
0:標準実線 1:点線 2:一点鎖線 3:短い鎖線 4:長い鎖線 8:Bold実線
*/
void Tek_Line(int xs,int ys,int xg,int yg,int line_no)
{
unsigned char x0,y0,x1,y1;
Tek_Graph(line_no); //グラフィックモードに移行(線種を指定)
x0=(unsigned char)(xs&0x1F); //下位5byteを取り出す
x0=x0|0x40; //Tag-Bitをセット
y0=(unsigned char)(ys&0x1F); //下位5byteを取り出す
y0=y0|0x60; //Tag-Bitをセット
x1=(unsigned char)((xs>>5)&0x1F); //上位byteを5個右シフトしたあと下位5byteを取り出す
x1=x1|0x20; //Tag-Bitをセット
y1=(unsigned char)((ys>>5)&0x1F); //上位byteを5個右シフトしたあと下位5byteを取り出す
y1=y1|0x20; //Tag-Bitをセット
Serial.write(y1); //座標送信
Serial.write(y0); //座標送信
Serial.write(x1); //座標送信
Serial.write(x0); //座標送信
x0=(unsigned char)(xg&0x1F); //下位5byteを取り出す
x0=x0|0x40; //Tag-Bitをセット
y0=(unsigned char)(yg&0x1F); //下位5byteを取り出す
y0=y0|0x60; //Tag-Bitをセット
x1=(unsigned char)((xg>>5)&0x1F); //上位byteを5個右シフトしたあと下位5byteを取り出す
x1=x1|0x20; //Tag-Bitをセット
y1=(unsigned char)((yg>>5)&0x1F); //上位byteを5個右シフトしたあと下位5byteを取り出す
y1=y1|0x20; //Tag-Bitをセット
Serial.write(y1); //座標送信
Serial.write(y0); //座標送信
Serial.write(x1); //座標送信
Serial.write(x0); //座標送信
Tek_Alpha(); //キャラクタモードに戻す
}
void Tek_Char_PosSet(int xs,int ys)
{
unsigned char x0,y0,x1,y1;
Serial.write(0x1D); //GS
x0=(unsigned char)(xs&0x1F); //下位5byteを取り出す
x0=x0|0x40; //Tag-Bitをセット
y0=(unsigned char)(ys&0x1F); //下位5byteを取り出す
y0=y0|0x60; //Tag-Bitをセット
x1=(unsigned char)((xs>>5)&0x1F); //上位byteを5個右シフトしたあと下位5byteを取り出す
x1=x1|0x20; //Tag-Bitをセット
y1=(unsigned char)((ys>>5)&0x1F); //上位byteを5個右シフトしたあと下位5byteを取り出す
y1=y1|0x20; //Tag-Bitをセット
Serial.write(y1); //座標送信
Serial.write(y0); //座標送信
Serial.write(x1); //座標送信
Serial.write(x0); //座標送信
Tek_Alpha(); //キャラクタモードに戻す
}
//************十字カーソルマークを任意座標中心に表示************
void Tek_Cross_Cursor(int xs,int ys)
{
int length=10; //カーソルの長さ
Tek_Line(xs-length/2,ys,xs+length/2,ys,0); //ラインを引く
Tek_Line(xs,ys-length/2,xs,ys+length/2,0); //ラインを引く
}
//****************************************************************************
// MAINプログラム
//****************************************************************************
void loop() {
int size_x,size_y;
float c,r,z,dx,dy,x,y;
int i,total,no;
int color1,color2,color3;
size_x=1023; //Tek-Windowの横サイズ
size_y=778; //vTek-Windowの縦サイズ
char count;
Tek_Clr();
tekcolor(7);
total=size_x;
for(y=-180;y<=180;y=y+4){
for(x=-180;x<=180;x=x+4){
c=(float)i/(float)511; //
r=3.14159/180*sqrt(x*x+y*y);
z=100*cos(r)-20*cos(3*r);
z = z*5;
dx=(int)(462+x/1+(16-y/2)/2);
dy=(int)((650-y/2+z)/2);
tekcolor(2); //Dotの色を変える 緑
Tek_Dot(dx,dy); //Dotを打つ
}
}
delay(5000);
}