IntoRobot-nut at Home of Maker

สัปดาห์ที่แล้วไปเดินเคลมอุปกรณ์ให้บริษัทที่ห้างฟอร์จูน พระรามเก้า ขากลับเดินผ่าน Home of Maker
ได้เจอ กับ IntoRobot-nut (Gravitech WLWF-1500) ราคา 350 บาท รวมภาษีมูลค่าเพิ่มแล้ว ที่แรกก็เห็นว่าเป็นแค่ ESP8266 กำลังอยู่ในกระแส เลยตัดสินใจชื้อมาเพราะมีเชนเชอร์แสง และ RGB LED มาให้ และราคาก็สมน้ำสมเนื้อ ขนาดเล็ก มีหัว USB type C มาให้ด้วย
ส่วน USB to Serial พอรับได้ เพราะโครงงานที่ทำคงแค่เอาไว้จ่ายไฟเท่านั้น

    พอได้มาก็เริ่มด้วยการหาคู่มือ สิ่งที่พบคือไม่มีคู่มือภาษาอังกฤษหรือภาษาไทยเลย มีแต่ภาษาจีน ซึ่งผู้เขียนอ่านไม่ออกได้แต่ดูรูปภาพ นึกในใจว่าต้องมานั่งเทียนวาดวงจรให้เขาด้วยหรือป่าว

 ผู้เขียนขอเริ่ม รีวิว เจ้า IntoRobot-Nut กันเลย
คุณลักษณะ ดังนี้
1. ขนาดบอร์ด xx
2.MCU : ESP8266
3.USB to Serial
4.USB type C
5.WiFi ในตัว
6.User button 1 ปุ่ม
7.เซนเซอร์แสง สองขาทั่วไป ไม่ได้ระบุ ยี่ห้อ-รุ่น
8.RGB LED เดาว่าเป็น WS2812
9.ปุ่ม รีเซต บอร์ด

ด้วยความที่เข้า IntoRobot-nut นั้นมี Firmware สำหรับ เล่นกับ app ของ IntoRobot มาให้เลย
เริ่มเล่นกันเลย
1. เสียบไฟเข้าบอร์ด จะมีไฟกระพริบสีแดงที่ RGB LED ถือว่าปกติ
2.โหลด app IntoRobot ทั้ง IOS และ Android
3.สมัคร สมาชิก ที่หน้า เว็บ Intorobot ก่อน เมื่อได้รับ E-mail ตอบรับสมาชัก
4.ให้มือถือเราต่อกับ Wifi ที่บ้านเราก่อนนะครับ ถ้าไม่มีก็สามารถใช้มือถือปล่อย wifi ได้ และต้อมมี มือถืออีกเครื่องสำหรับเล่น app
5. เมื่อ เข้า app และ Login เข้าระบบแล้ว
6.add device  สังเกตต้องให้บอร์ดเป็นไฟสีแดง
7.add sensor หรือ tool
เพียงเท่านี้ก็สามารถเล่น app กับ บอร์ด IntoRobot-nut ได้เลย


test RGB

IDE Arduino code: see below


#include <NeoPixelBus.h>

#define pixelCount 1 // this example assumes 4 pixels, making it smaller will cause a failure
#define pixelPin 5  // make sure to set this to the correct pin

#define colorSaturation 128

NeoPixelBus strip = NeoPixelBus(pixelCount, pixelPin);
// NeoPixelBus strip = NeoPixelBus(pixelCount, pixelPin, NEO_RGB);
//
// some pixels require the color components to be in a different order
// using the flag NEO_GRB will use the order; green, red, then blue.
//


 
void setup()
{
    // this resets all the neopixels to an off state
    strip.Begin();
    strip.Show();
}


