Temporary Connector Reversed Version

Dependencies:   UniGraphic mbed vt100

afero_poc15_180403R , J1 のピン配置を反転させたヴァージョンです。

Color2系を使用するためには以下のピンをジャンパで接続してください。
J1-D7 <-> J1-D0
J1-D6 <-> J1-D1

(調査中) また、こちらでテストした範囲では、
FRDM-KL25Z の V3.3 を、Modulo2 の VCC_3V3 ピンに接続してやる必要がありました。

尚、J1-D1, D0 を使用するために UART を無効にしているため
ログは表示されません。

TFTモジュールについて 
aitendoのTFTモジュールはデフォルトでは8bit bus モードになっています。
/media/uploads/Rhyme/img_2364.jpg

半田のジャンパを変えて、SPIの設定にしてください。
/media/uploads/Rhyme/img_2363.jpg

サーミスタについて
POC1.5 では サーミスタは 25℃の時に抵抗値が 50.0kΩになる502AT-11 が
4.95kΩのプルアップ(実際は10kΩx2の並列)で使用されていました。

今回の試作では抵抗値が 10.0kΩの 103AT-11 が
5.1kΩのプルアップで使用されていますので、係数を合わせるために
SMTC502AT-11 のコンストラクタを 
R0 = 10.0
R1 = 5.1
B = 3435
T0 = 298.15
で呼ぶように変更しました。

