質問編集履歴
2
文字数がオーバーしてしまうため省略させていただいてました。今文字数が入る分を追加させていただきました、見にくくて申し訳ございません
test
CHANGED
File without changes
|
test
CHANGED
@@ -456,20 +456,308 @@
|
|
456
456
|
|
457
457
|
}
|
458
458
|
|
459
|
-
|
459
|
+
int wait_sec(int waitsec) {//移動時間倍数決定
|
460
|
+
|
460
|
-
|
461
|
+
if (waitsec >= 0 && waitsec < 3259) return(1) ; //32.59%
|
462
|
+
|
463
|
+
if (waitsec >= 3259 && waitsec < 4677) return(2) ; //14.18%
|
464
|
+
|
465
|
+
if (waitsec >= 4677 && waitsec < 5549) return(3) ; //8.72%
|
466
|
+
|
467
|
+
if (waitsec >= 5549 && waitsec < 6166) return(4) ; //6.17%
|
468
|
+
|
469
|
+
if (waitsec >= 6166 && waitsec < 6638) return(5) ; //4.72%
|
470
|
+
|
471
|
+
if (waitsec >= 6638 && waitsec < 7017) return(6) ; //3.79%
|
472
|
+
|
473
|
+
if (waitsec >= 7017 && waitsec < 7332) return(7) ; //3.15%
|
474
|
+
|
475
|
+
if (waitsec >= 7332 && waitsec < 7600) return(8) ; //2.68%
|
476
|
+
|
477
|
+
if (waitsec >= 7600 && waitsec < 7833) return(9) ; //2.33%
|
478
|
+
|
479
|
+
if (waitsec >= 7833 && waitsec < 8038) return(10) ; //2.05%
|
480
|
+
|
481
|
+
if (waitsec >= 8038 && waitsec < 8221) return(11) ; //1.83%
|
482
|
+
|
483
|
+
if (waitsec >= 8221 && waitsec < 8386) return(12) ; //1.65%
|
484
|
+
|
485
|
+
if (waitsec >= 8386 && waitsec < 8536) return(13) ; //1.50%
|
486
|
+
|
487
|
+
if (waitsec >= 8536 && waitsec < 8673) return(14) ; //1.37%
|
488
|
+
|
489
|
+
if (waitsec >= 8673 && waitsec < 8799) return(15) ; //1.26%
|
490
|
+
|
491
|
+
if (waitsec >= 8799 && waitsec < 8916) return(16) ; //1.17%
|
492
|
+
|
493
|
+
if (waitsec >= 8916 && waitsec < 9024) return(17) ; //1.08%
|
494
|
+
|
495
|
+
if (waitsec >= 9024 && waitsec < 9125) return(18) ; //1.01%
|
496
|
+
|
497
|
+
if (waitsec >= 9125 && waitsec < 9220) return(19) ; //0.95%
|
498
|
+
|
499
|
+
if (waitsec >= 9220 && waitsec < 9309) return(20) ; //0.89%
|
500
|
+
|
501
|
+
if (waitsec >= 9309 && waitsec < 9393) return(21) ; //0.84%
|
502
|
+
|
503
|
+
if (waitsec >= 9393 && waitsec < 9472) return(22) ; //0.79%
|
504
|
+
|
505
|
+
if (waitsec >= 9472 && waitsec < 9547) return(23) ; //0.75%
|
506
|
+
|
507
|
+
if (waitsec >= 9547 && waitsec < 9618) return(24) ; //0.71%
|
508
|
+
|
509
|
+
if (waitsec >= 9618 && waitsec < 9686) return(25) ; //0.68%
|
510
|
+
|
511
|
+
if (waitsec >= 9686 && waitsec < 9751) return(26) ; //0.65%
|
512
|
+
|
513
|
+
if (waitsec >= 9751 && waitsec < 9813) return(27) ; //0.62%
|
514
|
+
|
515
|
+
if (waitsec >= 9813 && waitsec < 9872) return(28) ; //0.59%
|
516
|
+
|
517
|
+
if (waitsec >= 9872 && waitsec < 9929) return(29) ; //0.57%
|
518
|
+
|
519
|
+
if (waitsec >= 9929) return(30) ; //0.55%
|
520
|
+
|
521
|
+
return(-1) ;
|
522
|
+
|
461
|
-
|
523
|
+
}
|
524
|
+
|
462
|
-
|
525
|
+
void Random_Walk(int c)//
|
526
|
+
|
527
|
+
{
|
528
|
+
|
529
|
+
const int wait = c; //30 回転
|
530
|
+
|
531
|
+
const int wait2 = 6000;//移動時間基準値
|
532
|
+
|
463
|
-
|
533
|
+
double a,b;
|
534
|
+
|
464
|
-
|
535
|
+
if(rnd_rst==false){//ランダム値決定
|
536
|
+
|
537
|
+
rnd_f =Random_value(9999); //移動距離決定
|
538
|
+
|
539
|
+
rnd_d =Random_value(2); //回転方向決定
|
540
|
+
|
541
|
+
rnd_c =Random_value(3)+1; //回転角度決定
|
542
|
+
|
543
|
+
rnd_rst =true;
|
544
|
+
|
545
|
+
a=wait_sec(rnd_f);
|
546
|
+
|
547
|
+
F_time =wait2 * a ;//
|
548
|
+
|
549
|
+
V_wait = wait * rnd_c;//deg 30 60 90
|
550
|
+
|
551
|
+
}
|
552
|
+
|
553
|
+
if(millis() - before <=V_wait && advancea==0 && rnd_d == 0){//左 30 回転
|
554
|
+
|
555
|
+
Motor_Drive('L');
|
556
|
+
|
557
|
+
Motor_Power(Motor_Out2);
|
558
|
+
|
559
|
+
}
|
560
|
+
|
561
|
+
else if(millis() - before <=V_wait + 2000 && advancea==0 && rnd_d ==0){//前進時
|
562
|
+
|
563
|
+
|
564
|
+
|
565
|
+
advancea=1;
|
566
|
+
|
567
|
+
before=millis();
|
568
|
+
|
465
|
-
|
569
|
+
rnd_rst =false;
|
570
|
+
|
571
|
+
}
|
572
|
+
|
573
|
+
else if(millis() - before <=V_wait && advancea==0 && rnd_d ==1){//右 30 回転
|
574
|
+
|
575
|
+
Motor_Drive('R');
|
576
|
+
|
577
|
+
Motor_Power(Motor_Out2);
|
578
|
+
|
579
|
+
}
|
580
|
+
|
581
|
+
else if(millis() - before <=V_wait + 2000 && advancea==0 && rnd_d ==1){//前進時
|
582
|
+
|
583
|
+
advancea=1;
|
584
|
+
|
585
|
+
before=millis();
|
586
|
+
|
587
|
+
rnd_rst =false;
|
588
|
+
|
589
|
+
}
|
590
|
+
|
591
|
+
//前進
|
592
|
+
|
593
|
+
else if(millis() - before <= F_time && advancea==1){ //直進:障害物軽回避
|
594
|
+
|
595
|
+
stackL=0;
|
596
|
+
|
597
|
+
stackR=0;
|
598
|
+
|
599
|
+
direc=false;
|
600
|
+
|
601
|
+
Motor_Drive('F');
|
602
|
+
|
603
|
+
Motor_Power(Motor_Out);
|
604
|
+
|
605
|
+
}
|
606
|
+
|
607
|
+
//後進
|
608
|
+
|
609
|
+
else if(millis() - before <= F_time && advancea==2){
|
610
|
+
|
611
|
+
stackL=0;
|
612
|
+
|
613
|
+
stackR=0;
|
614
|
+
|
615
|
+
direc=true;
|
616
|
+
|
617
|
+
Motor_Drive('B');
|
618
|
+
|
619
|
+
Motor_Power(Motor_Out);
|
620
|
+
|
621
|
+
}
|
622
|
+
|
623
|
+
//初期化&同期
|
624
|
+
|
625
|
+
else{
|
626
|
+
|
627
|
+
advancea=0;
|
628
|
+
|
629
|
+
before=millis();
|
630
|
+
|
631
|
+
stackL = 0;
|
632
|
+
|
633
|
+
stackR = 0;
|
634
|
+
|
635
|
+
rnd_rst=false;
|
636
|
+
|
637
|
+
}
|
638
|
+
|
639
|
+
return;
|
640
|
+
|
641
|
+
}
|
642
|
+
|
643
|
+
void No_Delay_Avoid(){
|
644
|
+
|
645
|
+
const int wait = 400;//回転時間基準値
|
646
|
+
|
647
|
+
if(rnd_rst2==false){//ランダム値決定
|
648
|
+
|
649
|
+
before3=millis();
|
650
|
+
|
651
|
+
rnd_rst2 =true;
|
652
|
+
|
653
|
+
}
|
654
|
+
|
655
|
+
if(L1_blo==true){//左前方障害物フラグがオンのとき実行
|
656
|
+
|
657
|
+
if(millis()-before3<=wait){
|
658
|
+
|
659
|
+
Motor_Drive('R');
|
660
|
+
|
661
|
+
Motor_Power(Motor_Out2);
|
662
|
+
|
663
|
+
}
|
664
|
+
|
665
|
+
else{
|
666
|
+
|
667
|
+
before=before+wait;
|
668
|
+
|
669
|
+
L1_blo=false;
|
670
|
+
|
671
|
+
rnd_rst2 =false;
|
672
|
+
|
673
|
+
return;
|
674
|
+
|
675
|
+
}
|
676
|
+
|
677
|
+
}
|
678
|
+
|
679
|
+
else if(R1_blo==true){
|
680
|
+
|
681
|
+
if(millis()-before3<=wait){
|
682
|
+
|
683
|
+
Motor_Drive('L');
|
684
|
+
|
685
|
+
Motor_Power(Motor_Out2);
|
686
|
+
|
687
|
+
}
|
688
|
+
|
689
|
+
else{
|
690
|
+
|
691
|
+
before=before+wait;
|
692
|
+
|
693
|
+
R1_blo=false;
|
694
|
+
|
695
|
+
rnd_rst2 =false;
|
696
|
+
|
697
|
+
return;
|
698
|
+
|
699
|
+
}
|
700
|
+
|
701
|
+
}
|
702
|
+
|
703
|
+
else if(L2_blo==true){
|
704
|
+
|
705
|
+
if(millis()-before3<=wait*0.5){
|
706
|
+
|
707
|
+
Motor_Drive('R');
|
708
|
+
|
709
|
+
Motor_Power(Motor_Out2);
|
710
|
+
|
711
|
+
}
|
712
|
+
|
713
|
+
else{
|
714
|
+
|
715
|
+
before=before+wait;
|
716
|
+
|
717
|
+
L2_blo=false;
|
718
|
+
|
719
|
+
rnd_rst2 =false;
|
720
|
+
|
721
|
+
return;
|
722
|
+
|
723
|
+
}
|
724
|
+
|
725
|
+
}
|
726
|
+
|
727
|
+
else{
|
728
|
+
|
729
|
+
if(millis()-before3<=wait*0.5){
|
730
|
+
|
731
|
+
Motor_Drive('L');
|
732
|
+
|
733
|
+
Motor_Power(Motor_Out2);
|
734
|
+
|
735
|
+
}
|
736
|
+
|
737
|
+
else{
|
738
|
+
|
739
|
+
before=before+wait;
|
740
|
+
|
741
|
+
R2_blo=false;
|
742
|
+
|
743
|
+
rnd_rst2 =false;
|
744
|
+
|
745
|
+
return;
|
746
|
+
|
747
|
+
}
|
748
|
+
|
749
|
+
}
|
750
|
+
|
751
|
+
return;
|
752
|
+
|
753
|
+
}
|
754
|
+
|
755
|
+
|
466
756
|
|
467
757
|
・障害物回避のプログラム
|
468
758
|
|
469
759
|
・ターゲット探索のプログラム
|
470
760
|
|
471
|
-
~
|
472
|
-
|
473
761
|
|
474
762
|
|
475
763
|
//シリアルモニタ用プログラム
|
1
ソースコードについて
test
CHANGED
File without changes
|
test
CHANGED
@@ -458,9 +458,17 @@
|
|
458
458
|
|
459
459
|
|
460
460
|
|
461
|
-
|
461
|
+
~
|
462
|
+
|
462
|
-
|
463
|
+
文字数制限により省略
|
464
|
+
|
463
|
-
|
465
|
+
・ランダムウォークのプログラム
|
466
|
+
|
467
|
+
・障害物回避のプログラム
|
468
|
+
|
469
|
+
・ターゲット探索のプログラム
|
470
|
+
|
471
|
+
~
|
464
472
|
|
465
473
|
|
466
474
|
|