2020年11月23日月曜日

M5Stack Challenge Wiper





//WiperFinalM5STACK
//by Kim Grossa
//How to use
//ButtonA wiper low
//ButtonB wiper stop
//ButtonC wiper high
//Thanks to 日記とか、工作記録とか
//Thanks to Pic World
//Thanks to VScodeでM5stackを遊ぶ


#include <M5Stack.h>

const int btnApin=39;
const int btnBpin=38;
const int btnCpin=37;

bool flagA=false;
bool flagB=false;
bool flagC=false;

int led1=16;
int t1=50;  //Low
int t2=10; //High
int t3=5000; //Stop

const double myHz =50;
const int mylevel=16;

String str11="Wiper";
String str12="by Kim Grossa";
String str13="BtnA Low";
String str14="BtnB Stop";
String str15="BtnC High";
String str16="Enjoy!";

static const int servoPin = 16;

static void buttonA_isr()
{
  flagA=true;
}

static void buttonB_isr()
{
  flagB=true;
}

static void buttonC_isr()
{
  flagC=true;
}

void setup() 
{
  M5.begin();
  M5.Power.begin();
  Serial.begin(115200);
  pinMode(led1,OUTPUT);
  ledcSetup(1,myHz,mylevel);
  ledcAttachPin(led1,1);

  M5.Lcd.setTextSize(3);
  M5.Lcd.setCursor(0,0);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.println(str11);
  M5.Lcd.println(str12);
  M5.Lcd.println("");
  M5.Lcd.println(str13);
  M5.Lcd.println(str14);
  M5.Lcd.println(str15);
  M5.Lcd.println("");
  M5.Lcd.println(str16); 

  pinMode(btnApin,INPUT);
  pinMode(btnBpin,INPUT);
  pinMode(btnCpin,INPUT);

  attachInterrupt(digitalPinToInterrupt(btnApin),buttonA_isr,FALLING);
  attachInterrupt(digitalPinToInterrupt(btnBpin),buttonB_isr,FALLING);
  attachInterrupt(digitalPinToInterrupt(btnCpin),buttonC_isr,FALLING);

  delay(500);
}

void loop() 
{
  M5.update();

  if(flagA)
  {
    flagC=false;
    wipermove(t1); 
  }

  if(flagB)
  {
    flagA=false;
    flagC=false;
    flagB=false;
  }

  if(flagC) 
  { 
    flagA=false;  
    wipermove(t2);
  }

  delay(50);

}

int wipermove(int wtime)
  {
    for (int i=2300;i<=9000;i=i+100)
    {
      ledcWrite(1,i);
      delay(wtime);
    }
   
   for (int i=9000;i>2300;i=i-100)
   {
      ledcWrite(1,i);
      delay(wtime);
   }  
  }




 

M5Stack Challenge ShanghaiSubway







 //ShanghaiSubwayM5STACKFinal

//by Kim Grossa

//How to use

//ButtonA The train runs counterclockwize

//ButtonB Reset M5STACK

//ButtonC The train runs clockwize

//Run this softwarte connectiong to PC

//Run Battery-only makes misses sometime


#include <M5Stack.h>


int st1=3;

int st2=5;

int st3=2;

int st4=17;

int st5=16;

int st6=19;


int t1=2000;

int t2=200;

int t3=1000;

int ct=3;


String str11="Shanghai Subway";

String str12="by Kim Grossa";

String str13="BtnA CClockwize";

String str14="BtnB Reset";

String str15="BtnC Clockwize";

String str16="Enjoy!";

String str17="Run this software";

String str18="Conneting to PC";


String str1="Zongshan Park";

String str2="Jingsu Park";

String str3="Jing'ran Temple";

String str4="West Nanjing Rd.";

String str5="People's Square";

String str6 ="East Nanjing Rd.";

String strnow="Now";

String strnext="Next";


void setup() 

