import processing.io.*;
import g4p_controls.*;
import org.guilhermesilveira.Timers;
// 멀티타임시 적용
// Timers timers = new Timers(this);
PFont myFont;
int cnt = 0;
int led_buf = 0;
int[] led_box = new int[10];
//int[] led_box = {0,0,0,0,0,0,0,0};
int fnd[]={11,5,6,13,19,26,21,20,16,12,7,8};
//int buf=1234;
int t_loop=0;
int tg_flag=0;
int buf=1234;
void setup()
{
size(680,800);
smooth(); //그래픽, 이미지 등 부드럽게 처리
background(220);
myFont = createFont("한초롬바탕", 32);
textFont(myFont);
textAlign(CENTER, CENTER);
textSize(50);
strokeWeight(6);
stroke(0,0,255);
fill(0);
text("IoT 전문가 과정", 340, 50);
led_dis(60, 200); //led 8개 그림
led_init(); //R-Pi 초기화
createGUI(); //gui(체크박스, 옵션 기타 등등) 위치 및 객체 생성
//fnd display
noStroke(); //fnd에는 stroke 적용 안함
fnd_blk(200,490); // x_1000 = x 측 좌표 배열 범위 70식 배치
fnd_blk(270,490); // x_100
fnd_blk(340,490); // x_10
fnd_blk(410,490); // x_1
//7-segment fnd
for(int k=0; k<=11; k++){
pin_mode_set(fnd[k],"out");
}
frameRate(1024);
//interrupt (ms, nth, f() ) 1000000번 per 1ms 실행 //-1 = 무한루프
new Timers(this).add(1,-1,() -> fnd_out(buf));
//new Timers(this).add(1,1000000,this::hello);
}
/*참고용
void hello(int fnd_out)
{
cnt1++;
println(cnt1);
fnd_out(buf);
}
*/
void draw()
{
// 실습3 카운터
//1. led output
byte_out(0xff-cnt);
//2. 화면지움 (겹치지 않도록)
background(220);
fill(0);
textSize(50);
text("IoT 전문가 양성과정", 340, 50);
//3. 화면출력
//textSize(30);
//fill(255,0,0);
//text("Up Cnt = " + str(cnt), 100,700);
//text("Dn Cnt = " + str(255-cnt), 100,750);
//print("Up Cnt = ");
//println(cnt);
//4. 카운터 값 증가
cnt++;
//5. 카운터값 Max 체크
if(cnt > 255) cnt = 0;
//6. 지연
//delay(200);
//지워진 화면 다시 표시
strokeWeight(8);
stroke(0,0,255);
led_dis(60, 200);
noStroke();
fnd_blk(200,490); // x_1000 = x 측 좌표 배열 범위 70식 배치
fnd_dis(200,490,cnt/1000,255,0); //시작x,y,data,color,dp
fnd_blk(270,490); // x_100
fnd_dis(270,490,cnt%1000/100,255,0);
fnd_blk(340,490); // x_10
fnd_dis(340,490,cnt%100/10,255,0);
fnd_blk(410,490); // x_1
fnd_dis(410,490,cnt%10,255,1);
led_cursor();
led_buf = cnt;
led_cnt_dis(60, 200, led_buf); //led_buf에 임의의 데이터 써주면 led모듈에 표시됨
//t_loop++;
//if(t_loop>1)
//{
// t_loop=0;
// if(tg_flag == 0) tg_flag=1;
// else tg_flag=0;
//}
//if(tg_flag==1){
//fnd_out(buf);
//}
//print(mouseX);
//print(" ");
//println(mouseY);
}
/*
void mousePressed() {
if (mouseButton == LEFT) {
switch(mouse_cnt)
{
case 1: led_cnt_dis(60, 200, 0x01); break;
} //switch end
} // if end
}
*/
--------------------------------------------------------------------------------------------------------------------------------
//my_fnd_lib
final int x1000 = 11;
final int x100 = 5;
final int x10 = 6;
final int x1 = 13;
final int fnd_font[] = //캐소드
{
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, H, L, E, o, P, F,
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x76,0x38,0x79,0x5c,0x73,0x71,
// C, d, A, u, T, r, b, blk
0x39, 0x5e, 0x77, 0x1c, 0x44, 0x50, 0x7c, 0x00
};
final int fnd_font2[]=
{ // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0xcf,0x06,0xcf,0x99,0x6d,0xbd,0xc7,0x7f,0x6f, 0xf7
};
int scan=0;
void fnd_out(int data)
{
scan++;
if(scan>4) scan=1;
switch(scan)
{
case 1: // x1000
bit_out(x1, 0); // fnd off
byte_out_fnd(0xff-fnd_font[data/1000]);
bit_out(x1000, 1); // fnd on
break;
case 2: // x100 자리
bit_out(x1000, 0); // fnd off
byte_out_fnd(0xff-fnd_font[data%1000/100]);
bit_out(x100, 1); // fnd on
break;
case 3: // x10자리
bit_out(x100, 0); // fnd off
byte_out_fnd(0xff-fnd_font[data%100/10]);
bit_out(x10, 1); // fnd on
break;
case 4: // x1
bit_out(x10, 0); // fnd off
byte_out_fnd(0xff-fnd_font[data%10]);
bit_out(x1, 1); // fnd on
break;
}
}
------------------------------------------------------------------------------------------------------------------------------------
// my_R-Pi_Lib
// V1.0 == 2023, 04, 9
final int led1 = 2; // pin 2
final int led2 = 3; // pin 3
final int led3 = 4;
final int led4 = 17;
final int led5 = 27;
final int led6 = 22;
final int led7 = 10;
final int led8 = 9; // pin 9
final int fnd1 = 19; //a
final int fnd2 = 26; //b
final int fnd3 = 21;
final int fnd4 = 20;
final int fnd5 = 16;
final int fnd6 = 12;
final int fnd7 = 7;
final int fnd8 = 8; //dp
final int ON = 1;
final int OFF = 0;
final int _0N = 0;
final int _OFF = 1;
final void bit_out(int pin, int value)
{
if(value == 1) GPIO.digitalWrite(pin, GPIO.HIGH);
else GPIO.digitalWrite(pin, GPIO.LOW);
}
final void pin_mode_set(int pin, String value)
{
if(value == "out") GPIO.pinMode(pin, GPIO.OUTPUT);
else if(value == "in") GPIO.pinMode(pin, GPIO.INPUT);
}
void byte_out(int data)
{
bit_out(led1, data%2); // bit 0 = lsb
bit_out(led2, data/2%2); // bit 1
bit_out(led3, data/4%2); // bit 2
bit_out(led4, data/8%2); // bit 3
bit_out(led5, data/16%2); // bit 4
bit_out(led6, data/32%2); // bit 5
bit_out(led7, data/64%2); // bit 6
bit_out(led8, data/128%2); // bit 7 = msb
}
void byte_out_fnd(int data)
{
bit_out(fnd1, data%2); // bit 0 = lsb
bit_out(fnd2, data/2%2); // bit 1
bit_out(fnd3, data/4%2); // bit 2
bit_out(fnd4, data/8%2); // bit 3
bit_out(fnd5, data/16%2); // bit 4
bit_out(fnd6, data/32%2); // bit 5
bit_out(fnd7, data/64%2); // bit 6
bit_out(fnd8, data/128%2); // bit 7 = msb
}