2015年5月23日 星期六

php練習-99乘法表、表單應用(此篇純題目,不具參考價值)

寫法格式上網查或翻書噢!!
軟體
  • notepad++
  • VMware
  • FileZilla
99乘法表
  • $i X $j = $k
方法一:用 for + if
邏輯:j = 1; j <=9; j ++當 j =9時,i +1 ,j 回到1
先試試吧XD
























然後!你會發現最後只出現2系列的乘法......
原因是php在開頭讀取if對j的運算後,不會再跑程式中的j的運算
有沒有很想揍人呢XD沒有的話代表你沒有先試上面的寫法- -

方法二:用2個for作迴圈
邏輯:先用i作迴圈,裡面包j迴圈
就降不然你還期待有甚麼-v-

表單應用
自己找格式......不然呢......做了你就知道為什麼我沒辦法貼格式了- -
於是下面是最後結果

頁面1







輸入後確定,轉向頁面2




頁面2




再來,想辦法把輸入的資料匯進資料庫中吧!
成功後,再做出一個頁面顯示所有使用者的資料
接著再sql將passwqrd加密存到密碼格裡
最後,做出用網址搜尋比對帳號密碼,顯示符合的
答案在紫菜那,嚴禁照抄!!

2015年5月20日 星期三

網路控制燈開關

注意:此範例問題特多- -
硬體

  • 麵包板
  • esp8266 IOT
  • usb轉ttl的板子
  • 照網站步驟接
程式

  • http://makezine.com/2015/04/01/installing-building-arduino-sketch-5-microcontroller/
注意

  • 須下載esp專用arduino 1.6.1
  • 板子型號、連接埠、燒錄方式(eptool)皆須重設
  • 若範例連編譯都沒有過,代表下載有問題,重新下載一次arduino似乎是固定問題
  • 範例程式傳進板子後,有時序列埠會沒有顯示wifi資訊,重傳就好(不過似乎後期會一直沒有顯示- -)
  • 網路控制燈如果輸入0還是無法暗下來,代表led埠和,改用帽型led
  • 以上3~5是固定問題大陷阱=~=

2015年5月19日 星期二

arduino-溫濕度感應器/圖案顯示器/顯示溫濕度

溫濕度感應器
硬體


  • arduino板
  • 麵包板
  • 溫濕度感應器DHT11
程式


  • http://ming-shian.blogspot.tw/2014/05/arduino19dht11.html
圖案顯示器
硬體
  • arduino板
  • 麵包板
  • nokia5110顯示器
  • 接腳按照程式接
程式
  • 下載https://github.com/adafruit/Adafruit-GFX-Library
  • 下載https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
  • 將上面兩個檔案解壓縮放進libraries
  • 從範例中開啟Adafruit-PCD8544-Nokia-5110-LCD-library的pcdtest
顯示溫濕度
硬體
  • arduino板
  • 麵包板
  • nokia5110顯示器
  • 溫濕度感應器DHT11
程式
  • 參考Adafruit-PCD8544-Nokia-5110-LCD-library的pcdtest中,Hello, world!那一段
  • // draw a single pixel以下全部刪除,只留Hello, world!那段
  • 將溫濕度感應.h檔導入,設好接腳define
  • 將print、println的值分別改成temperature =、DHT.temperature、C
  • 同樣方法改濕度
  • print跟println的差別在於有ln則換行
  • 改好後若發現temperature比humidity多一行是因為temperature = 這串超過螢幕範圍自動跳行,刪掉=後的空格就好
程式碼-此為將溫溼度合併在同個畫面,並不將數值反白


