2019年12月13日 星期五

[stm32]timer and interrupts.


玩玩看,圖形化介面設定 STM32Cube 及 IDE 功能...

不錯的文章:
https://microtechnics.ru/en/stm32cube-timer-and-interrupts/

2019年12月11日 星期三

[C#] StringBuilder



String 物件不可變.每次您使用 System.String 類別的其中一個方法時,就會在記憶體中建立新的字串物件,這需要為該新物件配置新的空間.在您需要重複修改字串的情況下,與建立新 String 物件相關聯的額外負荷可能成本高昂.當您想要修改字串,而不建立新物件時,可以使用 System.Text.StringBuilder 類別. 例如,在迴圈中將許多字串串連在一起時,可以使用 StringBuilder 類別來提升效能.




不錯的文張:

在 .NET 中使用 StringBuilder 類別
https://docs.microsoft.com/zh-tw/dotnet/standard/base-types/stringbuilder

Day20-C#-StringBuilder

2019年12月6日 星期五

照著書本打

練習一下...

import requests
import re

url='http://www.mcut.edu.tw'
htmlfile=requests.get(url)
if htmlfile.status_code == requests.codes.ok:
    print("ok")
    print("html size=",len(htmlfile.text))

    pattern=input("search pattern:")
    if pattern in htmlfile.text:
        print("search %s ok" %pattern)
    else:
        print("search %s fail" %pattern)

    name=re.findall(pattern,htmlfile.text)
    if name !=None:
        print("%s find %d" %(pattern,len(name)))
    else:
        print("%s find 0" % pattern)

else:
    print("ng")

2019年11月15日 星期五

變更組裝,加入超音波測距模組





https://hackmd.io/@yoyostudy/ByGowUKIO


先讓它動起來:

int M1 = 10; //enable right whell
int E1 =12;  //high;forward
int M2 =11;  //enable left whell                    
int E2 = 13; //high:forward

int BUZZER =4;

int TRIGGER_OUT=7;
int ECHO_IN=8;


long ultrasonic_rangefinder()
{
  digitalWrite(TRIGGER_OUT, HIGH);     // 給 Trig 高電位,持續 10微秒
  delayMicroseconds(10);
  digitalWrite(TRIGGER_OUT, LOW);

  long duration = pulseIn(ECHO_IN, HIGH);  

  long cm = (duration/2) / 29.1;        
  return(cm);
}



void motor_forward()
{
  digitalWrite(M1,HIGH);
  digitalWrite(E1,HIGH);
  digitalWrite(M2,HIGH);
  digitalWrite(E2,HIGH);
}

void motor_stop()
{
  digitalWrite(M1,LOW);
  digitalWrite(M2,LOW);
}


void motor_backward()
{
  digitalWrite(M1,HIGH);
  digitalWrite(E1,LOW);
  digitalWrite(M2,HIGH);
  digitalWrite(E2,LOW);
}

void setup() {
  // put your setup code here, to run once:

  Serial.begin(9600);

  //initial motor
  pinMode(M1, OUTPUT);
  pinMode(E1, OUTPUT);
  pinMode(M2, OUTPUT);
  pinMode(E2, OUTPUT);

  //initial buzzer
  pinMode(BUZZER,OUTPUT);

  //initial ultrasonic rangefinder
  pinMode(TRIGGER_OUT,OUTPUT);
  pinMode(ECHO_IN,INPUT);

  //motor stop
  digitalWrite(M1,LOW);
  digitalWrite(M2,LOW);

  //buzzer off
  digitalWrite(BUZZER,LOW);

  //ultrasonic rangefinder off
  digitalWrite(TRIGGER_OUT,LOW);
 
}

void loop() {
  // put your main code here, to run repeatedly:
 
  long dist,dist1,dist2;

  delay(50);
 
  dist1=ultrasonic_rangefinder();
  dist2=ultrasonic_rangefinder();
  dist=(dist1+dist2)/2;
 
  Serial.print(dist);
  Serial.print(" ");
  if(dist>50)
  {
    motor_forward();
    digitalWrite(BUZZER,LOW);
  }
  else if(dist<20)
  {
    motor_backward();
    digitalWrite(BUZZER,HIGH);
  }

}


成功....YA!! YA!!

跑得好慢.....Zzzz



2019年11月1日 星期五

組裝










將L298N 換成L298P模組,不用跳接太多線
https://protosupplies.com/product/l298p-motor-driver-shield/
https://www.taiwansensor.com.tw/product/l298p-motor-shield-arduino-%E7%9B%B4%E6%B5%81%E9%A6%AC%E9%81%94%E9%A9%85%E5%8B%95%E6%A8%A1%E7%B5%84-%E7%9B%B4%E6%B5%81%E9%9B%BB%E6%A9%9F%E9%A9%85%E5%8B%95%E6%A8%A1%E7%B5%84/