






s328o8.name=Sensor328 (int8MHz, 1.8V)
s328o8.upload.protocol=arduino
s328o8.upload.maximum_size=30720
s328o8.upload.speed=19200
s328o8.bootloader.low_fuses=0xe2
s328o8.bootloader.high_fuses=0xda
s328o8.bootloader.extended_fuses=0x06
s328o8.bootloader.path=atmega
s328o8.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
s328o8.bootloader.unlock_bits=0x3F
s328o8.bootloader.lock_bits=0x0F
s328o8.build.mcu=atmega328p
s328o8.build.f_cpu=8000000L
s328o8.build.core=arduino
s328o8.build.variant=standard
s328o1.name=Sensor328p (int1MHz, 1.8V)
s328o1.upload.protocol=arduino
s328o1.upload.maximum_size=30720
s328o1.upload.speed=19200
s328o1.bootloader.low_fuses=0x62
s328o1.bootloader.high_fuses=0xda
s328o1.bootloader.extended_fuses=0x06
s328o1.bootloader.path=atmega
s328o1.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
s328o1.bootloader.unlock_bits=0x3F
s328o1.bootloader.lock_bits=0x0F
s328o1.build.mcu=atmega328p
s328o1.build.f_cpu=1000000L
s328o1.build.core=arduino
s328o1.build.variant=standard

.
//     
typedef struct{         
  int SensorID;        //  
  int ParamID;         //   
  float ParamValue;    //  
  char Comment[16];    // 
}
Message;///     
typedef struct{
  float Value;         //  
  char Note[16];       // 
} 
Parameter;
Parameter MySensors[NumSensors+1] = {    //   (  )
  NumSensors, "SN1 (in)",            //   ""        
  0, "TempIN, C",                        //    
  0, "VCC, V",                           //   (   )
  0, "BATT"                              //  ,     (0 -  "", 1 - "")
};
Message sensor; 
Parameter MySensors[NumSensors+1] = {    //   (  )
  NumSensors, "SN1 (in&out)",        //   ""        
  0, "TempIN, C",                        //    
  0, "VCC, V",                           //   (   )
  0, "BATT",                             //  ,     (0 -  "", 1 - "")
  0, "TempOUT, C"                        //    
};
Message sensor;

long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif  
  delay(75); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA,ADSC)); // measuring
  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
  uint8_t high = ADCH; // unlocks both
  long result = (high<<8) | low;
  result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
  return result; // Vcc in millivolts
}
//     
void calculateValue(){
  //    
  //  
  MySensors[2].Value = ((float) readVcc())/1000.0;
  
  //    (  3)
  MySensors[1].Value = (((float)analogRead(A3) * MySensors[2].Value / 1024.0) - 0.5)/0.01;
  
  //    2.4 -  "" (1)
  //   - " " (0)
  MySensors[3].Value = (MySensors[2].Value > 2.4) ? 1 : 0; 
  
  return;
}
//     
void calculateValue(){
  //    
  //  
  MySensors[2].Value = ((float) readVcc())/1000.0;
  
  //    (  3)
  MySensors[1].Value = (((float)analogRead(A3) * MySensors[2].Value / 1024.0) - 0.5)/0.01;
  
  //    2.4 -  "" (1)
  //   - " " (0)
  MySensors[3].Value = (MySensors[2].Value > 2.4) ? 1 : 0; 
  
  //    (  1   "Analog")
  MySensors[4].Value = (((float)analogRead(A1) * MySensors[2].Value / 1024.0) - 0.5)/0.01;
  
  return;
}
Parameter MySensors[NumSensors+1] = {    //   (  )
  NumSensors, "iBoard NTP",              //   ""        
  0, "Date (yymm.dd)",                   // 
  0, "Time (hhmm.ss)"                    // 
};
Message sensor; 
#define TimeOffset 4  //   - GMT +4 ()

Source: https://habr.com/ru/post/202898/
All Articles