| sanik | Дата: Воскресенье, 27.04.2014, 05:47 | Сообщение # 1 |
 5 Вольт
Группа: Пользователи
Сообщений: 55
Репутация: 0
Статус: Offline
| Помогите пожалуйста! Почему то температура в сериал выводиться правильно а на индикаторах с каждым чтением меняется. Буду очень благодарен если у кого найдется готовый нормально работающий код. Код #include <OneWire.h>
OneWire ds (12); // on pin 12 - приём данны с датчика static byte celsy, desyata;
void setup (void) { // Serial.begin (9600); pinMode(2, OUTPUT); //0 разряд pinMode(3, OUTPUT); // 1 разряд pinMode(4, OUTPUT); // 2 разряд pinMode(5, OUTPUT);// сегмент F pinMode(6, OUTPUT);// сегмент A pinMode(7, OUTPUT);// сегмент E pinMode(8, OUTPUT);// сегмент B pinMode(9, OUTPUT);// сегмент D pinMode(10, OUTPUT);// сегмент C pinMode(11, OUTPUT);// сегмент G pinMode(13, OUTPUT);// сегмент dp }
void digit (byte cifra) { // сначала всё обесточиваем for (byte j=5; j<12; j++) { digitalWrite(j, HIGH); } digitalWrite(13, HIGH); switch (cifra) { case 0: { digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); break; } case 1: { digitalWrite(8, LOW); digitalWrite(10, LOW); break; } case 2: { digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(11, LOW); break; } case 3: { digitalWrite(6, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); break; } case 4: { digitalWrite(5, LOW); digitalWrite(8, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); break; } case 5: { digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); break; } case 6: { digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); break; } case 7: { digitalWrite(6, LOW); digitalWrite(8, LOW); digitalWrite(10, LOW); break; } case 8: { digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); break; } case 9: { digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); break; } default: ; } }
void loop (void) { byte i; // byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius, fahrenheit; if (! ds.search (addr)) { ds.reset_search (); for (byte i=0;i<20;i++) { digit(celsy/10); digitalWrite(4, HIGH); delay (5); digitalWrite(4, LOW); digit(celsy%10); digitalWrite(13, LOW); digitalWrite(3, HIGH); delay (5); digitalWrite(3, LOW); digit(desyata%10); digitalWrite(2, HIGH); delay (5); digitalWrite(2, LOW); } //delay (250); return; } ds.reset (); ds.select (addr); ds.write (0x44,1); // start conversion, with parasite power on at the end
// delay (1000); // maybe 750ms is enough, maybe not // we might do a ds.depower () here, but the reset will take care of it. byte present = ds.reset(); ds.select (addr); ds.write (0xBE); // Read Scratchpad for (i = 0; i < 9; i++) { // we need 9 bytes data [i]= ds.read (); }
// convert the data to actual temperature unsigned int raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // count remain gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms // default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; // Serial.print ("Temperature ="); // Serial.print (celsius); // Serial.print (" C,"); // Serial.print (fahrenheit); // Serial.println (" F");
if (celsius<70) { celsy=celsius; desyata=celsius*10; for (byte i=0;i<50;i++) { digit(celsy/10); digitalWrite(4, HIGH); delay (5); digitalWrite(4, LOW); digit(celsy%10); digitalWrite(13, LOW); digitalWrite(3, HIGH); delay (5); digitalWrite(3, LOW); digit(desyata%10); digitalWrite(2, HIGH); delay (5); digitalWrite(2, LOW); } } }
Ну не знаю я
|
| |
| |