| 
					 dc모터의 속도를 128이하로 떨어트리기만 하면 모터가 동작하지 않는데 어떻게 바꿔야 속도80으로 모터가 돌아가나요!ㅜㅜ 
  
  
  
#include <SoftwareSerial.h> 
#include <Servo.h> 
//bluetooth 
#define BT_TXD 2 
#define BT_RXD 3 
SoftwareSerial BTSerial(BT_TXD, BT_RXD); 
// dust_sensor 
int pin = 7; 
unsigned long duration; 
unsigned long starttime; 
unsigned long sampletime_ms = 30000;//sampe 30s ; 
unsigned long lowpulseoccupancy = 0; 
float pcsPerCF = 0; 
float ugm3 = 0; 
float ratio = 0; 
float concentration = 0; 
// servo_motor 
int servoPin = 6;  
Servo servo;    
int angle = 0; // servo position in degrees 
////////////////////////////////////////// 
void setup()  
{ 
  // bluetooth__dust_sensor 
  Serial.begin(9600); 
  BTSerial.begin(9600); 
  pinMode(7, INPUT); 
  starttime = millis();//get the current time; 
  // rainsensor 
  pinMode(4, OUTPUT); 
  // servo_motor 
  servo.attach(servoPin);  
  // dc_motor 
   pinMode(8, OUTPUT);//right 
   pinMode(9, OUTPUT);//inverse 
} 
//////////////////////////////////////////// 
void loop()  
  { 
  // bluetooth to signal monitor   
  if(BTSerial.available()) 
  { 
    Serial.write(BTSerial.read());     
  } 
  // signal monitor to bluetooth 
  if(Serial.available()) 
  { 
    BTSerial.write(Serial.read()); 
  } 
    
  // dust_sensor 
  duration = pulseIn(pin, LOW); 
  lowpulseoccupancy = lowpulseoccupancy + duration; 
  if ((millis() - starttime) > sampletime_ms) //if the sampel time == 30s 
  { 
    ratio = lowpulseoccupancy / (sampletime_ms * 10.0); // Integer percentage 0=>100 
    concentration = 1.1 * pow(ratio, 3) - 3.8 * pow(ratio, 2) + 520 * ratio + 0.62; // using spec sheet curve 
    pcsPerCF = concentration * 100; 
    ugm3 = pcsPerCF / 13000; 
    Serial.println("   "); // enter empty space 
    Serial.print(ugm3); // ugm3 data output 
    lowpulseoccupancy = 0; 
    starttime = millis(); 
  } 
 
if(BTSerial.available()) 
{ 
  char data=BTSerial.read(); 
  Serial.write(data); 
  if(data=='1') //closed 
  { 
    angle = 85; 
    servo.write(angle);  
    delay(50); 
    digitalWrite(8, HIGH); 
    digitalWrite(9, LOW); 
    analogWrite(10, 100); 
     delay(10000); 
  } 
   
  else if(data=='0') //open! 
  { 
    digitalWrite(8, HIGH); 
    digitalWrite(9, LOW); 
    analogWrite(10, 100); 
    delay(10000); 
    angle = 0; 
    servo.write(angle);  
    delay(10000); 
  } 
  if (Serial.available())  BTSerial.write(Serial.read()); 
  } 
if(analogRead(0)>500 & angle==0) // 1st 
// no rain (open!! make window closed or stay_ following dust) 
{ 
    // no rain 
    Serial.println("nr"); 
    BTSerial.print("nr");//signal 
    if (ugm3>30) 
   { 
    digitalWrite(8, HIGH); 
    digitalWrite(9, LOW); 
    analogWrite(10, 60); 
    delay(10000);//window closed 
    angle = 85; 
    servo.write(angle);  
    delay(50);  
    // very bad dust (make window closed) 
    if (ugm3>80)  
    { 
     Serial.println("bd"); 
     BTSerial.print("bd"); 
     delay(50); 
     }  
     // bad dust (make window closed) 
     else  
     { 
     Serial.println("nd"); 
     BTSerial.print("nd"); 
     delay(50); 
     } 
   } 
   // good dust (keep open) 
    else  
    { 
    Serial.println("gd"); 
    BTSerial.print("gd"); 
    angle = 0; 
    servo.write(angle);  
    delay(50); 
    } 
} 
 
else if(analogRead(0)>500 & angle==85) // 2nd 
// no rain (closed!! make window stay or open_ following dust) 
{ 
   // no rain 
   Serial.println("nr"); 
   BTSerial.print("nr"); 
   // very bad dust (Keep window closed) 
   if (ugm3>80)  
   { 
    Serial.println("bd"); 
    BTSerial.print("bd"); 
    delay(50); 
     
    angle = 85; 
    servo.write(angle);  
    delay(50);  
    }  
  // bad dust (keep window closed) 
  else if(ugm3>30) 
  { 
    Serial.println("nd"); 
    BTSerial.print("nd"); 
    delay(50); 
     
    angle = 85; 
    servo.write(angle);  
    delay(50); 
  } 
  // good dust (make window opened) 
  else  
  { 
   Serial.println("gd"); 
   BTSerial.print("gd"); 
    
   angle = 0; 
   servo.write(angle);  
   delay(50); 
   digitalWrite(8, LOW); 
   digitalWrite(9, HIGH); 
   analogWrite(10, 60); 
   delay(10000); 
  } 
} 
  
else if(analogRead(0)<=500 & angle==85) // 3rd_ rain! (window closed_ not open) 
{ 
   if(analogRead(0)<300)   // heavy rain 
   { 
   Serial.println("hr"); 
   BTSerial.print("hr"); 
   delay(50); 
   } 
   else   // normal rain 
   { 
   Serial.println("nr"); 
   BTSerial.print("nr"); 
   delay(50); 
   } 
   
   Serial.println("gd"); 
   BTSerial.print("gd"); 
} 
   
else if(analogRead(0)<=500 & angle==0) // final_ rain! (window open_ make closed) 
{ 
    digitalWrite(8, HIGH); 
    digitalWrite(9, LOW); 
    analogWrite(10, 60); 
    delay(10000);//window closed 
     
    angle = 85; 
    servo.write(angle);  
    delay(50);  
   if(analogRead(0)<300)   // heavy rain 
   { 
   Serial.println("hr"); 
   BTSerial.print("hr"); 
   delay(50); 
   } 
   else   // normal rain 
   { 
   Serial.println("nr"); 
   BTSerial.print("nr"); 
   delay(50); 
   } 
   
   Serial.println("gd"); 
   BTSerial.print("gd"); 
} 
					
										
									 |