http://www.embeddedj.co.th/node/25
ลองทำตามได้หมดแล้วครับ ค่าถูกส่งไปแสดงที่ browser เรียบร้อย
แต่ปัญหาของผมคือ ผมไม่ต้องการค่านั้นไปโชว์ที่ browser แต่ต้องการเอาค่านั้นไปเก็บไว้ใน database ครับ
ปล. ผมมีโค้ด ตย database บ้างแต่โค้ดนั้นเป็นของอีก ตย นึง ที่จะต้องเลือกค่าจากหน้า browser ครับ รบกวนช่วยคิดหน่อยครับ
นี่เป็นโค้ดจาก http://www.embeddedj.co.th/node/25 ทั้งหมดครับ
ThreadCan.java
โค้ด: เลือกทั้งหมด
class ThreadCan implements Runnable {
TempReader app = new TempReader();
public void run(){
// TODO Auto-generated method stub
if (app.init()){
System.out.println("Wait for read temperature from CAN");
app.readTempViaCAN();
}//if (app.init());
}
}
TempReader.java
โค้ด: เลือกทั้งหมด
import se.imsys.comm.CAN;
import se.imsys.comm.CANEventListener;
import se.imsys.comm.CANException;
import se.imsys.comm.CANFrame;
public class TempReader implements CANEventListener {
private static final int COM_TO_CAN_ID = 0x550;
private static final int CAN_TO_COM_ID1 = 0x350;
private static final int CAN_TO_COM_ID2 = 0x351;
private static final int CAN_SUBMASK = 0x35F;
// Baudrate 1=500Kb/s,2=250Kb/s,4=125Kb/s,8=6.5Kb/s
private static final int BRP = 5;
private static boolean DEBUG = false;
private CAN cp;
private CANFrame cf;
static public String Temperature1, Temperature2 = "0.0";
/**********************************************************
* FUNCTION
**********************************************************/
public void CANEvent(int event) {
// TODO Auto-generated method stub
try {
if ((event & CAN.IR_RI) != 0){
while (cp.receivePoll(cf)){
if (DEBUG){
System.out.println("Receive Event.");
System.out.println("Frame received:");
System.out.print("ID: "+Integer.toHexString(cf.ID));
if (cf.extendedID) System.out.print("(extenedID)");
if (cf.remoteFrameRequest) System.out.print("(remoteFrameRequest)");
System.out.println(); System.out.print("data: ");
for (int i=0; i < cf.length; i++) System.out.print((char)cf.data[i]);
System.out.println();
}//if (DEBUG);
if (!cf.extendedID && (cf.ID == COM_TO_CAN_ID)){
cf.ID = CAN_TO_COM_ID2;
cp.sendFrame(cf);
}else{//if (!cf.extenedID && (cf.ID == COM_TO_CAN_ID));
if (cf.extendedID && (cf.ID == CAN_TO_COM_ID1)){
String datacan = new String(cf.data);
datacan.trim();
// System.out.println("Computer ("+Integer.toHexString(CAN_TO_COM_ID1)+")
//>> "+datacan);
Temperature1= datacan.substring(2);
}//if (cf.extendedID && (cf.ID == COM_TO_CAN_ID));
if (cf.extendedID && (cf.ID == CAN_TO_COM_ID2)){
String datacan = new String(cf.data);
datacan.trim();
// System.out.println("Computer ("+Integer.toHexString(CAN_TO_COM_ID2)+")
//>> "+datacan);
Temperature2= datacan.substring(2);
}//if (cf.extendedID && (cf.ID == CAN_TO_COM_ID2));
}//if (!cf.extendedID && (cf.ID == COM_TO_CAN_ID));
}//while(cp.receivePoll(cf));
}//if ((event & CAN.IR_RI) != 0);
}catch (CANException e){
System.out.println(e.getMessage());
}catch (Throwable e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
public boolean init() {
boolean canOpen = false;
boolean canEnabled = false;
try {
cp= new CAN();
canOpen = true;
//create a CAN fream
cf= new CANFrame();
//single sample point at 85%, 20 clocks per bit
cp.setSampleRate(3);
cp.setTSEG1(4);
cp.setTSEG2(3);
cp.setSynchronizationJumpWidth(1);
cp.setBaudRatePrescaler(BRP);
cp.set29BitGlobalIDMask(COM_TO_CAN_ID ^ CAN_SUBMASK);
cp.set29BitGlobalArbitrationID(COM_TO_CAN_ID);
cp.addEventListener(this);
cp.writeRegister(cp.REG_IER,(byte)(cp.readRegister(cp.REG_IER)|CAN.IER_DOIE));
cp.enableController();
canEnabled= true;
}catch (CANException e) {
System.out.println(e.getMessage());
}catch (Throwable e){
System.out.println(e.getMessage());
e.printStackTrace();
}
if (!(canOpen && canEnabled)){
if (canOpen){
try {
cp.close();
}catch(CANException e){
System.out.println(e.getMessage());
}
}//if (canOpen);
return false;
}//if (!(canOpen && canEnabled));
return true;
}
public void readTempViaCAN(){
CANFrame ccf = new CANFrame();
try{
ccf.ID = COM_TO_CAN_ID;
ccf.extendedID= true;
ccf.remoteFrameRequest= false;
while(true){
}
}catch (Throwable e){
System.out.println(e.getMessage());
}
try {
cp.close();
}catch (CANException e){
System.out.println(e.getMessage());
}
}
}
ShowTempOnWeb.java
โค้ด: เลือกทั้งหมด
import se.imsys.net.HttpServer;
public class ShowTempOnWeb {
/**
* @param args
*/
public static void main(String[] args) {
ThreadCan can = new ThreadCan();
Thread c = new Thread(can);
c.start();
HttpServer hs = new HttpServer();
Thread t = new Thread(hs);
hs.addCgi(new ShowTempCgi());
t.start();
}
}
ShowTempCgi.java
โค้ด: เลือกทั้งหมด
import se.imsys.net.*;
import java.io.*;
import java.util.*;
public class ShowTempCgi implements HttpCgi{
public ShowTempCgi(){
}
public String getName(){
return("show.cgi");
}
public void execute(Hashtable variables, OutputStream os) throws IOException, HttpException{
String s;
s = "Content-Type: text/html\r\n\r\n\r\n";
s += "<HTML><TITLE>Result for Temperature.</TITLE>\n";
s += "<BODY>\n";
s += "<H1>Temperature Reader(0x350)= "+TempReader.Temperature1+"</H1><br>\n";
s += "<H1>Temperature Reader(0x351)= "+TempReader.Temperature2+"</H1><br>\n";
s += "</BODY></HTML>\n";
os.write(s.getBytes());
}
}
ค่าที่ส่งไปค่า Temperature1 กับ Temperature2 ครับ