{

  M5.begin();

  M5.Power.begin();

  pinMode(st1,OUTPUT);

  pinMode(st2,OUTPUT);

  pinMode(st3,OUTPUT);

  pinMode(st4,OUTPUT);

  pinMode(st5,OUTPUT);

  pinMode(st6,OUTPUT);  


  M5.Lcd.setTextSize(3);

  M5.Lcd.setCursor(0,0);

  M5.Lcd.fillScreen(BLACK);

  M5.Lcd.println(str11);

  M5.Lcd.println(str12);

  M5.Lcd.println(str17);

  M5.Lcd.println(str18); 

  M5.Lcd.println("");

  M5.Lcd.println(str13);

  M5.Lcd.println(str14);

  M5.Lcd.println(str15);

  M5.Lcd.println("");

  M5.Lcd.println(str16); 

  

}


void loop() 

{

  if(M5.BtnA.wasPressed())

  {

    runCCW();

  }

  

  if(M5.BtnB.wasPressed())

  {

    esp_restart();

  }

  

  if(M5.BtnC.wasPressed())

  {

    runCW();  

  }

    M5.update();

}

 

void runCW()

  {

    M5.Lcd.fillScreen(BLACK);  //Now station1

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str1);

    digitalWrite(st1,HIGH);

    delay(t1);

    

    M5.Lcd.fillScreen(BLACK);  //Go for station2

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str2);

    digitalWrite(st1,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st2,HIGH);

      delay(t2);

      digitalWrite(st2,LOW);

      delay(t2);

    }

    delay(t3);

    

    M5.Lcd.fillScreen(BLACK);  //Now station2

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str2);

    digitalWrite(st2,HIGH);

    delay(t1);


    M5.Lcd.fillScreen(BLACK);  //Go for station3

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str3);

    digitalWrite(st2,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st3,HIGH);

      delay(t2);

      digitalWrite(st3,LOW);

      delay(t2);

    }

    delay(t3);



    M5.Lcd.fillScreen(BLACK);  //Now station3

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str3);

    digitalWrite(st3,HIGH);

    delay(t1);


    M5.Lcd.fillScreen(BLACK);  //Go for station4

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str4);

    digitalWrite(st3,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st4,HIGH);

      delay(t2);

      digitalWrite(st4,LOW);

      delay(t2);

    }

    delay(t3);

    

    M5.Lcd.fillScreen(BLACK);  //Now station4

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str4);

    digitalWrite(st4,HIGH);

    delay(t1);


    M5.Lcd.fillScreen(BLACK);  //Go for station5

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str5);

    digitalWrite(st4,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st5,HIGH);

      delay(t2);

      digitalWrite(st5,LOW);

      delay(t2);

    }

    delay(t3);

    

    M5.Lcd.fillScreen(BLACK);  //Now station5

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str5);

    digitalWrite(st5,HIGH);

    delay(t1);


    M5.Lcd.fillScreen(BLACK);  //Go for station6

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str6);

    digitalWrite(st5,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st6,HIGH);

      delay(t2);

      digitalWrite(st6,LOW);

      delay(t2);

    }

    delay(t3);

    

    M5.Lcd.fillScreen(BLACK);  //Now station6

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str6); 

    digitalWrite(st6,HIGH);

    delay(t1);


    M5.Lcd.fillScreen(BLACK);  //Go for station1

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str1);

    digitalWrite(st6,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st1,HIGH);

      delay(t2);

      digitalWrite(st1,LOW);

      delay(t2);

    }

    delay(t3);


    M5.Lcd.fillScreen(BLACK);  //Now station1

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str1);  

    digitalWrite(st1,HIGH);

    delay(t1);

    

    M5.Lcd.fillScreen(BLACK);  //One cycle end

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println("Arrived at the last station");

    M5.Lcd.println("");

    M5.Lcd.println(str13);

    M5.Lcd.println(str14);

    M5.Lcd.println(str15);

    

    digitalWrite(st1,LOW);      

  }


  void runCCW()

  {

    M5.Lcd.fillScreen(BLACK);  //Now station1

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str1);

    digitalWrite(st1,HIGH);

    delay(t1);

    

    M5.Lcd.fillScreen(BLACK);  //Go for station6

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str6);

    digitalWrite(st1,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st6,HIGH);

      delay(t2);

      digitalWrite(st6,LOW);

      delay(t2);

    }

    delay(t3);

    

    M5.Lcd.fillScreen(BLACK);  //Now station6

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str6);

    digitalWrite(st6,HIGH);

    delay(t1);


    M5.Lcd.fillScreen(BLACK);  //Go for station5

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str5);

    digitalWrite(st6,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st5,HIGH);

      delay(t2);

      digitalWrite(st5,LOW);

      delay(t2);

    }

    delay(t3);



    M5.Lcd.fillScreen(BLACK);  //Now station5

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str5);

    digitalWrite(st5,HIGH);

    delay(t1);


    M5.Lcd.fillScreen(BLACK);  //Go for station4

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str4);

    digitalWrite(st5,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st4,HIGH);

      delay(t2);

      digitalWrite(st4,LOW);

      delay(t2);

    }

    delay(t3);

    

    M5.Lcd.fillScreen(BLACK);  //Now station4

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str4);

    digitalWrite(st4,HIGH);

    delay(t1);


    M5.Lcd.fillScreen(BLACK);  //Go for station3

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str3);

    digitalWrite(st4,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st3,HIGH);

      delay(t2);

      digitalWrite(st3,LOW);

      delay(t2);

    }

    delay(t3);

    

    M5.Lcd.fillScreen(BLACK);  //Now station3

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str3);

    digitalWrite(st3,HIGH);

    delay(t1);


    M5.Lcd.fillScreen(BLACK);  //Go for station2

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str2);

    digitalWrite(st3,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st2,HIGH);

      delay(t2);

      digitalWrite(st2,LOW);

      delay(t2);

    }

    delay(t3);

    

    M5.Lcd.fillScreen(BLACK);  //Now station2

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str2); 

    digitalWrite(st2,HIGH);

    delay(t1);


    M5.Lcd.fillScreen(BLACK);  //Go for station1

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnext);

    M5.Lcd.println(str1);

    digitalWrite(st2,LOW);

    for(int i=0;i<ct;i=i+1)

    {

      digitalWrite(st1,HIGH);

      delay(t2);

      digitalWrite(st1,LOW);

      delay(t2);

    }

    delay(t3);


    M5.Lcd.fillScreen(BLACK);  //Now station1

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println(strnow);

    M5.Lcd.println(str1);  

    digitalWrite(st1,HIGH);

    delay(t1);

    

    M5.Lcd.fillScreen(BLACK);  //One cycle end

    M5.Lcd.setCursor(0,0);

    M5.Lcd.println("Arrived at the last station");

    M5.Lcd.println("");

    M5.Lcd.println(str13);

    M5.Lcd.println(str14);

    M5.Lcd.println(str15);

    

    digitalWrite(st1,LOW);      

  }

  

