Linux系統下,RAM開發板實現煙霧感測器

2021-09-27 01:34:53 字數 4406 閱讀 1449

煙霧感測器    

串列埠通訊:乙個bit位乙個bit位的傳輸

接收方和傳送方有相同的設定和波特率

串列埠程式設計:設定串列埠資訊

串列埠:rs232:4根線

vcc 

gnd 

txdrxd

接線:斷電接線

接線後注意檢查是否接錯,

t->r r->t 交叉接線

開發板串列埠:右邊的四排針

4組串列埠

com1:通訊串列埠 /dev/ttysac0

com2:/dev/ttysac1

com3:/dev/ttysac2

com4:/dev/ttysac3

com5:沒寫驅動

使用煙霧感測器:

1.接線

2.初始化串列埠(感測器和開發板通訊的細節)設定串列埠

3.編寫程式,檢測煙霧濃度

煙霧感測器:

你給他傳送乙個固定的命令,他就會給你返回當前的煙霧濃度。

實踐:利用煙霧感測器測量煙霧濃度,實現煙霧報警(煙霧濃度高於某乙個設定值蜂鳴器報警),實時的把煙霧濃度顯示到開發板上面。

#include #include #include #include #include #include #include #include int * plcd;

//全域性變數,代表對映後的首位址

int value=0;

char number[10][840]=,

/*-- 文字: 1 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=18x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=24x35 --*/

,/*-- 文字: 2 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=18x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=24x35 --*/

,/*-- 文字: 3 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=18x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=24x35 --*/

,/*-- 文字: 4 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=18x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=24x35 --*/

,/*-- 文字: 5 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=18x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=24x35 --*/

,/*-- 文字: 6 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=18x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=24x35 --*/

,/*-- 文字: 7 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=18x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=24x35 --*/

,/*-- 文字: 8 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=18x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=24x35 --*/

,/*-- 文字: 9 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=18x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=24x35 --*/

};char word[5][1400] =

,/*-- 文字: 霧 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=35x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=40x35 --*/

,/*-- 文字: 濃 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=35x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=40x35 --*/

,/*-- 文字: 度 --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=35x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=40x35 --*/

,/*-- 文字: : --*/

/*-- 宋體26; 此字型下對應的點陣為:寬x高=35x35 --*/

/*-- 寬度不是8的倍數,現調整為:寬度x高度=40x35 --*/ };

/*函式的功能:在指定的點顯示乙個指定的顏色

函式引數:

@x:你指定的點的橫座標

@y:你指定的點的縱座標

@color:你指定的顏色

函式的返回值:無

*/void pwm(int flag)

//[2]---write

//while(1)

// //sleep(1);

//break;

//}//[3]

close(fd);

}void lcd_draw_point(int x,int y,int color)

*(plcd+800*y+x) = color;

}//清屏

void lcd_clear(int color) }}

//顯示一張指定的到指定的位置

/*name:名字

x0,y0:起始位置

w,h:的大小

*/void lcd_draw_bmp(char *name,int x0,int y0)

int size;

int w,h;

//定位檔案的游標

char buf[4]=;

lseek(fd_bmp,0x02,seek_set);

read(fd_bmp,buf,4);

size = (buf[0]) | (buf[1]<<8) | (buf[2]<<16) | (buf[3]<<24);

lseek(fd_bmp,0x12,seek_set);

read(fd_bmp,buf,4);

w = (buf[0]) | (buf[1]<<8) | (buf[2]<<16) | (buf[3]<<24);

lseek(fd_bmp,0x16,seek_set);

read(fd_bmp,buf,4);

h = (buf[0]) | (buf[1]<<8) | (buf[2]<<16) | (buf[3]<<24);

lseek(fd_bmp,0x1c,seek_set);

read(fd_bmp,buf,2);

int color_depth = (buf[0]) | (buf[1]<<8);

printf("size = %d,w = %d,h = %d\n",size,w,h);

printf("color_depth = %d\n",color_depth);

//游標偏移到畫素資料處

lseek(fd_bmp,0x36,seek_set);

char pixel[w*h*(color_depth/8)];

read(fd_bmp,pixel,w*h*(color_depth/8));

close(fd_bmp);

//把畫素點資料合成顏色

char a,b,g,r;

int color;

int x,y;

int i = 0;

for(y=0;y200)

pwm(1);

else

pwm(0);

printf("smoke value = %d\n",value);

}int main()

//對映記憶體

plcd = mmap(null,800*480*4, prot_write | prot_read,map_shared,fd,0);

if(plcd == map_failed)

//操作螢幕

lcd_clear(0x00ffffff);

int index,i,j;

for( j=0;j<4;j++)

for(index = 0;index<175;index++)

if(number[a2][index] & (1

} monitor_smoke();

munmap(plcd,800*480*4);

close(fd);

}//測量顯示煙霧濃度並且報警。

//解對映

//關閉

return 0;

}

基於Arduino開發板實現電容觸控控制燈

在本篇文章中,我製作了乙個基於arduino電容式感應庫的觸控控制燈。您可以使用鋁箔製作觸控感測器 任何金屬物體都可以工作 你可以通過觸控鋁箔點亮或熄滅燈。capacitivesensor庫將兩個或多個arduino引腳轉換為電容式感測器,可以感應人體的電容。所有感測器的設定都需要乙個中到高值的電阻...

國產荔枝糖FPGA開發板實現FM發射

之前在zedboard上實現了fm發射,移植到荔枝糖fpga開發板上,執行異常,抓波形看,波形紊亂,由於最高時鐘為450m,估計是荔枝糖fpga開發板跑不了這麼高,那就降頻吧,降到18m果然可以發 top 如下 module top output 2 0 rgb led o,input clk24m...

linux系統移植(FS4412開發板)

linux系統移植主要由4大部分組成 1.交叉編譯器的安裝 2.u boot的移植 3.kernel的編譯與移植 4.根檔案系統的製作與移植 一.交叉編譯器的安裝 為什麼要安裝交叉編譯器?速度 開發板的編譯速度比較慢,而在虛擬機器上編譯速度快,節省時間 空間 編譯乙個檔案時,需要消耗很多資源,而開發...