Автор Тема: fatal error: time.h: No such file or directory  (Прочетена 5337 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #30 -: 12 Ноември 2016, 22:17:51 »
С LM34 съм. Тва е стойноста идваща от analog output voltage пина- http://www.learningaboutelectronics.com/Articles/LM34-temperature-sensor-circuit.php

Никога не съм го мерил директно.

С таз калкулация по-горе, нема да ми стигне заплатата тока да си платя  :)   
« Последна редакция: 12 Ноември 2016, 22:20:29 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #31 -: 13 Ноември 2016, 09:50:48 »
А каква ти е горната граница? Т.е. след като си пуснал кабела да нагрява кога го спираш?
Дай малко повече информация де, стига си я стискал. :)
Какви сензори си включил (модел), с реле ли превключваш (модел)? Покажи как си ги навързал (схема или снимка).

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #32 -: 13 Ноември 2016, 14:50:42 »
Цитат
А каква ти е горната граница? Т.е. след като си пуснал кабела да нагрява кога го спираш?
Падне ли температурата под 36F нагревателят стартира, над тази температура не работи.

Цитат
Дай малко повече информация де, стига си я стискал. :)
Миналата година точно на Нова Година отидохме  с приятели за да я посрещнем там и се оказахме неприятно изненадани без вода, водата беше замръзнала в тръбата. Последният път когато бях на къщата беше някъде през Октомври, след това претърпях злополука и не бях ходил повече от месец и половина заа да я нагледам. Някъде по това време (Ноември) температурите са били паднали под 0-та, термостата към нагревателят е бил изтрещял и водата беше замръзнала. Предишният собственик е източвал водата от тръбата като го е зазимявал, но преди него хора са живели там и през зимата. Дойде Април. Времето стана топло и направих опит да измъкна кабела от тръбата но без успех (смятай как е бил замръзнал). Срязах го от едната страна и го вързах директно към тока. Точно след 10 минути кабела почна да играе в тръбата и успях да го измъкна. И от там започна всичко. Първоначално реших да купя Digital Heating Thermostat и дори купих този - https://www.amazon.ca/RioRand-Thermostat-Temperature-Controller-Waterproof/dp/B00KCCX0EE. По-късно се заамислих и реших да взема едно Ардуино и да централизирам целият процес и не съжалявам, че се спрях на него.  Направих нов накрайник на heating cable-a, който да бъде water-proof и също да може издържа и на температура. След това трябваше да купя сензор, спрях се на LM35 понеже прочетох по форуми, че работи добре с Ардуно, но се оказа, че тук по-лесно се намира LM 34.  Пробих тръбата за да инсталирам сензора за да мери темп на воодата. Направих го и него water-proof, залях го с epoxy в един пластмасов плъг на резба и го завъртях към тръбата, която представлява едно дебело и дълго парче PVC. Купих  от ebay едно 10amp SSR relay DC/AC. Тока минаваш през кабела е около 4.3 amp, около 500w e. Би трябвало да свърши работа, все пак водата няма да я правя на чай я. Отделно имам около 10 feet-а PVC което излиза от земята преди да влезнее във водата. За тази част реших да купя кабел който се усуква външно, около тръбата. Увих го в изолация и нанизах още една тръба 2" широка. Него съм решил да го пускам, когато външната температура падне под 14F. Toй е с мощност около 125 w. И така... едно по едно нещата почнаха да си идват на мястото . За подаване / вземaнe на ниското напрежение ползвам cat 5 ethernet cable. В крайна сметка в момента имам 4 темп. сензора, един photocell и две SSR от което едното е 4 way channel на Omron - https://www.amazon.ca/SavvyTec-Channel-Solid-state-Relay-Trigger/dp/B01M1HQSTG/ref=sr_1_15?s=electronics&ie=UTF8&qid=1479039721&sr=1-15&keywords=Omron+ssr. Arduino и него съм ги сложил в box и въобще е много прибрано всичко и лесно за поддръжка. За джакузиито още не съм решил дали си струва да го командвам и него (макар, че имам всичко), понеже много ток самото то консумира през зимата а и похлупака му не е хич хубав и изтича много heat през него, тва е и една от причините. Но както казах  в един друг пост, най-важното нещо е тръбата и водата в нея да се отопляват. Тук шега с температурите не бива. А .....забравих да спомена нещо важно. Понеже сензорите са на голямо разтояние от Ардуино при мен, за да стабилизирам сигнала (който е представен в mV) беше необходимо да сложа10k / 11k съпротивление на изхода.  По този начин няма остатъчно напрежение по трасето, без него напрежението играеше много яко ;)
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #33 -: 13 Ноември 2016, 18:44:01 »
Само гледай да няма рибена чорба  ;D

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #34 -: 13 Ноември 2016, 21:40:32 »
Брадъре, нещо странно се случва. След 8-ят, 9-ят принтф пина се пали сам. Забелязах, че ако стойноста е 141 последната 1-ца го пали, ако стане  140 го чисти. Получава се някакво сбиване очевидно. Ако махна printf() всичко работи както трябва. Идея да имаш как да го фиксна  ;)
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #35 -: 14 Ноември 2016, 10:14:53 »
Дай да видим целия код. Или е този който постна последно?
Много ме съмнява да има нещо общо с това дали е 140 или 141.

