flash-led

· · 个人记录

flash.ino

//Created by ThomasGja 20231228
unsigned long long hertz = 50, change, ct, temp;
char ch;
bool p, d=false;
#define LED 11
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  Serial.println(F("s"));
}
void wait(unsigned long long us){
  delay(us/1000);
  delayMicroseconds(us%1000);
}
unsigned long long rint(){
  unsigned long long tem = 0;
  while(Serial.available()){
    ch = Serial.read();
    if(ch>='0'&&ch<='9') tem= tem*10+ch-'0';
    else break;
  }
  return tem;
}
void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()){
    p=1;
    ch = Serial.read();

    if(ch == '+') temp = hertz +1;
    else if(ch == '-') temp = hertz -1;
    else if(ch == ':'){
      temp = rint();
      ch = Serial.read();//.
    }else if(ch=='d') d = true;
    else if(ch=='a') d = false;
    else p=0;

    if(p){
      if(!d){
        if(temp>0) hertz = temp;
        Serial.println(int(hertz));
      }else{ Serial.println(F("No Flashing")); digitalWrite(LED, 1); }
    }else{ Serial.println(F("[Wrong]")); }
  }

  if(!d){
    if(hertz!=0){
      ct = 1000000/2/hertz;
      digitalWrite(LED, 1);
      wait(ct);
      digitalWrite(LED, 0);
      wait(ct);
    }else{
      Serial.println(F("hertz == 0!"));
      delay(1000);
    }
  }
}

ctrl.py

# ctrl.py
# Created by ThomasGja 20231228

import serial, getch, sys
from time import sleep
print("Connecting...")
ser = serial.Serial('/dev/cu.usbmodem11101', 9600, timeout=8)#change yourself
ser.read_all()
Mode = 1 # 1:+- ; 2:frequency input
print("LET'S START!")

def OUTPUTser():
    print(ser.read_all().decode(), end='')
while True:
    if Mode == 1:
        print(":",end='')
        sys.stdout.flush()
        ch = getch.getche()
        if ch in ['+','=']:
            ser.write(b'+')
            sleep(0.02)
            OUTPUTser()
        elif ch in '-ad':
            ser.write(ch.encode('utf-8'))
            sleep(0.02)
            OUTPUTser()
        elif ch == 'm':
            Mode = 2
            print('Mode:',Mode)
    elif Mode == 2:
        try:
            freq = int(input(":"))
            if freq == 0:
                Mode = 1
                print('Mode:',Mode)
            ser.write( str(':'+str(freq)+'.').encode('utf-8') )
            sleep(0.05)
            OUTPUTser()
        except:
            print("Input Error!")
    sleep(0.05)