void loop()
{
    // set the colors,
    // if they don't match in order, you may need to use NEO_GRB flag
    for(int i=0;i<128;i++)
    {
    strip.SetPixelColor(0,i,0,0);
    strip.Show();
    delay(10);
    }
    for(int i=128;i>1;i--)
    {
    strip.SetPixelColor(0,i,0,0);
    strip.Show();
    delay(10);
    }
    ///////////////////////////////////////////////dim Red /////////////////////////////////
    for(int i=0;i<128;i++)
    {
    strip.SetPixelColor(0,0,i,0);
    strip.Show();
    delay(10);
    }
    for(int i=128;i>1;i--)
    {
    strip.SetPixelColor(0,0,i,0);
    strip.Show();
    delay(10);
    }
    ///////////////////////////////////////////////dim green /////////////////////////////////
    for(int i=0;i<128;i++)
    {
    strip.SetPixelColor(0,0,0,i);
    strip.Show();
    delay(10);
    }
    for(int i=128;i>1;i--)
    {
    strip.SetPixelColor(0,0,0,i);
    strip.Show();
    delay(10);
    }
    ///////////////////////////////////////////////dim blue/////////////////////////////////
}





TEST Light Sensor

jump wire between  LS pin and A0





int photocellPin = 0;     // the cell and 10K pulldown are connected to a0
int photocellReading;     // the analog reading from the analog resistor divider

void setup(void) {
  // We'll send debugging information via the Serial monitor
  Serial.begin(9600);
}

void loop(void) {
  photocellReading = analogRead(photocellPin);

  Serial.print("Analog reading = ");
  Serial.print(photocellReading);     // the raw analog reading

  // We'll have a few threshholds, qualitatively determined
  if (photocellReading < 10) {
    Serial.println(" - Dark");
  } else if (photocellReading < 200) {
    Serial.println(" - Dim");
  } else if (photocellReading < 500) {
    Serial.println(" - Light");
  } else if (photocellReading < 800) {
    Serial.println(" - Bright");
  } else {
    Serial.println(" - Very bright");
  }
  delay(1000);
}








//https://electropeak.com/learn/control-ws2812-rgb-led-neopixel-w-arduino-tutorial/

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// Released under the GPLv3 license to match the rest of the
// Adafruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

// Which pin on the Arduino is connected to the NeoPixels?
#define PIN        5 // On Trinket or Gemma, suggest changing this to 1

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 1 // Popular NeoPixel ring size

// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels

void setup() {
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.

  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}

void loop() {
  pixels.clear(); // Set all pixel colors to 'off'

  // The first NeoPixel in a strand is #0, second is 1, all the way up
  // to the count of pixels minus one.
  for(int i=0; i<NUMPIXELS; i++) { // For each pixel...

    // pixels.Color() takes RGB values, from 0,0,0 up to 255,255,255
    // Here we're using a moderately bright green color:
    pixels.setPixelColor(i, pixels.Color(random(0, 10), random(0, 10),random(0, 10)));

    pixels.show();   // Send the updated pixel colors to the hardware.

    delay(DELAYVAL); // Pause before next pass through loop
  }
}


























#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN        5 // On Trinket or Gemma, suggest changing this to 1

#define NUMPIXELS 1 // Popular NeoPixel ring size
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels


byte variable[24];
byte iindex = 0;
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 4); // RX, TX