Добави следното към принта и дай да видим изхода около момента когато се скофтят нещата.
Код: C
  1. printf("Air Temperature: %d, rxr=%u, rxw=%u, c=%02X\n", (int)(round(tmp_air)), rxReadPos, rxWritePos, (uint8_t)rxBuffer[rxReadPos]);

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #36 -: 14 Ноември 2016, 13:24:27 »
Всичко е нормално, но не мога да подпаля пина. Ако коментирам printf() паля пина но пък няма изход а тва е важно за мен за да знам каква е текущата теемпература.

Тва  е изхода:
Код: Bash
  1. Air Temperature: 139, rxr=0, rxw=0, c=00
  2.  
  3. Air Temperature: 139, rxr=0, rxw=0, c=00
  4.  
  5. Air Temperature: 139, rxr=1, rxw=44, c=69
  6.  
  7. Air Temperature: 139, rxr=2, rxw=39, c=65
  8.  
  9. Air Temperature: 139, rxr=3, rxw=34, c=65
  10.  
  11. Air Temperature: 139, rxr=4, rxw=29, c=2C
  12.  
  13. Air Temperature: 139, rxr=5, rxw=24, c=34
  14.  
  15. Air Temperature: 139, rxr=6, rxw=19, c=3D
  16.  
  17. Air Temperature: 139, rxr=7, rxw=14, c=3D
  18.  
  19. Air Temperature: 139, rxr=8, rxw=9, c=0A
  20.  
  21. Air Temperature: 139, rxr=9, rxw=3, c=41
  22.  
  23. Air Temperature: 139, rxr=10, rxw=47, c=70
  24.  
  25. Air Temperature: 139, rxr=11, rxw=43, c=65
  26.  
  27. Air Temperature: 139, rxr=12, rxw=39, c=39
  28.  
  29. Air Temperature: 139, rxr=13, rxw=35, c=72
  30.  
  31. Air Temperature: 139, rxr=14, rxw=34, c=20
  32.  
  33. Air Temperature: 139, rxr=15, rxw=30, c=78
  34.  
  35. Air Temperature: 139, rxr=16, rxw=26, c=2C
  36.  
  37. Air Temperature: 139, rxr=17, rxw=22, c=43
  38.  
  39. Air Temperature: 139, rxr=18, rxw=18, c=0D
  40.  
  41. Air Temperature: 139, rxr=19, rxw=14, c=69
  42.  
  43. Air Temperature: 139, rxr=20, rxw=10, c=6D
  44.  

 Кода е този:

Код: C
  1.  
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <avr/io.h>
  5. #include <util/delay.h>
  6. #include <avr/interrupt.h>
  7.  
  8. #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
  9. #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
  10.  
  11. #define F_CPU 16000000UL
  12. #define BUAD 9600
  13. #define BRC (((F_CPU / (BUAD * 16UL))) - 1)
  14.  
  15. #define RX_BUFFER_SIZE 50
  16. #define ADC_AIR_CHANNEL 0
  17. #define NUM_READINGS 10
  18.  
  19. #define PORT_ON(port,pin) port |= (1<<pin)
  20. #define PORT_OFF(port,pin) port &= ~(1<<pin)
  21.  
  22. char rxBuffer[RX_BUFFER_SIZE];
  23. volatile uint8_t rxReadPos = 0;
  24. volatile uint8_t rxWritePos = 0;
  25.  
  26. // declare all functtions
  27. void USART0Init(void);
  28. void USART0SendByte(char u8Data, FILE *stream);
  29. void InitADC(void);
  30. uint16_t ReadADC(uint8_t ADCchannel);
  31. float ReadAirTemp(uint8_t channel,  uint16_t *values_of__air, int sizeOfValues);
  32. char getChar(void);
  33. char peekChar(void);
  34.  
  35. void USART0Init(void) {
  36.  
  37.     // Set baud rate
  38.     UBRR0H = (BRC >> 8);
  39.  
  40.     UBRR0L =  BRC;  
  41.      
  42.     UCSR0B = (1 << RXEN0)  | (1 << RXCIE0) | (1<<TXEN0);
  43.  
  44.     UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
  45.  
  46. }
  47.  
  48. void USART0SendByte(char u8Data, FILE *stream) {
  49.         if(u8Data == '\n')
  50.         {
  51.             USART0SendByte('\r', stream);
  52.         }
  53.         //wait while previous byte is completed
  54.         while(!(UCSR0A&(1<<UDRE0))){};
  55.         // Transmit data
  56.         UDR0 = u8Data;
  57. }
  58.  
  59. //set stream pointer
  60. FILE usart0_str = FDEV_SETUP_STREAM(USART0SendByte, NULL, _FDEV_SETUP_WRITE);
  61.  
  62. void InitADC(void) {
  63.         // Select Vref=AVcc
  64.         ADMUX |= (1<<REFS0);
  65.         //set prescaller to 128 and enable ADC
  66.         ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADEN);    
  67. }
  68.      
  69. uint16_t ReadADC(uint8_t ADCchannel) {
  70.  
  71.         //select ADC channel with safety mask
  72.         //single conversion mode
  73.         while( ADCSRA & (1<<ADSC) );
  74.        
  75.          //select ADC channel with safety mask
  76.          ADMUX = (ADMUX & 0xF0) | (ADCchannel & 0x0F);
  77.  
  78.         // start single convertion
  79.         // write ’1′ to ADSC
  80.         ADCSRA |= (1<<ADSC);
  81.  
  82.   // wait for conversion to complete
  83.   // ADSC becomes ’0′ again
  84.   // till then, run loop continuously
  85.   while(ADCSRA & (1<<ADSC));
  86.  
  87.   return (ADC);
  88. }
  89.  
  90. float ReadAirTemp(uint8_t channel,  uint16_t *values_of__air, int sizeOfValues) {
  91.         int i = 0;
  92.         int  total = 0;
  93.         float average = 0.0f;
  94.  
  95. for (i = 0; i < sizeOfValues; i++) {
  96.  
  97.         values_of__air[i] = ReadADC(channel); // тука може да ползваме функцията ReadADC,защото
  98.                                               // тя вече е декларирана най-отгоре и е позната
  99.         total = total + values_of__air[i];    // няма нужда от екстра loop за сбора
  100.        
  101.         _delay_ms(300);
  102.  }
  103.         average = (float)total / (float)sizeOfValues;
  104.        
  105.         return average;
  106. }
  107.  
  108. int main(void) {
  109.     //initialize USART0Init
  110.     USART0Init();
  111.  
  112.     //initialize ADC
  113.     InitADC();
  114.    
  115.     // set port B pin 0 as output
  116.     DDRB = (1 << PORTB0);
  117.  
  118.     //assign our stream to standard I/O streams
  119.     stdout = &usart0_str;
  120.    
  121.     uint16_t values_of__air[NUM_READINGS] = {0};
  122.    
  123.     float tmp_air = 0.0f;
  124.        
  125.     sei();
  126.      
  127.     while(1)
  128.     {
  129.  
  130.         tmp_air = ReadAirTemp(ADC_AIR_CHANNEL, values_of__air, NUM_READINGS);
  131.        
  132.        // printf("Temperature: %d\n", (int)(round(tmp_air)));  
  133.         //printf("Air Temperature: %d, rxr=%u, rxw=%u, c=%02X\n", (int)(round(tmp_air)), rxReadPos, rxWritePos, (uint8_t)rxBuffer[rxReadPos]);
  134.         char c = getChar();
  135.          
  136.         if(c == '1')
  137.         {
  138.             sbi(PORTB, PORTB0);
  139.         }
  140.         else if(c == '0')
  141.         {
  142.             cbi(PORTB, PORTB0);
  143.         }
  144.     }
  145. }
  146.  
  147. char peekChar(void)
  148. {
  149.     char ret = '\0';
  150.      
  151.     if(rxReadPos != rxWritePos)
  152.     {
  153.         ret = rxBuffer[rxReadPos];
  154.     }
  155.      
  156.     return ret;
  157. }
  158.  
  159. char getChar(void)
  160. {
  161.     char ret = '\0';
  162.      
  163.     if(rxReadPos != rxWritePos)
  164.     {
  165.         ret = rxBuffer[rxReadPos];
  166.          
  167.         rxReadPos++;
  168.          
  169.         if(rxReadPos >= RX_BUFFER_SIZE)
  170.         {
  171.             rxReadPos = 0;
  172.         }
  173.     }
  174.      
  175.     return ret;
  176. }
  177.  
  178. ISR(USART_RX_vect)
  179. {
  180.     rxBuffer[rxWritePos] = UDR0;
  181.      
  182.     rxWritePos++;
  183.      
  184.     if(rxWritePos >= RX_BUFFER_SIZE)
  185.     {
  186.         rxWritePos = 0;
  187.     }
  188. }
  189.  
  190.  
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #37 -: 14 Ноември 2016, 14:54:11 »
Е па кво му е нормалното?  ???
Не виждаш ли, че пишещия и четящия указател на буфера с получени знаци здравата са се разшавали. А в буфера има някви боклуци, които може по някаква случайност от време на време да са '1', или '0'.

