C++温湿度計
適当な温度を境に光るLEDを切り替えるプログラムを作りなさい
/******************************************************************************************** *Filename : humcolor.cpp *Description : make a thermometer *Author : Alan *Website : www.osoyoo.com *Update : 2017/07/06 ********************************************************************************************/ #include <wiringPi.h> #include <iostream> #include <iomanip> #include <signal.h> using namespace std; #define MAXTIMINGS 85 #define DHTPIN 4 //DHT connect to TxD->GPIO4 int dht11_dat[5] ={0,0,0,0,0};//store DHT11 data void read_dht11_dat(); void print_info(); void humi_color(int a); void signal_handler(int a); int P_WHITE = 5; int P_GREEN = 6; int P_RED = 13; void signal_handler(int signal) { if (signal == SIGINT) { humi_color(0); exit(EXIT_FAILURE); } } void humi_color(int a) { if (a > 80) { digitalWrite(P_WHITE, LOW); digitalWrite(P_GREEN, LOW); digitalWrite(P_RED, HIGH); } else if (a > 70) { digitalWrite(P_WHITE, LOW); digitalWrite(P_GREEN, HIGH); digitalWrite(P_RED, LOW); } else if (a > 60 ) { digitalWrite(P_WHITE, HIGH); digitalWrite(P_GREEN, LOW); digitalWrite(P_RED, LOW); } else { digitalWrite(P_WHITE, LOW); digitalWrite(P_GREEN, LOW); digitalWrite(P_RED, LOW); } } void read_dht11_dat() { unsigned int laststate = HIGH; unsigned int counter = 0; unsigned int j = 0,i; float f;//fahrenheit dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0; //pull pin down to send start signal pinMode( DHTPIN, OUTPUT ); digitalWrite( DHTPIN, LOW ); delay( 18 ); //pull pin up and wait for sensor response digitalWrite( DHTPIN, HIGH ); delayMicroseconds( 40 ); //prepare to read the pin pinMode( DHTPIN, INPUT ); //detect change and read data for ( i = 0; i < MAXTIMINGS; i++ ) { counter = 0; while ( digitalRead( DHTPIN ) == laststate ) { counter++; delayMicroseconds( 2 );//1->2 if ( counter == 255 ) { break; } } laststate = digitalRead( DHTPIN ); if ( counter == 255 ) break; //ignore first 3 transitions if ( (i >= 4) && (i % 2 == 0) ) { //shove each bit into the storage bytes dht11_dat[j / 8] <<= 1; if ( counter > 16 ) dht11_dat[j / 8] |= 1; j++; } } //check we read 40 bits(8bit x 5) +verify checksum in the last byte //print it out if data is good if ( (j >= 40) && (dht11_dat[4] == ( (dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3]) & 0xFF) ) ) { f = dht11_dat[2] * 9. / 5. + 32; cout << "Humidity = " << dec << dht11_dat[0] << "." << dec << dht11_dat[1] << "% Temperature = " << dec << dht11_dat[2] << "." << dec << dht11_dat[3] << "C (" << fixed << setprecision(1) << f << " F)\n"; humi_color(dht11_dat[0]); } else { cout << "Data not good, skip\n"; cout << "[0]=" << hex << dht11_dat[0] << endl; cout << "[1]=" << hex << dht11_dat[1] << endl; cout << "[2]=" << hex << dht11_dat[2] << endl; cout << "[3]=" << hex << dht11_dat[3] << endl; } } void print_info() { cout << "\n"; cout << "|***************************|\n"; cout << "| DHT11 test |\n"; cout << "| --------------------------|\n"; cout << "| DHT11 connect to GPIO4 |\n"; cout << "| --------------------------|\n"; cout << "| OSOYOO|\n"; cout << "|***************************|\n"; cout << "Program is running...\n"; cout << "Press Ctrl+C to end the program\n"; } int main( ) { if ( wiringPiSetupGpio() == -1 ) { cout << "Can't init wiringPi\n"; exit(EXIT_FAILURE); } print_info(); //Color LED init pinMode( P_WHITE, OUTPUT); pinMode( P_GREEN, OUTPUT); pinMode( P_RED, OUTPUT); digitalWrite(P_WHITE, LOW); digitalWrite(P_GREEN, LOW); digitalWrite(P_RED, LOW); // signal handler if (signal(SIGINT,signal_handler)==SIG_ERR) cout << "signal error"; while ( 1 ) { read_dht11_dat(); delay(1000);//wait ls to refresh } return(0); }
息を吹きかけるなどして温度を変化させてLEDを切り替えてください