2020年4月12日日曜日

Arduino Challenge10






//BeltConveyor1
//2020/03/29 Start
//2020/04/11 Up

int In1=9;
int In2=10;
int In3=11;
int In4=12;
int PBS1=6;
int PBS2=7;
int PBS3=8;
int LED1=14;
int LED2=15;
int LED3=16;
int FLimit;
int RLimit;

void setup() 
{
  pinMode(In1,OUTPUT);
  pinMode(In2,OUTPUT);
  pinMode(In3,OUTPUT);
  pinMode(In4,OUTPUT);
  pinMode(PBS1,INPUT);
  pinMode(PBS2,INPUT);
  pinMode(PBS3,INPUT); 
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(LED3,OUTPUT); 

  pinMode(2,INPUT);

  digitalWrite(In3,LOW);
  digitalWrite(In4,LOW);
  digitalWrite(LED1,LOW); 
  digitalWrite(LED2,HIGH);
  digitalWrite(LED3,LOW);

  attachInterrupt(0,FLimitOn,RISING);
  attachInterrupt(1,RLimitOn,RISING);
}

void loop() 
{
  FLimit=digitalRead(2);
  RLimit=digitalRead(3);
  
  if(digitalRead(PBS1)==HIGH && FLimit== LOW)
    {
      digitalWrite(In1,HIGH); 
      digitalWrite(In2,HIGH);
      digitalWrite(In3,HIGH);
      digitalWrite(In4,HIGH);
      digitalWrite(LED1,HIGH); 
      digitalWrite(LED2,LOW);
      digitalWrite(LED3,LOW); 
    }

  if(digitalRead(PBS2)==HIGH)
    {
      digitalWrite(In3,LOW);
      digitalWrite(In4,LOW); 
      digitalWrite(LED1,LOW); 
      digitalWrite(LED2,HIGH);
      digitalWrite(LED3,LOW);
    }
  
  if(digitalRead(PBS3)==HIGH && RLimit == LOW)
    {
      digitalWrite(In1,LOW);
      digitalWrite(In2,LOW);
      digitalWrite(In3,HIGH);
      digitalWrite(In4,HIGH);
      digitalWrite(LED1,LOW);
      digitalWrite(LED2,LOW); 
      digitalWrite(LED3,HIGH);
    }
    
}

void FLimitOn()
{
    digitalWrite(In3,LOW);
    digitalWrite(In4,LOW); 
    digitalWrite(LED1,LOW); 
    digitalWrite(LED2,HIGH);
    digitalWrite(LED3,LOW);
}

void RLimitOn()
{
    digitalWrite(In3,LOW);
    digitalWrite(In4,LOW); 
    digitalWrite(LED1,LOW); 
    digitalWrite(LED2,HIGH);
    digitalWrite(LED3,LOW);
}



Arduino Challenge09





//RobotCarMeimei7_2DCMotorsWizUltrasonic
//Start 2020/03/08
//Up 2020/03/08

int E1=6;  //Left wheel
int M1=7;
int E2=5;  //Right wheel 
int M2=4;

int TriggerPin1=8;
int EchoPin1=9;
double Duration1;
double Distance1;

boolean OnFlg=false;

void Forward()
{
  digitalWrite(M1,HIGH);
  digitalWrite(M2,LOW);
  analogWrite(E1,250);
  analogWrite(E2,250);
}

void Back()
{
  digitalWrite(M1,LOW);
  digitalWrite(M2,HIGH);
  analogWrite(E1,250);
  analogWrite(E2,250);
}

void Stop()
{
  digitalWrite(M1,LOW);
  digitalWrite(M2,HIGH);
  analogWrite(E1,0);
  analogWrite(E2,0);
}

void TurnRight()
{
  digitalWrite(M1,HIGH);
  digitalWrite(M2,LOW);
  analogWrite(E1,250);
  analogWrite(E2,150);
}

void TurnLeft()
{
  digitalWrite(M1,HIGH);
  digitalWrite(M2,LOW);
  analogWrite(E1,150);
  analogWrite(E2,250);
}

void QuickTurnRight()
{
  digitalWrite(M1,HIGH);
  digitalWrite(M2,HIGH);
  analogWrite(E1,250);
  analogWrite(E2,250);
}

void QuickTurnLeft()
{
  digitalWrite(M1,LOW);
  digitalWrite(M2,LOW);
  analogWrite(E1,250);
  analogWrite(E2,250);
}

void setup()
{
  pinMode(M1,OUTPUT);
  pinMode(M2,OUTPUT);

  pinMode(TriggerPin1,OUTPUT);
  pinMode(EchoPin1,INPUT);
}

void loop() 
{
  digitalWrite(TriggerPin1,LOW);
  delayMicroseconds(2);
  digitalWrite(TriggerPin1,HIGH);
  delayMicroseconds(10);
  digitalWrite(TriggerPin1,LOW);
  Duration1=pulseIn(EchoPin1,HIGH); 
  if (Duration1 > 0 )
  {
    Duration1=Duration1 /2;
    Distance1=Duration1 *340 *100 /1000000;
    if (Distance1 >= 30)
      {
        if(!OnFlg)
        {
          Forward();
          OnFlg=true;
        }
      }
      else
      {
        OnFlg=false;
        Stop();
        delay(200);
        Back();
        delay(1000);
        QuickTurnLeft();
        delay(1000);
        Forward();       
      }
    }
  delay(200);  
}