Преди да подкараш паленето на пина се увери , че имплементацията на UART ти е правилна. Т.е. направи си ехо и се увери, че това, което си написал/изпратил през uart, е това което микроконтролера получава. Нищо друго не трябва да пълни буфера. Ако да речем пратиш 'F' в буфера трябва да има само и единствено символа 'F'!

Код: C
  1. while(1)
  2. {  
  3.     char c = getChar();
  4.     if(c != 0) {
  5.        printf("got: %c\n", c);
  6.     }
  7. }

Едит:
между другото бих ти препоръчал поне за тестовете да използваш minicom, hterm, или picocom.
« Последна редакция: 14 Ноември 2016, 15:02:41 от kjufte »

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #38 -: 14 Ноември 2016, 20:20:23 »
Добре. Шъ видя кво мога да направя сам и ще пиша ;)


PS: Виж кво става като пусна 1:

Цитат
dimt@dimt-Satellite-L670 ~ $ cat /dev/ttyACM0

got: 1

got:


got:



got: g

got: o

got:


got:



got: g

got: o

got: t

got:


Код: C
  1. while(1)
  2.     {
  3.  
  4.         tmp_air = ReadAirTemp(ADC_AIR_CHANNEL, values_of__air, NUM_READINGS);
  5.  
  6.          // printf("Temperature: %d\n", (int)(round(tmp_air)));  
  7.         //printf("Air Temperature: %d, rxr=%u, rxw=%u, c=%02X\n", (int)(round(tmp_air)), rxReadPos, rxWritePos, (uint8_t)rxBuffer[rxReadPos]);
  8.         char c = getChar();
  9.  
  10.        if(c != 0) {
  11.        printf("got: %c\n", c);
  12.        }
  13.         if(c == '1')
  14.         {
  15.             sbi(PORTB, PORTB0);
  16.         }
  17.         else if(c == '0')
  18.         {
  19.             cbi(PORTB, PORTB0);
  20.         }
  21.     }
  22. }
  23.  
  24.  
  25.  
