#include <DS2408.h>
#include <OneWire.h>

DS2408 ds(1);
Devices devices;

uint8_t device_count;
//========================================
void setup(){

  Serial.begin(9600);
  
  device_count = ds.find(&devices);
  
  Serial.print ("Found -  ");
  Serial.println(device_count, HEX);

  delay(64000);  // Пауза после подачи питания 
  LCD_begin();
  delay(128000);  // Именно столько, не меньше     
}
//========================================
void loop(){
//  uint8_t readByte=ds.get_state(devices[0]);
//  int pins=0;
//  for(int i=0;i<8;i++){
//    int readBit=bitRead(readByte,i);
//    bitWrite(pins,i,1);
//    bitWrite(pins,i+4,readBit);
//  }
//  ds.set_state(devices[1],readByte);
  LCD_cursor();
//  LCD_blink();
  Serial.println("Cursor ON"); 
  delay(128000);  // Именно столько, не меньше
  LCD_noCursor();
//  LCD_noBlink();
  Serial.println("Cursor OFF");      
  delay(128000);  // Именно столько, не меньше  
}
//========================================
//------------------------
void LCD_begin()  {  
  ds.set_state(devices[0],0x08); // Перевод в исходное состояние всех линий
  delay(3000);                   // Пауза по даташиту
  ds.set_state(devices[0],0x3C);
  ds.set_state(devices[0],0x38);
  delay(16000);                  // Cделано эмпирически по виду осциллограммы
  ds.set_state(devices[0],0x3C);
  ds.set_state(devices[0],0x38);

  ds.set_state(devices[0],0x3C);
  ds.set_state(devices[0],0x38);

  ds.set_state(devices[0],0x2C);
  ds.set_state(devices[0],0x28);

  ds.set_state(devices[0],0x2C);
  ds.set_state(devices[0],0x28);  

  ds.set_state(devices[0],0x8C);
  ds.set_state(devices[0],0x88);

  ds.set_state(devices[0],0x0C);
  ds.set_state(devices[0],0x08);
  
  ds.set_state(devices[0],0xCC);
  ds.set_state(devices[0],0xC8);

  ds.set_state(devices[0],0x0C);
  ds.set_state(devices[0],0x08);

  ds.set_state(devices[0],0x1C);
  ds.set_state(devices[0],0x18);
  delay(5400);
  ds.set_state(devices[0],0x0C);
  ds.set_state(devices[0],0x08);

  ds.set_state(devices[0],0x6C);
  ds.set_state(devices[0],0x68);           
  }
//------------------------
void LCD_cursor()  {
  ds.set_state(devices[0],0x0C);   // выставляем данные и поднимаем строб  
  ds.set_state(devices[0],0x08);   // Опускаем строб (Запись)    
  ds.set_state(devices[0],0xEC);   // выставляем - CursorON и поднимаем строб     
  ds.set_state(devices[0],0xE8);   // Опускаем строб (Запись)
  }
//------------------------
void LCD_noCursor()  {
  ds.set_state(devices[0],0x0C);   //
  ds.set_state(devices[0],0x08);   //
  ds.set_state(devices[0],0xCC);   //
  ds.set_state(devices[0],0xC8);   //
  }
//------------------------
void LCD_blink()  {
  ds.set_state(devices[0],0x0C);   // 
  ds.set_state(devices[0],0x08);   //
  ds.set_state(devices[0],0xDC);   //
  ds.set_state(devices[0],0xD8);   //  
  }
//------------------------
void LCD_noBlink()  {
  ds.set_state(devices[0],0x0C);   // 
  ds.set_state(devices[0],0x08);   //
  ds.set_state(devices[0],0xCC);   //
  ds.set_state(devices[0],0xC8);   //  
    }
//------------------------
void LCD_backlightOn()  {
  
}
//------------------------
void LCD_backlightOff()  {
  
}

//------------------------