Arduino Challenge08










 //RobotCarMeimei6_4ServoMotors_FTMC_004
//Start 2020/02/16
//Up 2020/02/23
#include <Servo.h>
#include <IRremote.h>

int RSpeed ;
int LSpeed;
int RecvPin=2;

int RedPin1=3;
int BluePin1=5;
int GreenPin1=6;
int RedPin2=9;
int BluePin2=10;
int GreenPin2=11;

Servo RServo;
Servo LServo;

IRrecv irrecv(RecvPin);
decode_results results;


void Forward()
{
  RServo.writeMicroseconds(2000);
  LServo.writeMicroseconds(-2000);
}

void Back()
{
  RServo.writeMicroseconds(-2000);
  LServo.writeMicroseconds(2000);
}

void Stop()
{
  RServo.write(90);
  LServo.write(90);
  //RServo.writeMicroseconds(0);  //Does not work
  //LServo.writeMicroseconds(0);  //Does not work 
}

void TurnRight()
{
  LServo.writeMicroseconds(-2000);
  RServo.write(90);
  delay(100);
  Stop();
}

void TurnLeft()  //At value=1600 Does not work well
{
  RServo.writeMicroseconds(2000);
  LServo.write(90); 
  delay(100);
  Stop();
}

void QuickTurnRight()
{
   LServo.writeMicroseconds(-2000);
   RServo.writeMicroseconds(-2000);
   delay(100);
   Stop();
}

void QuickTurnLeft()
{
   LServo.writeMicroseconds(2000);
   RServo.writeMicroseconds(2000);
   delay(100);
   Stop();
}

void NightLightOff()
{
  analogWrite(RedPin1,255);
  analogWrite(BluePin1,255);
  analogWrite(GreenPin1,255);
  analogWrite(RedPin2,255);
  analogWrite(BluePin2,255);
  analogWrite(GreenPin2,255);
}

void NightLightOn()
{
  analogWrite(RedPin1,0);
  analogWrite(BluePin1,0);
  analogWrite(GreenPin1,0);
  analogWrite(RedPin2,0);
  analogWrite(BluePin2,0);
  analogWrite(GreenPin2,0);
}

void LeftTurnLightOn()
{
  for(int i=0;i<5;i++)
  {
    analogWrite(RedPin2,0);
    analogWrite(BluePin2,255);
    analogWrite(GreenPin2,255);
    delay(500);
    analogWrite(RedPin2,255);
    analogWrite(BluePin2,255);
    analogWrite(GreenPin2,255);
    delay(500);
  }
}

void RightTurnLightOn()
{
  for(int i=0;i<5;i++)
  {
    analogWrite(RedPin1,0);
    analogWrite(BluePin1,255);
    analogWrite(GreenPin1,255);
    delay(500);
    analogWrite(RedPin1,255);
    analogWrite(BluePin1,255);
    analogWrite(GreenPin1,255);
    delay(500);
  }
}

void HazardLampOn()
{
  for(int i=0;i<10;i++)
  {
    analogWrite(RedPin1,0);
    analogWrite(BluePin1,255);
    analogWrite(GreenPin1,255);
    analogWrite(RedPin2,0);
    analogWrite(BluePin2,255);
    analogWrite(GreenPin2,255);
    delay(200);
    analogWrite(RedPin1,255);
    analogWrite(BluePin1,255);
    analogWrite(GreenPin1,255);
    analogWrite(RedPin2,255);
    analogWrite(BluePin2,255);
    analogWrite(GreenPin2,255);
    delay(200);
  }
}

void setup() 
{
  RServo.attach(14,1000,2000); //Port(A0),Min,Max Do not Change Min,Max
  LServo.attach(15,1000,2000); //Port(A1),Min,Max Do not Change Min,Max
  irrecv.enableIRIn();  //IR
}

void loop() 
{
  if (irrecv.decode(&results))
  {
    irrecv.resume();
    if (results.value == 0xFF629D)
    {
      Forward();
    }
    
    if (results.value == 0xFF02FD)
    {
      Stop();
    }
    
    if (results.value == 0xFFA857)
    {
      Back();
    }
    
    if (results.value == 0xFFE21D)
    {
      TurnRight();        
    }

    if (results.value == 0xFFA25D)
    {
      TurnLeft();             
    }

    if (results.value == 0xFFC23D)
    {
      QuickTurnRight();        
    }

    if (results.value == 0xFF22DD)
    {
      QuickTurnLeft();        
    }

    if (results.value == 0xFFB04F)
    {
      NightLightOn();       
    }

    if (results.value == 0xFF9867)
    {
      NightLightOff();    
    }

    if (results.value == 0xFF6897)
    {
       HazardLampOn();   
    }

    if (results.value == 0xFF906F)
    {
       RightTurnLightOn();  
    }

    if (results.value == 0xFFE01F)
    {
       LeftTurnLightOn();
    }

  }

}