發表文章

SD1306 不亮問題

圖片
 同一個OLED 在 ESP8266 跟 ARDUINO Uno 會有不一樣的設定 在 ESP8266  要改二個地方 -1 跟 03C Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1 ); display.begin(SSD1306_SWITCHCAPVCC, 0x3C )) {}; 如果是在 Uno 則要設定成 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET ); display.begin(SSD1306_SWITCHCAPVCC, 0x3C )) {};

74LS47N 電路圖

圖片
照網路抓的布線圖接法不知道為什麼都會搞壞幾顆燈,這邊特別筆記! 共陽極接一顆300歐姆即可,ABCD 為高電壓,要接低電壓(GND)才能正常顯示 !

關於 Sharp GP2Y1051A

 基本上如果不深論處理的公式原理,那就直接套用! 但是唯一要記的就是 上傳 時候, 一定要把 TX線 移除! 如果不移除會搶到USB的TX腳位 因為是用同一線路,會一直失敗!    int incomeByte[7];     int data;     int z=0;     int sum,count;     unsigned long starttime;     float average_pm2d5,sum_2s;     //#include <SD.h>     //File myFile;     void setup()     {       Serial.begin(2400);       //SD.begin(4);       starttime=millis();     }     void loop()     {       while (Serial.available()>0){         data=Serial.read();         if(data == 170){           z=0;           incomeByte[z]=data;         }         else{           z++;           incomeByte[z]=data;         }         if(z==6)         {           sum=incomeByte[1]+ incomeByte[2]+ incomeByte[3] + incomeByte[4];           if(incomeByte[5]==sum && incomeByte[6]==255 )           {             float vo=(incomeByte[1]*256.0+incomeByte[2])/1024.00*5.000;             float c=vo*700;             sum_2s=sum_2s+c;             count++;             if(abs(millis()-starttime)>2000){         

UART 使用方式

圖片
STM32F103c8 一直以來,我都以為ST LINK 可以調度到Com Port! 結果誤會大了,需要另外使用USB to Uart 才可以! 我使用Silicon CP120x 來達成串口調派! 參考資料: 微雪官網

STM32F103 使用 USB port 筆記!!

用CubeMX設定 USB 虛擬port 要在 usbd_cdc_if.c 找到 CDC_Receive_FS 加入 三個 欄位 {   USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);   USBD_CDC_ReceivePacket(&hUsbDeviceFS);     received_data_size = *Len;     memcpy(received_data, Buf, received_data_size);     receive_total += received_data_size;      return (USBD_OK);   /* USER CODE END 6 */ } 然後再 找 #define APP_RX_DATA_SIZE  64 #define APP_TX_DATA_SIZE  64     uint8_t received_data[64];     uint32_t received_data_size;     uint32_t receive_total = 0; 加入上面三個 在 usbd_cdc_if.h定義 那三個欄位 extern uint8_t received_data[]; extern uint32_t received_data_size; extern uint32_t receive_total; 最後 在main.c  加入 #include "usbd_cdc_if.h"  找 while(1)加入  while (1)   {             if(received_data_size >0){                     if (received_data[0] == '1'){                             HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);                             CDC_Transmit_FS((uint8_t*)"LED PB_8.super hard