void setup() {
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
  //#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  //  clock_prescale_set(clock_div_1);
  //#endif
  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)




  Serial.begin(9600);
  mySerial.begin(9600);
  //delay(3000);
  Serial.println("+++ Search ID +++");
}
void loop() {
  while (mySerial.available() > 0) {
    byte b = mySerial.read();
    variable[iindex++] = b;
  }
  if (iindex == 24) {
    //Serial.print("byte 1  start byte 1 0x42 variable 0: "); Serial.println(variable[0], HEX);
    //Serial.print("byte 2  start byte 2 0x4D variable 1: "); Serial.println(variable[1], HEX);
    //Serial.print("byte 3  Frame lenght 0x00 variable 2: "); Serial.println(variable[2], HEX);
    //Serial.print("byte 4  Frame lenght 0x14 variable 3: "); Serial.println(variable[3], HEX);
    //Serial.print("byte 5  DATA1 ResrvedHigh variable 4: "); Serial.println(variable[4], HEX);
    //Serial.print("byte 6  DATA1 ResrvedLow  variable 5: "); Serial.println(variable[5], HEX);
    //Serial.print("byte 7  DATA2 ResrvedHigh variable 6: "); Serial.println(variable[6], HEX);
    //Serial.print("byte 8  DATA2 ResrvedLow  variable 7: "); Serial.println(variable[7], HEX);
    //Serial.print("byte 9  DATA3 ResrvedHigh variable 8: "); Serial.println(variable[8], HEX);
    //Serial.print("byte 10 DATA3 ResrvedLow  variable 9: "); Serial.println(variable[9], HEX);
    //Serial.print("Byte 11 DATA4 PM1.0  High variable 10: "); Serial.println(variable[10], HEX);
    //Serial.print("byte 12 DATA4 PM1.0  Low  variable 11: "); Serial.println(variable[11], HEX);
    Serial.print("              PM1.0                 : "); Serial.print( (variable[10]<<8) | variable[11], DEC);Serial.println(" µg/m³");
    //Serial.print("Byte 13 DATA5 PM2.5  High variable 12: "); Serial.println(variable[12], HEX);
    //Serial.print("Byte 14 DATA4 PM2.5  Low  variable 13: "); Serial.println(variable[13], HEX);
    Serial.print("              PM2.5                 : "); Serial.print( (variable[12]<<8) | variable[13], DEC);Serial.println(" µg/m³");
    //Serial.print("Byte 15 DATA5 PM10   High variable 14: "); Serial.println(variable[14], HEX);
    //Serial.print("Byte 16 DATA4 PM10   Low  variable 15: "); Serial.println(variable[15], HEX);
    Serial.print("              PM10                  : "); Serial.print( (variable[14]<<8) | variable[15], DEC);Serial.println(" µg/m³");
    //Serial.print("Byte 17 DATA5 ResrvedHigh variable 16: "); Serial.println(variable[16], HEX);
    //Serial.print("Byte 18 DATA4 ResrvedLow  variable 17: "); Serial.println(variable[17], HEX);
    //Serial.print("byte 19 DATA3 ResrvedHigh variable 18: "); Serial.println(variable[18], HEX);
    //Serial.print("byte 20 DATA3 ResrvedLow  variable 19: "); Serial.println(variable[19], HEX);
    //Serial.print("byte 21 DATA3 ResrvedHigh variable 20: "); Serial.println(variable[20], HEX);
    //Serial.print("byte 22 DATA3 ResrvedLow  variable 21: "); Serial.println(variable[21], HEX);
    //Serial.print("byte 23 DATA3 Check High  variable 22: "); Serial.println(variable[22], HEX);
    //Serial.print("byte 24 DATA3 Check Low   variable 23: "); Serial.println(variable[23], HEX);


    if(  ((variable[12]<<8) | variable[13])  <=37 ){
      pixels.clear(); // Set all pixel colors to 'off'
      pixels.setPixelColor(0, pixels.Color(0,25,0));                                    //green
      pixels.show();   // Send the updated pixel colors to the hardware.
      delay(DELAYVAL); // Pause before next pass through loop
      }
   else if (  ((variable[12]<<8) | variable[13])  >=38 && ((variable[12]<<8) | variable[13])<=50 ){
      pixels.clear(); // Set all pixel colors to 'off'
      pixels.setPixelColor(0, pixels.Color(25, 25,0));                                //yellow
      pixels.show();   // Send the updated pixel colors to the hardware.
      delay(DELAYVAL); // Pause before next pass through loop
      }
  else if (  ((variable[12]<<8) | variable[13])  >50 && ((variable[12]<<8) | variable[13])<=90 ){
      pixels.clear(); // Set all pixel colors to 'off'
      pixels.setPixelColor(0, pixels.Color(25, 10,0));                                //orenge
      pixels.show();   // Send the updated pixel colors to the hardware.
      delay(DELAYVAL); // Pause before next pass through loop
      }
  else if (  ((variable[12]<<8) | variable[13])  >90 ){
      pixels.clear(); // Set all pixel colors to 'off'
      pixels.setPixelColor(0, pixels.Color(25,0,0));                                  //red
      pixels.show();   // Send the updated pixel colors to the hardware.
      delay(DELAYVAL); // Pause before next pass through loop
      }

    //Serial.print("Check Sum variable 1-22 : "); Serial.print((variable[0] + variable[1]+ variable[2]+ variable[3]+ variable[4]+ variable[5]+ variable[6]+ variable[7]+ variable[8]+ variable[9]+ variable[10]+ variable[11]+ variable[12]+ variable[13]+ variable[14]+ variable[15]+ variable[16]+ variable[17]+ variable[18]+ variable[19]+ variable[20]+ variable[21]), HEX);
    if ( (variable[0] + variable[1]+ variable[2]+ variable[3]+ variable[4]+ variable[5]+ variable[6]+ variable[7]+ variable[8]+ variable[9]+ variable[10]+ variable[11]+ variable[12]+ variable[13]+ variable[14]+ variable[15]+ variable[16]+ variable[17]+ variable[18]+ variable[19]+ variable[20]+ variable[21]) == ( (variable[22]<<8) | variable[23] ) ) {
      Serial.println(" Check Sum OK");

    }
    else Serial.println("  Check Sum NO OK");

    iindex = 0;
    Serial.println(' ');
  }

}