M5Stack Challenge Lottery




 //Lottery Final M5STACK

//by Kim Grossa

//How to use

//1  Press the A button

//2  Five leds start to light on and ligtt off 

//3  Long press the A button again

//4  One led is on at random

//Thanks to ymoriblog


#include <M5Stack.h>

int GreenLed=3;

int YellowLed=16;

int RedLed=17;

int BlueLed=2;

int WhiteLed=5;

int t1=50;

int val1=0;

int oldval1=0;

int state1=-1;


long number=0;


String str11="Lottery";

String str12="by Kim Grossa";

String str13="Press btnC";

String str14="Rotation starts";

String str15="Long press btnC ";

String str16="Rotation stops";

String str17="Enjoy!";


void setup() 

{

  M5.begin();

  M5.Power.begin();

  pinMode(GreenLed,OUTPUT);

  pinMode(YellowLed,OUTPUT);

  pinMode(RedLed,OUTPUT);

  pinMode(BlueLed,OUTPUT);

  pinMode(WhiteLed,OUTPUT);

  

  M5.Lcd.setTextSize(3);

  M5.Lcd.setCursor(0,0);

  M5.Lcd.fillScreen(BLACK);

  M5.Lcd.println(str11);

  M5.Lcd.println(str12); 

  M5.Lcd.println("");

  M5.Lcd.println(str13);

  M5.Lcd.println(str14);

  M5.Lcd.println(str15);

  M5.Lcd.println(str16);

  M5.Lcd.println("");

  M5.Lcd.println(str17); 

  digitalWrite(GreenLed,LOW);

  digitalWrite(YellowLed,LOW);

  digitalWrite(RedLed,LOW);

  digitalWrite(BlueLed,LOW);

  digitalWrite(WhiteLed,LOW);

}