/*********************************************************************


This is an example sketch for our Monochrome Nokia 5110 LCD Displays


  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/products/338

These displays use SPI to communicate, 4 or 5 pins are required to
interface

Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!

Written by Limor Fried/Ladyada  for Adafruit Industries.
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <dht.h>   

// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

// Hardware SPI (faster, but must use certain hardware pins):
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
// Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
// Note with hardware SPI MISO and SS pins aren't used but will still be read
// and written to during SPI transfer.  Be careful sharing these pins!

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2


#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16

#define dht_dpin 2 //定義訊號要從Pin A0 進來  
  
dht DHT;   

static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
  B00000001, B11000000,
  B00000001, B11000000,
  B00000011, B11100000,
  B11110011, B11100000,
  B11111110, B11111000,
  B01111110, B11111111,
  B00110011, B10011111,
  B00011111, B11111100,
  B00001101, B01110000,
  B00011011, B10100000,
  B00111111, B11100000,
  B00111111, B11110000,
  B01111100, B11110000,
  B01110000, B01110000,
  B00000000, B00110000 };

void setup()   {
  Serial.begin(9600);

  display.begin();
  // init done
  // you can change the contrast around to adapt the display
  // for the best viewing!
  display.setContrast(50);
  display.clearDisplay();   // clears the screen and buffer
}
void loop(){
  //show H&T
  DHT.read11(dht_dpin);
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,0);
  display.println("Humidity = ");
  display.setTextColor(BLACK); 
  display.print(DHT.humidity);
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.println("%"); 
  display.display();
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.println("temperature =");
  display.setTextColor(BLACK); 
  display.print(DHT.temperature);
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.print("C"); 
  display.display();
  delay(2000);
  display.clearDisplay();   // clears the screen and buffer
}

2015年5月17日 星期日

arduino-紅外線接收/控制燈

硬體

  • arduino版
  • 麵包版
  • 紅外線接收器KEYES Infrared receiver module for arduino
  • LED
  • 遙控器
  • 按照圖示連,三個接腳為GND/3.3v(5v不行)/S
程式-讀取數值
#include <IRremote.h>     //記得下載IRremote.h並解壓移到libraries

int RECEIVE_PIN= 3;     //接腳改成自己keyes-S的腳,要選有pwn的
IRrecv irreceiver(RECEIVE_PIN);
decode_results results;
void setup()
{
  Serial.begin(9600);
  irreceiver.enableIRIn();      // Start the receiver
}

void loop() {
  if (irreceiver.decode(&results)) {
    Serial.println(results.value, HEX);     //點開右上序列阜視窗,以十六進位(HEX)顯示頻率。建議去掉HEX!另,此程式若常按按鈕只會顯示一次數值,其他為FFFFFFFF(4294967295),一個按鈕可能出現不同數值,多試幾次就可
    irreceiver.resume();

程式-按鈕控制LED,按數字幾便閃幾次
直觀式
  • 迴圈for
  • switch case


#include <IRremote.h>

int RECEIVE_PIN= 3;
IRrecv irreceiver(RECEIVE_PIN);
decode_results results;
void setup()
{
  Serial.begin(9600);
  irreceiver.enableIRIn();     //以上相同
  pinMode(2,OUTPUT);     //接LED的腳
}

void loop() {
  if (irreceiver.decode(&results)) {
    Serial.println(results.value);
    irreceiver.resume();
    switch(results.value){     //以results.value的值做判斷
    case 16738455:     //當值為16728455(按鈕1)時。值可在序列埠視窗按各按鈕查看。若顯示十六進位則須轉成十進位((所以才說不要HEX嘛> <
      Serial.println('1');     //在序列埠視窗顯示1
      digitalWrite(2,HIGH);
      delay(100);
      digitalWrite(2,LOW);     //亮一次後暗
      break;     //必須加!!case的跑法是從哪裡開始往下跑,而不是單跑一個case,不加的話會繼續跑面下面其他case
    case 16750695:     //按鈕二
    Serial.println('2');
      for(int i=0; i<2; i++){     //設定i=0,當i<2時則跑下面程式,每跑一次i就+1
        digitalWrite(2,HIGH);
        delay(100);
        digitalWrite(2,LOW);
        delay(100);
        }     //亮後熄滅跑兩次->亮滅二次
        break;
    case 16756815:
      Serial.println('3');
      for(int i=0; i<3; i++){
        digitalWrite(2,HIGH);
        delay(100);
        digitalWrite(2,LOW);
        delay(100);
        }
        break;     //亮滅三次
    }
  }
}

變數式
  • 設變數
  • 把for拉出來

#include <IRremote.h>

int RECEIVE_PIN= 3;
IRrecv irreceiver(RECEIVE_PIN);
decode_results results;
void setup()
{
  Serial.begin(9600);
  irreceiver.enableIRIn(); // Start the receiver
  pinMode(2,OUTPUT);
}

void loop() {
  if (irreceiver.decode(&results)) {
    Serial.println(results.value);
    irreceiver.resume();
    int times = 0;
    switch(results.value){
    case 16738455:
      Serial.println('1');
      times = 1;
      break;
    case 16750695:
      Serial.println('2');
        times = 2;
        break;
    case 16756815:
      Serial.println('3');
        times = 3;
        break;
    case 16724175:
      Serial.println('4');
        times = 4;
        break;
    case 16718055:
      Serial.println('5');
        times = 5;
        break;
    case 16743045:
      Serial.println('6');
        times = 6;
        break;
    case 16716015:
      Serial.println('7');
        times = 7;
        break;
    case 16726215:
      Serial.println('8');
        times = 8;
        break;
    case 16734885:
      Serial.println('9');
        times = 9;
        break;
    }
    for (int i =0; i<times; i++){     //設變數times,以times數值為迴圈重複次數
      digitalWrite(2,HIGH);
      delay(100);
      digitalWrite(2,LOW);
      delay(200);
    }
  }
}

函數式
#include <IRremote.h>

int RECEIVE_PIN= 3;
IRrecv irreceiver(RECEIVE_PIN);
decode_results results;
void setup()
{
  Serial.begin(9600);
  irreceiver.enableIRIn(); // Start the receiver
  pinMode(2,OUTPUT);
}

void times(int x){
for (int i = 0;i<x;i++){
  digitalWrite(2,HIGH);
  delay(100);
  digitalWrite(2,LOW);
  delay(200);
    }
}

void loop() {
  if (irreceiver.decode(&results)) {
    Serial.println(results.value);
    irreceiver.resume();
    switch(results.value){
    case 16738455:
      Serial.println('1');
      times(1);
      break;
    case 16750695:
      Serial.println('2');
      times(2);
      break;
    case 16756815:
      Serial.println('3');
      times(3);
      break;
    case 16724175:
      Serial.println('4');
      times(4);
      break;
    case 16718055:
      Serial.println('5');
      times(5);
      break;
    case 16743045:
      Serial.println('6');
      times(6);
      break;
    case 16716015:
      Serial.println('7');
      times(7);
      break;
    case 16726215:
      Serial.println('8');
      times(8);
      break;
    case 16734885:
      Serial.println('9');
      times(9);
      break;
    }
  }
}

判斷遙控器種類等(引用自參考網站最後一個)

#include <IRremote.h>                    // 引用 IRRemote 函式庫
const int irReceiverPin = 3;            
IRrecv irrecv(irReceiverPin);            // 定義 IRrecv 物件來接收紅外線訊號
decode_results results;                  // 解碼結果將放在 decode_results 結構的 result 變數裏
void setup()
{
  Serial.begin(9600);                     // 開啟 Serial port, 通訊速率為 9600 bps
  irrecv.enableIRIn();                   // 啟動紅外線解碼
}
// 顯示紅外線協定種類
void showIRProtocol(decode_results *results)
{
  Serial.print("Protocol: ");
 
  // 判斷紅外線協定種類
  switch(results->decode_type) {     //從results裡取出decode_type的值
   case NEC:
     Serial.print("NEC");
     break;
   case SONY:
     Serial.print("SONY");
     break;
   case RC5:
     Serial.print("RC5");
     break;
   case RC6:
     Serial.print("RC6");
     break;
   default:
     Serial.print("Unknown encoding");
  }

  // 把紅外線編碼印到 Serial port
  Serial.print(", irCode: ");          
  Serial.print(results->value, HEX);    // 紅外線編碼
  Serial.print(",  bits: ");        
  Serial.println(results->bits);        // 紅外線編碼位元數  
}

void loop()
{
  if (irrecv.decode(&results)) {         // 解碼成功,收到一組紅外線訊號
    showIRProtocol(&results);            // 顯示紅外線協定種類
    irrecv.resume();                     // 繼續收下一組紅外線訊號      
  }
}

參考網站
http://coopermaa2nd.blogspot.tw/2011/02/arduino-serial-led.html     switch case用法
http://ming-shian.blogspot.tw/2013/09/arduino.html
http://www.arduino.cc/en/Reference/FunctionDeclaration     函數設置
http://coopermaa2nd.blogspot.tw/2011/03/12.html     判斷遙控器的編碼來源

2015年5月2日 星期六

資料庫編輯-notepad++ 2015.05.03

將資料格式化

  • 下載notepad++,範例文件(見紫菜gmail文件)右鍵以notepad++開啟
  • 右下INS代表編輯模式,big5是編碼
  • 選擇編碼->轉換至utf8(不是編譯),要有BOM的(無BOM是用於特殊情況)
  • 善用取代、alt+左鍵(直向選取)配合excel
  • insert into classtab#資料表名#(classname,g1,g2,g3,g4,g5,g6) values('國小',23,37,33,33,34,39);
匯入
  • 建立資料庫school,10欄
  • 欄名勿用中文、英文大寫、底線
  • 第一行A_I打勾(自動新增),索引選擇PRIMARY(排序)
  • 後面依情況選擇型態VARCHAR或INT,建立資料表
  • 選擇SQL,複製改好的範例文件,貼上
搜尋
  • 雖然指令無關大小寫,但是欄名有關,故以下school_name及tt,total須小寫(算了乖乖重打小寫吧,乖)
  • *代表所有,%代表其他字
  • 列出華山國小資訊:select * from classtab where school_name = '華山國小'
  • 列出小港區學校資訊:select * from classtab where school_name like '小港區%'
  • 列出名字中有山的資訊:select * from classtab where school_name like '%%'
  • 列出小港區及三民區資訊:select * from classtab where school_name like '小港區%'or school_name like'三民區%'
  • 列出新生數大於150人的學校:select * from classtab where g1 > '150'
  • 升冪排列:select * from classtab where g1 > '150' order by g1 asc
  • 高雄新生總和:select sum(g1) from classtab;
  • 降冪排列:select * from classtab where g1 > '150' order by g1 desc
  • 年級總人數和:select sum(g1),sum(g2),sum(g3),sum(g4),sum(g5),sum(g6) from classtab;
  • 高雄小學生總和:select sum(g1+g2+g3+g4+g5+g6) from classtab;
  • 三民區新生總和:select sum(g1) from classtab where school_name like '三民區%';
  • 顯示三民區,三民區新生總和:select '三民區', sum(g1) from classtab where school_name like '三民區%';
  • 高雄各小學,各小學新生人數:select school_name,g1+g2+g3+g4+g5+g6 from classtab;
  • select school_name,g1+g2+g3+g4+g5+g6 from classtab order by asc;
  • 將各校總和命名為tt並顯示:select school_name,g1+g2+g3+g4+g5+g6 as tt from classtab order by tt desc;
  • 把memo1改成total
  • 將各校總人數放進update:update classtab set total = g1+g2+g3+g4+g5+g6     #已有total欄,所以是用update不是insert
  • 取出學校左三個字:select school_name,left(school_name,3) from classltab
  • 列出區字在學校名第幾個字:SELECT school_name, LEFT( school_name, 3 ) , POSITION( '區'
    IN school_name ) 
    FROM classtab     #position為函數,和括號間不能有空格
  • 將學校名取到區字(列出各區):SELECT school_name, LEFT(school_name, position('區' in school_name)) from classtab;
  • 若是只要校名,則以lehgth(總字長-position'區')