#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeMono12pt7b.h>
#define SCREEN_WIDTH 128 // pixel ความกว้าง
#define SCREEN_HEIGHT 64 // pixel ความสูง

// กำหนดขาต่อ I2C กับจอ OLED
#define OLED_RESET     -1 //ขา reset เป็น -1 ถ้าใช้ร่วมกับขา Arduino reset
Adafruit_SSD1306 OLED(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int var = 0; // ตัวแปรสำหรับทดสอบแสดงผล
void setup() {
  Serial.begin(9600);
  Wire.begin(14,4); //SDA,SCL
  if (!OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // สั่งให้จอ OLED เริ่มทำงานที่ Address 0x3C
    Serial.println("SSD1306 allocation failed");
  } else {
    Serial.println("ArdinoAll OLED Start Work !!!");
  }
}

void loop() {
  OLED.clearDisplay(); // ลบภาพในหน้าจอทั้งหมด
  OLED.setTextColor(WHITE, BLACK);  //กำหนดข้อความสีขาว ฉากหลังสีดำ
  OLED.setCursor(0, 0); // กำหนดตำแหน่ง x,y ที่จะแสดงผล
  //OLED.setTextSize(2); // กำหนดขนาดตัวอักษร
  //OLED.println("OLED"); // แสดงผลข้อความ ALL

  //OLED.setTextSize(1);
  //OLED.print("welcome to");
  //OLED.println(" All");
  //OLED.setTextColor(BLACK, WHITE); //กลับสีข้อความกับพื้นหลัง
  //OLED.print("www.arduinoall.com");
  OLED.setTextColor(WHITE, BLACK);
  OLED.setCursor(0, 0);//60,0
  OLED.setTextSize(3);
  OLED.println(var, DEC);

  //OLED.setCursor(0, 40);
  //OLED.setTextSize(2);
  //OLED.println("ArduinoALL"); // แสดงผลข้อความ ALL


  OLED.display(); // สั่งให้จอแสดงผล
  var++;
  delay(10);
}




//end-----------------------------------------------------------------------------









//----------lib ssd1306-----------
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans18pt7b.h>
#define SCREEN_WIDTH 128 // pixel ความกว้าง
#define SCREEN_HEIGHT 64 // pixel ความสูง 32
// กำหนดขาต่อ I2C กับจอ OLED
#define OLED_RESET     -1 //ขา reset เป็น -1 ถ้าใช้ร่วมกับขา Arduino reset
Adafruit_SSD1306 OLED(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int var = 0; // ตัวแปรสำหรับทดสอบแสดงผล
//----------WS2812-----------------
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN        5 // On Trinket or Gemma, suggest changing this to 1
#define NUMPIXELS 1 // Popular NeoPixel ring size
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels

byte variable[24];
byte iindex = 0;
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 5); // RX, TX

void setup() {
  //pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
  Serial.begin(9600);
  mySerial.begin(9600);

  Wire.begin(14,4); //SDA,SCL
  if (!OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // สั่งให้จอ OLED เริ่มทำงานที่ Address 0x3C
    Serial.println("SSD1306 allocation failed");
  } else {
    Serial.println("ArdinoAll OLED Start Work !!!");
  }
}
void loop() {

  while (mySerial.available() > 0) {
    byte b = mySerial.read();
    variable[iindex++] = b;
  }
  if (iindex == 24) {
    //Serial.print("byte 1  start byte 1 0x42 variable 0: "); Serial.println(variable[0], HEX);
    //Serial.print("byte 2  start byte 2 0x4D variable 1: "); Serial.println(variable[1], HEX);
    //Serial.print("byte 3  Frame lenght 0x00 variable 2: "); Serial.println(variable[2], HEX);
    //Serial.print("byte 4  Frame lenght 0x14 variable 3: "); Serial.println(variable[3], HEX);
    //Serial.print("byte 5  DATA1 ResrvedHigh variable 4: "); Serial.println(variable[4], HEX);
    //Serial.print("byte 6  DATA1 ResrvedLow  variable 5: "); Serial.println(variable[5], HEX);
    //Serial.print("byte 7  DATA2 ResrvedHigh variable 6: "); Serial.println(variable[6], HEX);
    //Serial.print("byte 8  DATA2 ResrvedLow  variable 7: "); Serial.println(variable[7], HEX);
    //Serial.print("byte 9  DATA3 ResrvedHigh variable 8: "); Serial.println(variable[8], HEX);
    //Serial.print("byte 10 DATA3 ResrvedLow  variable 9: "); Serial.println(variable[9], HEX);
    //Serial.print("Byte 11 DATA4 PM1.0  High variable 10: "); Serial.println(variable[10], HEX);
    //Serial.print("byte 12 DATA4 PM1.0  Low  variable 11: "); Serial.println(variable[11], HEX);
    Serial.print("              PM1.0                 : "); Serial.print( (variable[10]<<8) | variable[11], DEC);Serial.println(" µg/m³");
    //Serial.print("Byte 13 DATA5 PM2.5  High variable 12: "); Serial.println(variable[12], HEX);
    //Serial.print("Byte 14 DATA4 PM2.5  Low  variable 13: "); Serial.println(variable[13], HEX);
    Serial.print("              PM2.5                 : "); Serial.print( (variable[12]<<8) | variable[13], DEC);Serial.println(" µg/m³");
    //Serial.print("Byte 15 DATA5 PM10   High variable 14: "); Serial.println(variable[14], HEX);
    //Serial.print("Byte 16 DATA4 PM10   Low  variable 15: "); Serial.println(variable[15], HEX);
    Serial.print("              PM10                  : "); Serial.print( (variable[14]<<8) | variable[15], DEC);Serial.println(" µg/m³");
    //Serial.print("Byte 17 DATA5 ResrvedHigh variable 16: "); Serial.println(variable[16], HEX);
    //Serial.print("Byte 18 DATA4 ResrvedLow  variable 17: "); Serial.println(variable[17], HEX);
    //Serial.print("byte 19 DATA3 ResrvedHigh variable 18: "); Serial.println(variable[18], HEX);
    //Serial.print("byte 20 DATA3 ResrvedLow  variable 19: "); Serial.println(variable[19], HEX);
    //Serial.print("byte 21 DATA3 ResrvedHigh variable 20: "); Serial.println(variable[20], HEX);
    //Serial.print("byte 22 DATA3 ResrvedLow  variable 21: "); Serial.println(variable[21], HEX);
    //Serial.print("byte 23 DATA3 Check High  variable 22: "); Serial.println(variable[22], HEX);
    //Serial.print("byte 24 DATA3 Check Low   variable 23: "); Serial.println(variable[23], HEX);
 
  OLED.clearDisplay(); // ลบภาพในหน้าจอทั้งหมด
  //OLED.setTextColor(WHITE, BLACK);  //กำหนดข้อความสีขาว ฉากหลังสีดำ
  //OLED.setCursor(0, 0); // กำหนดตำแหน่ง x,y ที่จะแสดงผล
  //OLED.setTextSize(2); // กำหนดขนาดตัวอักษร
  //OLED.println("OLED"); // แสดงผลข้อความ ALL
  //OLED.setTextSize(2);
  //OLED.print("welcome to");
  //OLED.println(" All");
  //OLED.setTextColor(BLACK, WHITE); //กลับสีข้อความกับพื้นหลัง
  //OLED.print("www.arduinoall.com");
  //if
  OLED.setTextColor(WHITE, BLACK);
  //OLED.setCursor(0, 60);//60,0
  //OLED.setTextSize(2);
  //OLED.setFont(&FreeSans18pt7b);
  if(  ((variable[12]<<8) | variable[13])  >=100 ){
    OLED.setCursor(0, 60);//60,0
    OLED.setTextSize(2);
    OLED.setFont(&FreeSans18pt7b);
    OLED.println((variable[12]<<8) | variable[13], DEC);
  }else if (((variable[12]<<8) | variable[13])  >10 ){
    OLED.setCursor(0, 60);//60,0
    OLED.setTextSize(2);
    OLED.setFont(&FreeSans18pt7b);
    OLED.println( ( (variable[12]<<8) | variable[13])/100, DEC);
 
    OLED.setCursor(40, 60);//60,0
    OLED.setTextSize(2);
    OLED.setFont(&FreeSans18pt7b);
    OLED.println( ( (variable[12]<<8) | variable[13])/10 , DEC);
  //}else{
    OLED.setCursor(80, 60);//60,0
    OLED.setTextSize(2);
    OLED.setFont(&FreeSans18pt7b);
    OLED.println(  ( (variable[12]<<8)|variable[13] )%10, DEC);
  }else{
    OLED.setCursor(0, 60);//60,0
    OLED.setTextSize(2);
    OLED.setFont(&FreeSans18pt7b);
    OLED.println( ( (variable[12]<<8) | variable[13])/100, DEC);
 
    OLED.setCursor(40, 60);//60,0
    OLED.setTextSize(2);
    OLED.setFont(&FreeSans18pt7b);
    OLED.println( ( (variable[12]<<8) | variable[13])/10 , DEC);
  //}else{
    OLED.setCursor(80, 60);//60,0
    OLED.setTextSize(2);
    OLED.setFont(&FreeSans18pt7b);
    OLED.println(  ( (variable[12]<<8)|variable[13] ), DEC);
  }
  //OLED.setCursor(0, 40);
  //OLED.setTextSize(2);
  //OLED.println("ArduinoALL"); // แสดงผลข้อความ ALL
  OLED.display(); // สั่งให้จอแสดงผล
  var++;
  delay(10);

      if(  ((variable[12]<<8) | variable[13])  <=37 ){
      pixels.clear(); // Set all pixel colors to 'off'
      pixels.setPixelColor(0, pixels.Color(0,25,0));                                    //green
      pixels.show();   // Send the updated pixel colors to the hardware.
      delay(DELAYVAL); // Pause before next pass through loop
      }
   else if (  ((variable[12]<<8) | variable[13])  >=38 && ((variable[12]<<8) | variable[13])<=50 ){
      pixels.clear(); // Set all pixel colors to 'off'
      pixels.setPixelColor(0, pixels.Color(25, 25,0));                                //yellow
      pixels.show();   // Send the updated pixel colors to the hardware.
      delay(DELAYVAL); // Pause before next pass through loop
      }
  else if (  ((variable[12]<<8) | variable[13])  >50 && ((variable[12]<<8) | variable[13])<=90 ){
      pixels.clear(); // Set all pixel colors to 'off'
      pixels.setPixelColor(0, pixels.Color(25, 10,0));                                //orenge
      pixels.show();   // Send the updated pixel colors to the hardware.
      delay(DELAYVAL); // Pause before next pass through loop
      }
  else if (  ((variable[12]<<8) | variable[13])  >90 ){
      pixels.clear(); // Set all pixel colors to 'off'
      pixels.setPixelColor(0, pixels.Color(25,0,0));                                  //red
      pixels.show();   // Send the updated pixel colors to the hardware.
      delay(DELAYVAL); // Pause before next pass through loop
      }

    //Serial.print("Check Sum variable 1-22 : "); Serial.print((variable[0] + variable[1]+ variable[2]+ variable[3]+ variable[4]+ variable[5]+ variable[6]+ variable[7]+ variable[8]+ variable[9]+ variable[10]+ variable[11]+ variable[12]+ variable[13]+ variable[14]+ variable[15]+ variable[16]+ variable[17]+ variable[18]+ variable[19]+ variable[20]+ variable[21]), HEX);
    if ( (variable[0] + variable[1]+ variable[2]+ variable[3]+ variable[4]+ variable[5]+ variable[6]+ variable[7]+ variable[8]+ variable[9]+ variable[10]+ variable[11]+ variable[12]+ variable[13]+ variable[14]+ variable[15]+ variable[16]+ variable[17]+ variable[18]+ variable[19]+ variable[20]+ variable[21]) == ( (variable[22]<<8) | variable[23] ) ) {
      Serial.println(" Check Sum OK");

    }
    else Serial.println("  Check Sum NO OK");

    iindex = 0;
    Serial.println(' ');
  }

}