プログラムソースコードの表示方法=>Excel表へコピペしてからWPへコピー
- By: Dj1711572002
- カテゴリー: 気まぐれ備忘録, プログラミング
気まぐれ備忘録
プログラムの解説記事で、ソースコードの表示で、プラグインを使ったり、GISTから挿入する方法がありますが、CSSをいじったりするのを避けたいので、コンテンツだけでいじる方法を考えました。
デフォルト機能のテーブルを使う方法を使うと、慣れているので、簡単にできました。
表をつくるのは、EXCELにAruduinoIDEからコピーして貼りこんで、行数分の表ができるので丸ごと
コピーして、WordPressの投稿にペーストすれば、ソースコードの表ができます。
テーブル 表のプロパティ 高度な設定 背景色 で黒にして、
あとは、文字色を変えて、説明文をいれれれば、簡単で、見やすいソースコード説明表ができます。
| // Simple test of USB Host Mouse/Keyboard |
| // |
| // This example is in the public domain |
| //—–SD log |
| #include <SD.h> |
| #include <SPI.h> |
| int i,j,k,n; |
| const int chipSelect =BUILTIN_SDCARD;// 10; |
| String dataString,dataString1; |
| //—–USB HOST |
| #include “USBHost_t36.h” |
| #define USBBAUD 115200 |
| uint32_t baud = USBBAUD; |
| uint32_t format = USBHOST_SERIAL_8N1; |
| USBHost myusb; |
| USBHub hub1(myusb); |
| USBHub hub2(myusb); |
| USBHIDParser hid1(myusb); |
| USBHIDParser hid2(myusb); |
| USBHIDParser hid3(myusb); |
| USBSerial_BigBuffer userial(myusb); |
| USBSerial_BigBuffer userialb(myusb); |
| USBSerial_BigBuffer userialb2(myusb); |
| uint8_t buf1[200],buf2[200],buf3[200]; |
| uint8_t dummy; |
| char data0,datab,datab2; |
| USBDriver *drivers[] = {&hub1, &hub2, &hid1, &hid2, &hid3, &userial, &userialb, &userialb2}; |
| #define CNT_DEVICES (sizeof(drivers)/sizeof(drivers[0])) |
| const char * driver_names[CNT_DEVICES] = {“Hub1”, “Hub2”, “HID1”, “HID2”, “HID3”, “USERIAL1”, “USERIALB”, “USERIALB2” }; |
| bool driver_active[CNT_DEVICES] = {false, false, false, false}; |
| //Data |
| uint8_t Buf172[172]; |
| uint8_t PVTdata[100]; |
| long PVTval[33]; |
| uint8_t RELPOSdata[72]; |
| long RELPOSval[21]; |
| long itowP,itowP_1; |
| long itowR,itowR_1; |
| uint8_t fdata[4]; |
| uint8_t UShead[20],USBhead[20],USB2head[20]; |
| int bufN_1,bufN_2,bufN_3; |
| uint8_t buff[100]; |
| int Num1,Num2,Num3; |
| int oldNum1,oldNum2,oldNum3; |
| int OKflag=0; |
| int PVTflag=0; |
| int RELPOSflag=0; |
| int Firstflag=1; |
| char keyin; |
| int Startflag=0; |
| //timestamp |
| char fnameB[30];//UBX Binary File name |
| char fnameV[30];//UBX Value File name NAV-PVT+NAV-RELPOSNED |
| int Sflag=0; |
| //================================================================= |
| void setup() |
| { |
| Serial.begin(460800); |
| pinMode(13, OUTPUT); |
| pinMode(2, OUTPUT); |
| pinMode(3, OUTPUT); |
| for (int i = 0; i < 5; i++) { |
| digitalWrite(2, HIGH); |
| delayMicroseconds(50); |
| digitalWrite(2, LOW); |
| delayMicroseconds(50); |
| } |
| while (!Serial && (millis() < 5000)) ; // wait for Arduino Serial Monitor |
| Serial.println(“\n\nUSB Host Testing – Serial”); |
| myusb.begin(); |
| Serial1.begin(115200); // We will echo stuff Through Serial1… |
| //———–SD CARD Initialize—————— |
| // see if the card is present and can be initialized: |
| if (!SD.begin(chipSelect)) { |
| Serial.println(“Card failed, or not present”); |
| } |
| //SD.remove(“datalog.txt”);//旧ファイルを消去 |
| Serial.println(“card initialized.”); |
| Sflag=0; |
| }//set up |
| //======================================================================================= |
| //==========LOOP ======================================================================== |
| //======================================================================================= |
| void loop(){ |
| digitalWrite(13, !digitalRead(13)); |
| myusb.Task(); |
| updateDeviceList(); |
| //*********************************************************** |
| //****************DATA ACQUSITION From USB HOST************** |
| //*********************************************************** |
| //—USB HOST Ports read————————– |
| //2ポートのデータをBuf172[]にまとめて収納1周期トータル172byteなので順不同で配列に格納して後で、ばらす。 |
| while(userial.available()){ |
| Buf172[Num1]=userial.read(); |
| Num1++; |
| }//—USERIAL read finished——————— |
| //—USERIALB Port read——————- |
| while(userialb.available()){ |
| Buf172[Num1]=userialb.read(); |
| Num1++; |
| }//useralb read finished |
| //:::::::::: Logging & Monitoring data process 172bytes:::::::::::::::::::::: |
| //1周期分のデータ取得終了であと90msecあるのでその間に各種処理を行う |
| if(Num1>=172){ //a MB data read finished |
| Num1=0; |
| //—-PVT RELPOS Deviding— 172byteのデータの先頭がPVTかRELPSOか判別して、PVTdata[]RELPOSdata[]に仕分ける—————————————– |
| if(Buf172[0] == 0xB5 && Buf172[1] == 0x62 && Buf172[2] == 0x01 && Buf172[3] == 0x07){//1st PVT Header |
| for (i=0;i<100;i++){ |
| PVTdata[i]=Buf172[i]; |
| } |
| for (i=100;i<172;i++){ |
| RELPOSdata[i-100]=Buf172[i]; |
| } |
| }//if end |
| else if(Buf172[0] == 0xB5 && Buf172[1] == 0x62 && Buf172[2] == 0x01 && Buf172[3] == 0x3C){//1st RELPOS Header |
| for(i=0;i<72;i++){ |
| RELPOSdata[i]=Buf172[i]; |
| } |
| for(i=72;i<172;i++){ |
| PVTdata[i-72]=Buf172[i]; |
| } |
| }//else end |
| //PVTdataとRELPOSdataをUBX実データに変換してPVTval[33]とRELPOSval[21]に格納 |
| //——-PVTcnv,RELPOScnv———- |
| int result=PVTcnv(PVTdata,PVTval); |
| result=RELPOScnv(RELPOSdata,RELPOSval); |
| if (PVTval[11]==131 && Sflag==0){//start |
| Sflag=1; |
| //ファイル名をタイムスタンプで作る |
| //PVTval[1]=Year/[2]=Month/[3]=Day/[4]=Hour/[5]=Min/[6]=sec |
| int JST=(PVTval[4]+9)%24;//UTC hourをJSTに変換 |
| String stime=String(PVTval[2],DEC)+”-“+String(PVTval[3],DEC)+”-“+String(JST,DEC)+”-“+String(PVTval[5],DEC);//MMDDHHMM |
| String stimeB=”/”+stime+”.ubx”;//UBX Binary File |
| String stimeV=”/”+stime+”.txt”;//UBX Value Text File |
| int slenB=stimeB.length()+1; |
| int slenV=stimeV.length()+1; |
| //ファイル名はchar配列なのでStringからchar配列変換 fname[]を得る |
| stimeB.toCharArray(fnameB,slenB);//stimeB to fnameB[] chara Array |
| stimeV.toCharArray(fnameV,slenV);//stimeV to fnameV[] chara Array |
| Serial.println(); |
| Serial.print(“fnameB=”); |
| Serial.print(stimeB); |
| Serial.print(“/fnameV=”); |
| Serial.println(stimeV); |
| Serial.print(“TimeStamp:Sflag=”); |
| Serial.println(Sflag); |
| } |
| //SD Write |
| if (PVTval[11]==131 ){//start |
| Serial.print(“SD OPEN_time=”); |
| Serial.println(millis()); |
| //File dataFile = SD.open(“PVT_RELPOS.ubx”, FILE_WRITE); |
| File dataFile = SD.open(fnameB, FILE_WRITE); |
| delay(1);//<==このdelay重要これがないとコケル(外部デバイスとのアクセス初めでCPUが待てないで突っ走ることがあるので1msecほど外部デバイスの余裕をあげる必要有) |
| n=0; |
| Serial.print(“PVT_Binary_dataFile=”); |
| Serial.println(dataFile); |
| if (dataFile) { |
| while(n<100){//PVT write to SD card |
| //delayMicroseconds(20); |
| //–if (dataFile) { |
| dataFile.write(PVTdata[n%100]); |
| //} else { |
| // if the file isn’t open, pop up an error: |
| // Serial.println(“PVT write error opening datalog.txt”); |
| //} |
| n++; |
| }//PVT write finished |
| n=0; |
| while(n<72){; |
| if (dataFile) { |
| dataFile.write(RELPOSdata[n%72]); |
| } else { |
| // if the file isn’t open, pop up an error: |
| //Serial.println(“RELPOS write error opening datalog.txt”); |
| } |
| n++; |
| }//RELPOS write finished |
| } else { |
| // if the file isn’t open, pop up an error: |
| Serial.println(“PVT write error opening datalog.txt”); |
| } |
| dataFile.close(); |
| Serial.print(“SD closed time=”); |
| Serial.print(millis()); |
| //Serial.println(“SD closed write Finished”); |
| }//SD Write end |
| /* |
| Serial.println(); |
| Serial.print(“PVTval:”); |
| for(i=0;i<33;i++){ |
| Serial.print(PVTval[i]); |
| Serial.print(“,”); |
| } |
| Serial.println(); |
| Serial.println(); |
| Serial.print(“RELPOSval:”); |
| for(i=0;i<21;i++){ |
| Serial.print(RELPOSval[i]); |
| Serial.print(“,”); |
| } |
| Serial.println(); |
| */ |
| /* |
| //SD LOGの自動開始タイミングは、PVTのflags=131でRTK FIXする時LOGスタート=>PVTval[11]=131まで待つ |
| Serial.print(PVTval[11]); |
| Serial.print(“,”); |
| if (PVTval[11]==131 && Sflag==0){//start |
| Sflag=1; |
| //ファイル名をタイムスタンプで作る |
| //PVTval[1]=Year/[2]=Month/[3]=Day/[4]=Hour/[5]=Min/[6]=sec |
| int JST=(PVTval[4]+9)%24;//UTC hourをJSTに変換 |
| String stime=String(PVTval[2],DEC)+”-“+String(PVTval[3],DEC)+”-“+String(JST,DEC)+”-“+String(PVTval[5],DEC);//MMDDHHMM |
| String stimeB=”/”+stime+”.ubx”;//UBX Binary File |
| String stimeV=”/”+stime+”.txt”;//UBX Value Text File |
| int slenB=stimeB.length()+1; |
| int slenV=stimeV.length()+1; |
| //ファイル名はchar配列なのでStringからchar配列変換 fname[]を得る |
| stimeB.toCharArray(fnameB,slenB);//stimeB to fnameB[] chara Array |
| stimeV.toCharArray(fnameV,slenV);//stimeV to fnameV[] chara Array |
| Serial.println(); |
| Serial.print(“fnameB=”); |
| Serial.print(stimeB); |
| Serial.print(“/fnameV=”); |
| Serial.println(stimeV); |
| Serial.print(“TimeStamp:Sflag=”); |
| Serial.println(Sflag); |
| } |
| //================SD CARD Writing======================================== |
| //RTK周期100msecと時間余裕があるので毎回ファイルをOPEN CLOSEする |
| // open the file. |
| Serial.print(“Loop:Sflag=”); |
| Serial.println(Sflag); |
| if(Sflag==1){ |
| Serial.println(“—Binary FILE Open”); |
| //Binaryファイル保存 NAV-PVT+NAV-RELPOSNED |
| File dataFile = SD.open(“BinaryFile.UBX”, FILE_WRITE);//追記モード |
| if (dataFile){ |
| Serial.println(“DataFile writing Binary”); |
| dataFile.write(PVTdata[0]); |
| /* |
| for(i=0;i<100;i++){//PVTdata log |
| dataFile.write(PVTdata[i]); |
| } |
| for(i=0;i<72;i++){ |
| dataFile.write(RELPOSdata[i]); |
| } |
| } |
| dataFile.close(); |
| //TEXTファイル保存 NAV-PVT値とNAV-RELPOSNED値 |
| Serial.println(“—Text FILE Open”) ; |
| dataFile=SD.open(“TextFile.txt”,FILE_WRITE);//追記モード |
| if(dataFile){ |
| Serial.println(“DataFile writing Text”); |
| for(i=0;i<33;i++){//PVTval log |
| dataFile.print(PVTval[i]); |
| } |
| dataFile.println();//改行 |
| for(i=0;i<21;i++){//RELPOSval log |
| dataFile.print(RELPOSval[i]); |
| } |
| } |
| dataFile.close(); |
| }// SD log end |
| */ |
| }// if 172 end |
| }//loop finished |
| //====================================================================================== |
| //==================LOOP END============================================================ |
| //====================================================================================== |
| void updateDeviceList() { |
| // Print out information about different devices. |
| for (uint8_t i = 0; i < CNT_DEVICES; i++) { |
| if (*drivers[i] != driver_active[i]) { |
| if (driver_active[i]) { |
| Serial.printf(“*** Device %s – disconnected ***\n”, driver_names[i]); |
| driver_active[i] = false; |
| } else { |
| Serial.printf(“*** Device %s %x:%x – connected ***\n”, driver_names[i], drivers[i]->idVendor(), drivers[i]->idProduct()); |
| driver_active[i] = true; |
| const uint8_t *psz = drivers[i]->manufacturer(); |
| if (psz && *psz) Serial.printf(” manufacturer: %s\n”, psz); |
| psz = drivers[i]->product(); |
| if (psz && *psz) Serial.printf(” product: %s\n”, psz); |
| psz = drivers[i]->serialNumber(); |
| if (psz && *psz) Serial.printf(” Serial: %s\n”, psz); |
| // If this is a new Serial device. |
| if (drivers[i] == &userial) { |
| // Lets try first outputting something to our USerial to see if it will go out… |
| userial.begin(baud); |
| } |
| if (drivers[i] == &userialb) { |
| // Lets try first outputting something to our USerial to see if it will go out… |
| userialb.begin(baud); |
| } |
| if (drivers[i] == &userialb2) { |
| // Lets try first outputting something to our USerial to see if it will go out… |
| userialb2.begin(baud); |
| } |
| } |
| } |
| } |
| } |
| bool CompareStrings(const char *sz1, const char *sz2) { |
| while (*sz2 != 0) { |
| if (toupper(*sz1) != toupper(*sz2)) |
| return false; |
| sz1++; |
| sz2++; |
| } |
| return true; // end of string so show as match |
| } |
| //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| int PVTcnv(uint8_t d[100],long pvt[33]){ |
| //PVT header[0-6] |
| //0:itow[6-9] |
| pvt[0]=B2L(d[9],d[8],d[7],d[6]); |
| //1:year[10-12] |
| pvt[1]=d[10]+d[11]*256; |
| //2:month[12] |
| pvt[2]=d[12]; |
| //3:day[13] |
| pvt[3]=d[13]; |
| //4:hour[14] |
| pvt[4]=d[14]; |
| //5:min[15] |
| pvt[5]=d[15]; |
| //6:sec[16] |
| pvt[6]=d[16]; |
| //7:valid[17] |
| pvt[7]=d[17]; |
| //8:tAcc[18-21] |
| pvt[8]=B2L(d[21],d[20],d[19],d[18]); |
| //9:nano[22-25] |
| pvt[9]=B2L(d[25],d[24],d[23],d[22]); |
| //10:fixType[26] |
| pvt[10]=d[26]; |
| //11:flags[27] This is Fix status 131 |
| pvt[11]=d[27]; |
| //12:flags2[28] |
| pvt[12]=d[28]; |
| //13:numSV[29] |
| pvt[13]=d[29]; |
| //14:lon[30-33] |
| pvt[14]=B2L(d[33],d[32],d[31],d[30]); |
| //15:lat[34-37] |
| pvt[15]=B2L(d[37],d[36],d[35],d[34]); |
| //16:height[38-41] |
| pvt[16]=B2L(d[41],d[40],d[39],d[38]); |
| //17:hMSL[42-45] |
| pvt[17]=B2L(d[45],d[44],d[43],d[42]); |
| //18:hAcc[46-49] |
| pvt[18]=B2L(d[49],d[48],d[47],d[46]); |
| //19:vAcc[50-53] |
| pvt[19]=B2L(d[53],d[52],d[51],d[50]); |
| //20:velN[54-57] |
| pvt[20]=B2L(d[57],d[56],d[55],d[54]); |
| //21:velE[58-61] |
| pvt[21]=B2L(d[61],d[60],d[59],d[58]); |
| //22:velD[62-65] |
| pvt[22]=B2L(d[65],d[64],d[63],d[62]); |
| //23:gSpeed[66-69] |
| pvt[23]=B2L(d[69],d[68],d[67],d[66]); |
| //24:headMot[70-73] |
| pvt[24]=B2L(d[73],d[72],d[71],d[70]); |
| //25:sAcc[74-77] |
| pvt[25]=B2L(d[77],d[76],d[75],d[74]); |
| //26:headAcc[78-81] |
| pvt[26]=B2L(d[81],d[80],d[79],d[78]); |
| //27:pDOP[82-83] |
| pvt[27]=d[82]+d[83]*256; |
| //28:flags3[84] |
| pvt[28]=d[84]; |
| //29:reserved1[85] |
| pvt[29]=d[85]; |
| //30:headVeh[86-89] |
| pvt[30]=B2L(d[89],d[88],d[87],d[86]); |
| //31:magDec[90-91] |
| pvt[31]=d[90]+d[91]*256; |
| //32:magAcc[92-93] |
| pvt[32]=d[92]+d[93]*256; |
| }//PVTcnv() end |
| //–RELPOScnv————————— |
| int RELPOScnv(uint8_t d[72],long relpos[20]){ |
| //RELPOS header[0-5] |
| int s=0; |
| //0:ver[6] |
| relpos[0]=d[s+6]; |
| //1:reserved1[7] |
| relpos[1]=d[s+7]; |
| //2:refStationId[8] |
| relpos[2]=d[s+8]; |
| //3:itow[10-13] |
| relpos[3]=B2L(d[s+13],d[s+12],d[s+11],d[s+10]); |
| //4:relposN[14-17] |
| relpos[4]=B2L(d[s+17],d[s+16],d[s+15],d[s+14]); |
| //5:relposE[18-21] |
| relpos[5]=B2L(d[s+21],d[s+20],d[s+19],d[s+18]); |
| //6:relposD[22-25] |
| relpos[6]=B2L(d[s+25],d[s+24],d[s+23],d[s+22]); |
| //7:relposLength[26-29] |
| relpos[7]=B2L(d[s+29],d[s+28],d[s+27],d[s+26]); |
| //8:relposHeading[30-33] |
| relpos[8]=B2L(d[s+33],d[s+32],d[s+31],d[s+30]); |
| //9:reserved2[34] |
| relpos[9]=B2L(d[s+34],d[s+33],d[s+32],d[s+31]); |
| //10:relposHPN[35] |
| relpos[10]=127-int(d[s+35]); |
| //11:relposHPE[36] |
| relpos[11]=127-int(d[s+36]); |
| //12:relposHPD[37] |
| relpos[12]=127-int(d[s+37]); |
| //13:relposHPLength[38] |
| relpos[13]=127-int(d[s+38]); |
| //14:accN[38-41] |
| relpos[14]=B2L(d[s+41],d[s+40],d[s+39],d[s+38]); |
| //15:accE[42-45] |
| relpos[15]=B2L(d[s+45],d[s+44],d[s+43],d[s+42]); |
| //16:accD[46-49] |
| relpos[16]=B2L(d[s+49],d[s+48],d[s+47],d[s+46]); |
| //17:accLength[50-53] |
| relpos[17]=B2L(d[s+53],d[s+52],d[s+51],d[s+50]); |
| //18:accHeading[54-57] |
| relpos[18]=B2L(d[s+57],d[s+56],d[s+55],d[s+54]); |
| //19:reserved[57-60] |
| relpos[19]=B2L(d[s+60],d[s+59],d[s+58],d[s+57]); |
| //20:flags[60-63] |
| relpos[20]=B2L(d[s+63],d[s+62],d[s+61],d[s+60]); |
| } |
| //+++++++++++++4byte Binary to Long ++++++++++++++++++++++++++++++++++++++++++++++ |
| long B2L(uint8_t b4 , uint8_t b3 ,uint8_t b2 , uint8_t b1 ) { |
| //pc.printf(“B2L IN=%s,%x,%x,%x,%x,b4&0x80=%d\n\r”,sen,b4,b3,b2,b1,b4 &0x80); |
| //pc.printf(“B2L IN=b4&0x80=%d\n\r”,b4 & 0x80); |
| long su; |
| if ((b4 & 0x80) && 0x80){//最上位ビットたっていればマイナス |
| su = -(256-(int)b1)+(255-(int)b2)*256+(255-(int)b3)*65536+(255-(int)b4)*256*256*256; |
| //pc.printf(“B2L-:sen=%s,%d,%d,%d,%d,%d\n\r”,sen,b4,b3,b2,b1,su); |
| } |
| else { |
| su=(int)b1+(int)b2*256+(int)b3* 65536+(int)b4*256*256*256; |
| //pc.printf(“B2L+:sen=%s,%d,%d,%d,%d,%d,%d\n\r”,sen,b4,b3,b2,b1,su); |
| } |
| return su; |
| } |
| //================================================================================= |
| //+++++++++++++++i_to_char++++++++++++++++++++++++++++++++++++ |
| // i=IntegerValueData,*d=Array pointer, n=Array start No |
| void i_to_char(int i, uint8_t *d, int n) |
| { |
| d[n] = i & 0x000000ff; |
| d[n + 1] = (i & 0x0000ff00) >> 8; |
| d[n + 2] = (i & 0x00ff0000) >> 16; |
| d[n + 3] = (i & 0xff000000) >> 24; |
| } |
| //++++++++++++++++String to CharArray Trans++++++++++++++++++++ |
| void str2char(char c[],String dataS) |
| { |
| //String dataS; |
| //dataS=”HELLO dataS”; |
| int dataS_len=dataS.length()+1; |
| char char_array[dataS_len]; |
| dataS.toCharArray(c,dataS_len); |
| } |
コメントはまだありません