void loop() 

{

  M5.update();


  if((M5.BtnC.wasPressed())&&(!oldval1))

  {

    if(state1==1)

    {

      state1=0;

    }

    else

    {

      state1=1;

    }    

    delay(10);

    oldval1=val1;

    number =random(1,6);  

  }

  

  if(state1==1)

  {

    startrotate();

  }

  

  else if(state1==-1)

  {

    alloff();

  }

  else

  {

    bingo();

  }

 

}

 

void startrotate()

  {

    digitalWrite(GreenLed,HIGH);  

    delay(t1);

    digitalWrite(GreenLed,LOW);

    delay(t1);  

    digitalWrite(YellowLed,HIGH);  

    delay(t1);

    digitalWrite(YellowLed,LOW);

    delay(t1); 

    digitalWrite(RedLed,HIGH);  

    delay(t1);

    digitalWrite(RedLed,LOW);

    delay(t1); 

    digitalWrite(BlueLed,HIGH);  

    delay(t1);

    digitalWrite(BlueLed,LOW);

    delay(t1); 

    digitalWrite(WhiteLed,HIGH);  

    delay(t1);

    digitalWrite(WhiteLed,LOW);

    delay(t1);   

  }

  

  void alloff()

  {

    digitalWrite(GreenLed,LOW); 

    digitalWrite(YellowLed,LOW);

    digitalWrite(RedLed,LOW);

    digitalWrite(BlueLed,LOW);

    digitalWrite(WhiteLed,LOW); 

  }


  void bingo()

  {

    switch(number)

    {

      case 1:

        digitalWrite(GreenLed,HIGH);

        break;

      case 2:

        digitalWrite(YellowLed,HIGH);

        break;

      case 3:

        digitalWrite(RedLed,HIGH);

        break;

      case 4:

        digitalWrite(BlueLed,HIGH);

        break;

      case 5:

        digitalWrite(WhiteLed,HIGH);

        break;

    }

    

  }



  

  

2020年11月3日火曜日

Arduino試験板2




 
//WiperFinal
//How to use
//SW1 On SW2 On rotates quickly works well
//SW1 On SW2 Off rotates slowly doesn't works properly
//SW1 Off stop works well

//Wiper
#include <VarSpeedServo.h>
VarSpeedServo myservo;

void setup() 
{
  //Wiper
  pinMode(10,INPUT);
  pinMode(11,INPUT);
  myservo.attach(9);
}

void loop() 
{  
  //Wiper
  if((digitalRead(10))&&(!digitalRead(11)))
  {
    slow();   
  }

  if((digitalRead(10))&&(digitalRead(11)))
  {
    fast();   
  }  
}

void slow()
{
 myservo.write(20,50,true);
 myservo.write(130,50,true);  
}

void fast()
{
  myservo.write(20,180,true);
  myservo.write(130,180,true);  
}

//LotteryFinal
//How to use
//PB1 on rotates
//PB2 on stop
//PB1 re-on not work push the reset button(Arduino)

//Lottery
#include <AccelStepper.h>
AccelStepper stepper=AccelStepper(8,5,7,6,8);

int val1=0;
int old_val1=0;
int state1=0;
int val2=0;
int old_val2=0;
int state2=0;

void setup() 
  //Lottery 
  pinMode(3,INPUT);
  pinMode(4,INPUT);
  stepper.setMaxSpeed(1000);
}

void loop() 
  //Lottery
  val1=digitalRead(3);
  if((val1)&&(!old_val1))
  {
    state1=1-state1;
  }
  old_val1=val1;

  if(state1)
  {
    stepper.setSpeed(1000);
    stepper.runSpeed();
  }

  val2=digitalRead(4);
  if((val2)&&(!old_val2))
  {
    state2=1-state2;
  }
  old_val2=val2;

  if(state2)
  {
    stepper.stop();
    stepper.runToPosition(); 
  } 
}