* AM2321的取温度间隔得大于2s,否则,i2c会不工作了 * SimpleTimer有个bug,会导致两次快速的读温度,现在读温度函数里加了保护 * Blynk有个bug,会导致无法把数据传到服务器 * 现在可以正常工作了
BlynkFifo.h
00001 /** 00002 * @file BlynkFifo.h 00003 * @author Volodymyr Shymanskyy 00004 * @license This project is released under the MIT License (MIT) 00005 * @copyright Copyright (c) 2015 Volodymyr Shymanskyy 00006 * @date Feb 2015 00007 * @brief FIFO implementation 00008 * 00009 */ 00010 00011 #ifndef BlynkFifo_h 00012 #define BlynkFifo_h 00013 00014 #include <utility/BlynkUtility.h> 00015 00016 template<typename T, unsigned SIZE> 00017 class BlynkFifo { 00018 00019 BlynkFifo(const BlynkFifo<T, SIZE> & rb); 00020 00021 public: 00022 00023 BlynkFifo() : fst(0), lst(0), flag(0) {} 00024 ~BlynkFifo() {} 00025 00026 void clear() { 00027 fst = 0; 00028 lst = 0; 00029 flag = 0; 00030 } 00031 00032 size_t write(const T* data, size_t n) 00033 { 00034 if ((n = BlynkMin(n, getFree()))) { 00035 const size_t ch1 = BlynkMin(n, SIZE - lst); 00036 memcpy(buffer + lst, data, ch1 * sizeof(T)); 00037 lst = (lst + ch1) % SIZE; 00038 00039 if (ch1 < n) { 00040 const size_t ch2 = n - ch1; 00041 memcpy(buffer + lst, data + ch1, ch2 * sizeof(T)); 00042 lst = (lst + ch2) % SIZE; 00043 } 00044 00045 if (fst == lst) { 00046 flag = 1; 00047 } 00048 } 00049 return n; 00050 } 00051 00052 size_t read(T* dest, size_t n) 00053 { 00054 if ((n = BlynkMin(n, getOccupied()))) { 00055 flag = 0; 00056 00057 const size_t ch1 = BlynkMin(n, SIZE - fst); 00058 memcpy(dest, buffer + fst, ch1 * sizeof(T)); 00059 fst = (fst + ch1) % SIZE; 00060 00061 if (ch1 < n) { 00062 const size_t ch2 = n - ch1; 00063 memcpy(dest + ch1, buffer + fst, ch2 * sizeof(T)); 00064 fst = (fst + ch2) % SIZE; 00065 } 00066 } 00067 return n; 00068 } 00069 00070 void dump(void) 00071 { 00072 for (int i = fst; i < lst; i++) { 00073 pc.printf("0x%02X ", buffer[i]); 00074 if (i % 16 == 0) { 00075 pc.printf("\r\n"); 00076 } 00077 } 00078 } 00079 00080 bool push(const T& data) { 00081 return write(&data, 1) == 1; 00082 } 00083 00084 size_t getOccupied() const { 00085 if (lst == fst) { 00086 return flag ? SIZE : 0; 00087 } else if (lst > fst) { 00088 return lst - fst; 00089 } else { 00090 return SIZE + lst - fst; 00091 } 00092 } 00093 00094 size_t getFree() const { 00095 return SIZE - getOccupied(); 00096 } 00097 00098 private: 00099 T buffer[SIZE]; 00100 size_t fst; 00101 size_t lst; 00102 uint8_t flag; 00103 }; 00104 00105 #endif 00106
Generated on Tue Jul 12 2022 13:01:26 by 1.7.2