« Последна редакция: 14 Ноември 2016, 20:36:29 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #39 -: 14 Ноември 2016, 21:55:01 »
Забелязах нещо интереснно също. Ако ползвам screen /dev/ttyACM0 проблем нямам. Всъщност тва е и програмата която ползвам за да извличам екото от микропроцесора и след товва да ми се праща репорт на всеки 12 часа. Обаче ако искам да видя изхода с cat /devt/tyACM0 се получава АКОТО :)

Виж същият изход но през screen, пина е сетнат към 1:

Код: Bash
  1. Air Temperature: 142, rxr=2, rxw=2, c=00
  2. Air Temperature: 143, rxr=2, rxw=2, c=00
  3. Air Temperature: 142, rxr=2, rxw=2, c=00
  4. Air Temperature: 142, rxr=2, rxw=2, c=00
  5. Air Temperature: 142, rxr=2, rxw=2, c=00
  6. Air Temperature: 142, rxr=2, rxw=2, c=00
  7. Air Temperature: 142, rxr=2, rxw=2, c=00
  8. Air Temperature: 142, rxr=2, rxw=2, c=00
  9. Air Temperature: 142, rxr=2, rxw=2, c=00
  10. Air Temperature: 142, rxr=2, rxw=2, c=00
  11. Air Temperature: 142, rxr=2, rxw=2, c=00
  12.  
« Последна редакция: 14 Ноември 2016, 22:06:47 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #40 -: 14 Ноември 2016, 22:18:36 »
Най-добре както ти писах вече е да се свържш през minicom и да видиш дали не идват някви символи без да си пращал нищо. И дали ако пратиш символ ще получиш само и единствено ехо с този символ.

Код: Bash
  1. minicom -b 9600 -D /dev/ttyACM0

или нещо такова

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #41 -: 15 Ноември 2016, 00:24:07 »
Яко....не бях чувал за нея :) Да, каквото пратя това и получавам няма друго. Вече съм 100% сигурен, че  мазалото е идвало от cat.
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #42 -: 15 Ноември 2016, 09:31:02 »
Аз бих ти препоръчал да си реструктурираш четенето на температурата. Принципно едно такова блокиране на main loop за 3 секунди е неприемливо. Освен разбира се ако не е за да пестиш енергия, слагайки микроконтролера да спи през това време. Това мудно четене добавя забавяне в response time за командите, които пращаш през uart. По този начин създава предпоставка за препълване на буфера.

AD конвертора също има съответен interrupt, с който можеш да премахнеш този busy wait, с който чакаш да приключи преобразуването.
Освен това, ADC може да се конфигурира така, че да бъде викан автоматично от примерно timer1. По този начин ще направиш проверката на температурата напълно независима от останалата част от кода. И няма да блокираш main.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #43 -: 15 Ноември 2016, 14:29:37 »
За сега няма да пипам нищо, на пролет ;) Важното е, че водата се нагрява, виждам това от репортите, които получавам. В петък ще ходим и ще бъда там за уикенда, нещото което бих добавил е само да мога да паля / гася фърниса отдалечено.   
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #44 -: 22 Декември 2016, 21:31:20 »
Това от сензора ли са данни? И ако да, какъв сензор ползваш?
Ако е TMP36, то формулата изглежда да е
(mV - 500) / 10
Или в твоя случай
( (75 * (5000 / 1024))  - 500 ) /10 или -13.37°C, което ми се вижда голям студ  ;D
Брадъре, миналият четвъртък температурата навън на къщата удари -25. Обаче върнатото напрежението от сензора не показа отрицателна стойност . Което, според формулата по която изчислявам е 0*(500/1024) = 0 F = -17.77 C. Че се чудя....възможно ли е да върне отрицателна стойност (отрицателно напрежение) или с тази round функция всичко се закръгля само около 0-та?     
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html