Committer:
Rhyme
Date:
Tue Apr 24 12:18:10 2018 +0000
Revision:
1:6c54dc8acf96
Parent:
0:0b6732b53bf4
to adjust with 103AT-11 with 5.1k pull-up, the constructor of 502AT-11 is called with R0=10.0, R1=5.1, B=3435, T0=298.15

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:0b6732b53bf4 1 #include "mbed.h"
Rhyme 0:0b6732b53bf4 2 #include "vt100.h"
Rhyme 0:0b6732b53bf4 3 #include "edge_mgr.h"
Rhyme 0:0b6732b53bf4 4 #include "edge_reset_mgr.h"
Rhyme 0:0b6732b53bf4 5 #include "edge_time.h"
Rhyme 0:0b6732b53bf4 6 #include "edge_sensor.h"
Rhyme 0:0b6732b53bf4 7
Rhyme 0:0b6732b53bf4 8 extern vt100 *tty ;
Rhyme 0:0b6732b53bf4 9 static uint16_t id = 0 ;
Rhyme 0:0b6732b53bf4 10
Rhyme 0:0b6732b53bf4 11 edge_sensor::edge_sensor()
Rhyme 0:0b6732b53bf4 12 {
Rhyme 0:0b6732b53bf4 13 _interval = 0 ;
Rhyme 0:0b6732b53bf4 14 _prev_status = EDGE_SENSOR_INACTIVE ;
Rhyme 0:0b6732b53bf4 15 _status = EDGE_SENSOR_INACTIVE ;
Rhyme 0:0b6732b53bf4 16 _id = id++ ;
Rhyme 0:0b6732b53bf4 17 _enable = false ;
Rhyme 0:0b6732b53bf4 18 _error_count = 0 ;
Rhyme 0:0b6732b53bf4 19 _sample_error = 0 ;
Rhyme 0:0b6732b53bf4 20 }
Rhyme 0:0b6732b53bf4 21
Rhyme 0:0b6732b53bf4 22 edge_sensor::~edge_sensor()
Rhyme 0:0b6732b53bf4 23 {
Rhyme 0:0b6732b53bf4 24 }
Rhyme 0:0b6732b53bf4 25
Rhyme 0:0b6732b53bf4 26 void edge_sensor::reset(void)
Rhyme 0:0b6732b53bf4 27 {
Rhyme 0:0b6732b53bf4 28 _status = EDGE_SENSOR_INACTIVE ;
Rhyme 0:0b6732b53bf4 29 }
Rhyme 0:0b6732b53bf4 30
Rhyme 0:0b6732b53bf4 31 void edge_sensor::enable(void)
Rhyme 0:0b6732b53bf4 32 {
Rhyme 0:0b6732b53bf4 33 _enable = true ;
Rhyme 0:0b6732b53bf4 34 }
Rhyme 0:0b6732b53bf4 35
Rhyme 0:0b6732b53bf4 36 void edge_sensor::disable(void)
Rhyme 0:0b6732b53bf4 37 {
Rhyme 0:0b6732b53bf4 38 _enable = false ;
Rhyme 0:0b6732b53bf4 39 }
Rhyme 0:0b6732b53bf4 40
Rhyme 0:0b6732b53bf4 41 bool edge_sensor::isEnabled(void)
Rhyme 0:0b6732b53bf4 42 {
Rhyme 0:0b6732b53bf4 43 return( _enable ) ;
Rhyme 0:0b6732b53bf4 44 }
Rhyme 0:0b6732b53bf4 45
Rhyme 0:0b6732b53bf4 46 void edge_sensor::prepare(void)
Rhyme 0:0b6732b53bf4 47 {
Rhyme 0:0b6732b53bf4 48 // printf("Sensor %d prepare for sample\n", _id) ;
Rhyme 0:0b6732b53bf4 49 }
Rhyme 0:0b6732b53bf4 50
Rhyme 0:0b6732b53bf4 51 int edge_sensor::sample(void)
Rhyme 0:0b6732b53bf4 52 {
Rhyme 0:0b6732b53bf4 53 int result = EDGE_SAMPLE_SUCCESS ;
Rhyme 0:0b6732b53bf4 54 // printf("Sensor %d sample\n", _id) ;
Rhyme 0:0b6732b53bf4 55 return( result ) ;
Rhyme 0:0b6732b53bf4 56 }
Rhyme 0:0b6732b53bf4 57
Rhyme 0:0b6732b53bf4 58 int edge_sensor::deliver(void)
Rhyme 0:0b6732b53bf4 59 {
Rhyme 0:0b6732b53bf4 60 // printf("Sensor %d data delivered\n", _id) ;
Rhyme 0:0b6732b53bf4 61 /* usually return( result == afSUCCESS ) ; */
Rhyme 0:0b6732b53bf4 62 return 1 ; /* return non zero for success */
Rhyme 0:0b6732b53bf4 63 }
Rhyme 0:0b6732b53bf4 64
Rhyme 0:0b6732b53bf4 65 void edge_sensor::show(void)
Rhyme 0:0b6732b53bf4 66 {
Rhyme 0:0b6732b53bf4 67 /* display value(s) to TFT */
Rhyme 0:0b6732b53bf4 68 }
Rhyme 0:0b6732b53bf4 69
Rhyme 0:0b6732b53bf4 70 void edge_sensor::displayTime(int32_t ts)
Rhyme 0:0b6732b53bf4 71 {
Rhyme 0:0b6732b53bf4 72 struct tm timestruct ;
Rhyme 0:0b6732b53bf4 73 if (display) {
Rhyme 0:0b6732b53bf4 74 reset_watch_dog() ;
Rhyme 0:0b6732b53bf4 75 ts2tm(ts, &timestruct) ;
Rhyme 0:0b6732b53bf4 76 reset_watch_dog() ;
Rhyme 0:0b6732b53bf4 77 display->set_font((unsigned char*) Arial12x12);
Rhyme 0:0b6732b53bf4 78 display->set_font_zoom(2, 2) ;
Rhyme 0:0b6732b53bf4 79 display->foreground(White) ;
Rhyme 0:0b6732b53bf4 80 // display->locate(10, 5) ;
Rhyme 0:0b6732b53bf4 81 display->printf("%d/%02d/%02d %02d:%02d:%02d",
Rhyme 0:0b6732b53bf4 82 timestruct.tm_year,
Rhyme 0:0b6732b53bf4 83 timestruct.tm_mon + 1,
Rhyme 0:0b6732b53bf4 84 timestruct.tm_mday,
Rhyme 0:0b6732b53bf4 85 timestruct.tm_hour,
Rhyme 0:0b6732b53bf4 86 timestruct.tm_min,
Rhyme 0:0b6732b53bf4 87 timestruct.tm_sec
Rhyme 0:0b6732b53bf4 88 ) ;
Rhyme 0:0b6732b53bf4 89 reset_watch_dog() ;
Rhyme 0:0b6732b53bf4 90 }
Rhyme 0:0b6732b53bf4 91 }
Rhyme 0:0b6732b53bf4 92
Rhyme 0:0b6732b53bf4 93 void edge_sensor::toJson(char *buf)
Rhyme 0:0b6732b53bf4 94 {
Rhyme 0:0b6732b53bf4 95 sprintf(buf, "EDGE_SENSOR%d is not a real sensor", _id) ;
Rhyme 0:0b6732b53bf4 96 }
Rhyme 0:0b6732b53bf4 97
Rhyme 0:0b6732b53bf4 98 void edge_sensor::setInterval(uint16_t interval)
Rhyme 0:0b6732b53bf4 99 {
Rhyme 0:0b6732b53bf4 100 _interval = interval ;
Rhyme 0:0b6732b53bf4 101 }
Rhyme 0:0b6732b53bf4 102
Rhyme 0:0b6732b53bf4 103 uint16_t edge_sensor::getInterval(void)
Rhyme 0:0b6732b53bf4 104 {
Rhyme 0:0b6732b53bf4 105 return( _interval ) ;
Rhyme 0:0b6732b53bf4 106 }
Rhyme 0:0b6732b53bf4 107
Rhyme 0:0b6732b53bf4 108 int edge_sensor::getStatus(void)
Rhyme 0:0b6732b53bf4 109 {
Rhyme 0:0b6732b53bf4 110 return( _status ) ;
Rhyme 0:0b6732b53bf4 111 }
Rhyme 0:0b6732b53bf4 112
Rhyme 0:0b6732b53bf4 113 /*
Rhyme 0:0b6732b53bf4 114 #define EDGE_SENSOR_INACTIVE 0
Rhyme 0:0b6732b53bf4 115 #define EDGE_SENSOR_WAIT 1
Rhyme 0:0b6732b53bf4 116 #define EDGE_SENSOR_READY 2
Rhyme 0:0b6732b53bf4 117 #define EDGE_SENSOR_PREPARED 3
Rhyme 0:0b6732b53bf4 118 #define EDGE_SENSOR_SAMPLED 4
Rhyme 0:0b6732b53bf4 119 #define EDGE_SENSOR_DELIVERD 5
Rhyme 0:0b6732b53bf4 120 */
Rhyme 0:0b6732b53bf4 121
Rhyme 0:0b6732b53bf4 122 int edge_sensor::runStateMachine(void)
Rhyme 0:0b6732b53bf4 123 {
Rhyme 0:0b6732b53bf4 124 int result ;
Rhyme 0:0b6732b53bf4 125 reset_watch_dog() ;
Rhyme 0:0b6732b53bf4 126 switch(_status) {
Rhyme 0:0b6732b53bf4 127 case EDGE_SENSOR_INACTIVE: /* inactive */
Rhyme 0:0b6732b53bf4 128 if (isEnabled()) {
Rhyme 0:0b6732b53bf4 129 _status = EDGE_SENSOR_WAIT ;
Rhyme 0:0b6732b53bf4 130 }
Rhyme 0:0b6732b53bf4 131 _prev_status = EDGE_SENSOR_INACTIVE ;
Rhyme 0:0b6732b53bf4 132 break ;
Rhyme 0:0b6732b53bf4 133 case EDGE_SENSOR_WAIT: /* wait for interval time expires */
Rhyme 0:0b6732b53bf4 134 if (_prev_status == EDGE_SENSOR_INACTIVE) { // initial end_interval
Rhyme 0:0b6732b53bf4 135 _end_interval = edge_time + _interval ;
Rhyme 0:0b6732b53bf4 136 }
Rhyme 0:0b6732b53bf4 137 _prev_status = EDGE_SENSOR_WAIT ;
Rhyme 0:0b6732b53bf4 138 if (edge_time >= _end_interval) {
Rhyme 0:0b6732b53bf4 139 _status = EDGE_SENSOR_READY ;
Rhyme 0:0b6732b53bf4 140 _end_interval += _interval ;
Rhyme 0:0b6732b53bf4 141 }
Rhyme 0:0b6732b53bf4 142 break ;
Rhyme 0:0b6732b53bf4 143 case EDGE_SENSOR_READY: /* prepare to sample */
Rhyme 0:0b6732b53bf4 144 result = sample() ;
Rhyme 0:0b6732b53bf4 145 if (result == EDGE_SAMPLE_SUCCESS) {
Rhyme 0:0b6732b53bf4 146 _status = EDGE_SENSOR_SAMPLED ;
Rhyme 0:0b6732b53bf4 147 _sample_error = 0 ;
Rhyme 0:0b6732b53bf4 148 } else {
Rhyme 0:0b6732b53bf4 149 reset_watch_dog() ;
Rhyme 0:0b6732b53bf4 150 printf("Sampling error: ") ;
Rhyme 0:0b6732b53bf4 151 switch(_id) {
Rhyme 0:0b6732b53bf4 152 case SENSOR_ID_ACCEL: printf("Accel (MMA8451Q) ") ; break ;
Rhyme 0:0b6732b53bf4 153 case SENSOR_ID_COLOR1: printf("Color1 (VEML6040) ") ; break ;
Rhyme 0:0b6732b53bf4 154 case SENSOR_ID_COLOR2: printf("Color2 (VEML6040) ") ; break ;
Rhyme 0:0b6732b53bf4 155 case SENSOR_ID_TEMP: printf("Temp (LM75B) ") ; break ;
Rhyme 0:0b6732b53bf4 156 case SENSOR_ID_PRESS: printf("Pressure (PSE530) ") ; break ;
Rhyme 0:0b6732b53bf4 157 default: printf("Sensor[%d] ", _id) ; break ;
Rhyme 0:0b6732b53bf4 158 }
Rhyme 0:0b6732b53bf4 159 switch(result) {
Rhyme 0:0b6732b53bf4 160 case -2: printf("Bus Busy") ; break ;
Rhyme 0:0b6732b53bf4 161 case -1: printf("No Slave") ; break ;
Rhyme 0:0b6732b53bf4 162 case 0: printf("No Error") ; break ;
Rhyme 0:0b6732b53bf4 163 case 1: printf("Nack Received") ; break ;
Rhyme 0:0b6732b53bf4 164 case 2: printf("Time Out") ; break ;
Rhyme 0:0b6732b53bf4 165 default: printf("error[%d]",result) ; break ;
Rhyme 0:0b6732b53bf4 166 }
Rhyme 0:0b6732b53bf4 167 _sample_error++ ;
Rhyme 0:0b6732b53bf4 168 printf("\n") ;
Rhyme 0:0b6732b53bf4 169 }
Rhyme 0:0b6732b53bf4 170 if (_sample_error > SAMPLE_ERROR_TOLERANCE) {
Rhyme 0:0b6732b53bf4 171 printf("Sampling error of sensor[%d]\n", _id) ;
Rhyme 0:0b6732b53bf4 172 wait(0.1) ;
Rhyme 0:0b6732b53bf4 173 reset_watch_dog() ;
Rhyme 0:0b6732b53bf4 174 reboot_edge() ;
Rhyme 0:0b6732b53bf4 175 }
Rhyme 0:0b6732b53bf4 176 _prev_status = EDGE_SENSOR_READY ;
Rhyme 0:0b6732b53bf4 177 break ;
Rhyme 0:0b6732b53bf4 178 case EDGE_SENSOR_SAMPLED: /* data is ready, wait for delivery */
Rhyme 0:0b6732b53bf4 179 if (_prev_status != EDGE_SENSOR_SAMPLED) {
Rhyme 0:0b6732b53bf4 180 _error_count = 0 ;
Rhyme 0:0b6732b53bf4 181 }
Rhyme 0:0b6732b53bf4 182 result = deliver() ;
Rhyme 0:0b6732b53bf4 183 if (result) {
Rhyme 0:0b6732b53bf4 184 _status = EDGE_SENSOR_DELIVERED ; // EDGE_SENSOR_INACTIVE ;
Rhyme 0:0b6732b53bf4 185 } else {
Rhyme 0:0b6732b53bf4 186 _error_count++ ;
Rhyme 0:0b6732b53bf4 187 }
Rhyme 0:0b6732b53bf4 188
Rhyme 0:0b6732b53bf4 189 _prev_status = EDGE_SENSOR_SAMPLED ;
Rhyme 0:0b6732b53bf4 190 break ;
Rhyme 0:0b6732b53bf4 191 case EDGE_SENSOR_DELIVERED:
Rhyme 0:0b6732b53bf4 192 show() ;
Rhyme 0:0b6732b53bf4 193 _status = EDGE_SENSOR_WAIT ;
Rhyme 0:0b6732b53bf4 194 _prev_status = EDGE_SENSOR_DELIVERED ;
Rhyme 0:0b6732b53bf4 195 break ;
Rhyme 0:0b6732b53bf4 196 }
Rhyme 0:0b6732b53bf4 197 reset_watch_dog() ;
Rhyme 0:0b6732b53bf4 198 return(_status) ;
Rhyme 0:0b6732b53bf4 199 }
Rhyme 0:0b6732b53bf4 200