Advertisement
claudiusmarius

MultifunctionalSquirrelControlSystem

Aug 25th, 2023
1,233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.86 KB | None | 0 0
  1. /SqirrelInvaders
  2.   //https://youtu.be/Xx6eqsZWyMc
  3.   //https://www.youtube.com/c/ClaudeDufourmont
  4.   //Seeeduino XIAO + AD9833 + PAM8403 + HC-SR501
  5.  
  6.   #include <SPI.h>
  7.   #include <MD_AD9833.h>
  8.   #include <Adafruit_NeoPixel.h>
  9.   #define DATA  9
  10.   #define CLK   8  
  11.   #define FSYNC1 10  
  12.   #define DINEOPIXEL      7
  13.   #define N_LEDS 8
  14.   Adafruit_NeoPixel strip(N_LEDS, DINEOPIXEL, NEO_GRB + NEO_KHZ800);
  15.  
  16.   #define BrochePIR 6
  17.   #define D2 2
  18.   #define D3 3
  19.   #define D4 4
  20.   #define LED1 5
  21.   #define D1 1
  22.  
  23.   MD_AD9833 AD(DATA, CLK, FSYNC1);
  24.  
  25.   bool ETATPIR ;
  26.   bool ETATD2 ;
  27.   bool ETATD3 ;
  28.   bool ETATD4 ;
  29.   int ANAD1;
  30.   bool ETATANAD1;
  31.  
  32.   void setup()
  33.   {
  34.   pinMode(CLK, OUTPUT);    
  35.   pinMode(DATA, OUTPUT);
  36.   pinMode(FSYNC1, OUTPUT);
  37.  
  38.   pinMode(DINEOPIXEL, OUTPUT);
  39.   pinMode(LED1, OUTPUT);
  40.   pinMode(D2, INPUT_PULLUP);
  41.   pinMode(D3, INPUT_PULLUP);
  42.   pinMode(D4, INPUT_PULLUP);
  43.  
  44.   pinMode(BrochePIR, INPUT);
  45.   pinMode(D1, INPUT);
  46.  
  47.   AD.begin();
  48.   }
  49.  
  50.   void loop()
  51.   {
  52.   ANAD1 = analogRead (D1);
  53.   //if (ANAD1 < 100)                  //Pénombre
  54.   if (ANAD1 > 200)                  //hors pénombre
  55.  
  56.   {
  57.   ETATANAD1 = HIGH;
  58.   }
  59.   else
  60.   {
  61.   ETATANAD1 = LOW;  
  62.   }
  63.   ETATPIR = digitalRead(BrochePIR);
  64.   ETATD2 =  !digitalRead(D2);
  65.   ETATD3 =  !digitalRead(D3);
  66.   ETATD4 =  !digitalRead(D4);
  67.  
  68.   if (ETATPIR && ETATD4 == HIGH)
  69.   {
  70.   digitalWrite (LED1, HIGH);
  71.   Chenillard ();
  72.   }
  73.    
  74.   //if (ETATPIR  == HIGH)
  75.   //if (ETATPIR  == HIGH && ETATD3== HIGH)// PIR détection + D3 strappé à zéro (AUTORISATION PIR)
  76.   //if (ETATPIR  == HIGH && ETATD3 == HIGH && ETATANAD1 == HIGH) //PIR détection + D3 strappé à zéro (AUTORISATION PIR)+ Pas de pénombre
  77.   if (ETATPIR  == HIGH && ETATD3 == HIGH && ETATANAD1 == HIGH) //PIR détection + D3 strappé à zéro (AUTORISATION PIR)+ Pas de pénombre
  78.  
  79.   // ----------------------- NOTA : POUR L'INSTANT D2 N'EST PAS UTILISE -----------------------------------------------------------------
  80.  
  81.   {
  82.   digitalWrite (LED1, HIGH);
  83.  
  84.   bonusRoundSound();
  85.   gameOverSound();                            
  86.   bonusRoundSound();
  87.   missileApproachSound03();
  88.   }
  89.   else
  90.   {
  91.   AD.setMode(MD_AD9833::MODE_OFF);
  92.   digitalWrite (LED1, LOW);
  93.   }
  94.   }
  95.  
  96.   void missileApproachSound03()
  97.   {
  98.   AD.setMode(MD_AD9833::MODE_TRIANGLE);
  99.   const float baseFreq = 400.0;
  100.   const float maxFreqChange = 800.0;
  101.   const unsigned long duration = 5000;
  102.   const unsigned long approachDuration = duration / 2;
  103.  
  104.   unsigned long startTime = millis();
  105.   while (millis() - startTime < duration)
  106.   {
  107.   unsigned long elapsedTime = millis() - startTime;
  108.   float freqChange = maxFreqChange * ((float)elapsedTime / approachDuration);
  109.   float freq = baseFreq + freqChange;
  110.   AD.setFrequency(MD_AD9833::CHAN_0, freq);
  111.   delay(10);
  112.   }
  113.   AD.setMode(MD_AD9833::MODE_OFF);
  114.   ETATPIR == LOW;
  115.   }
  116.  
  117.   void gameOverSound() {
  118.   AD.setMode(MD_AD9833::MODE_TRIANGLE);
  119.   const float startFreq = 2000.0;
  120.   const float endFreq = 300.0;
  121.   const unsigned long rampDuration = 1000;
  122.  
  123.   for (float freq = startFreq; freq >= endFreq; freq -= 20.0)
  124.   {
  125.   AD.setFrequency(MD_AD9833::CHAN_0, freq);
  126.   delay(rampDuration / ((startFreq - endFreq) / 20.0));
  127.   }
  128.   AD.setMode(MD_AD9833::MODE_OFF);
  129.   }
  130.  
  131.   void bonusRoundSound()
  132.   {
  133.   AD.setMode(MD_AD9833::MODE_SQUARE1);
  134.   const float centerFreq = 1000.0;
  135.   const float modulationFreq = 20.0;
  136.   const float modulationDepth = 500.0;
  137.   const unsigned long duration = 400;
  138.  
  139.   for (unsigned long startTime = millis(); millis() - startTime < duration; )
  140.   {
  141.   float freq = centerFreq + modulationDepth * sin(2 * PI * modulationFreq * (millis() - startTime) / 1000.0);
  142.   AD.setFrequency(MD_AD9833::CHAN_0, freq);
  143.   }
  144.   AD.setMode(MD_AD9833::MODE_OFF);
  145.   }
  146.  
  147.   void Chenillard ()
  148.   {
  149.   int nombre = 15;
  150.  
  151.   for (int j =0; j <nombre; j++)
  152.   {
  153.   ChenillardRouge ();
  154.   }
  155.  
  156.   for (int j =0; j <nombre; j++)
  157.   {
  158.   ChenillardVert ();
  159.   }
  160.  
  161.   for (int j =0; j <nombre; j++)
  162.   {
  163.   ChenillardBleu ();
  164.   }
  165.   delay(1);
  166.  
  167.   for (int j =0; j <nombre; j++)
  168.   {
  169.   ChenillardRouge ();
  170.   }
  171.  
  172.   for (int j =0; j <nombre; j++)
  173.   {
  174.   ChenillardVert ();
  175.   }
  176.  
  177.   for (int j =0; j <nombre; j++)
  178.   {
  179.   ChenillardBleu ();
  180.   }
  181.  
  182.   }
  183.  
  184.   void ChenillardRouge ()
  185.   {
  186.  
  187.   for (int i = 0; i <= N_LEDS -1; i++)
  188.   {
  189.   strip.setPixelColor(i, 255, 0, 0);
  190.   strip.show ();
  191.   }
  192.   strip.clear ();
  193.   strip.show();
  194.   digitalWrite (LED1, LOW);
  195.   }
  196.  
  197.   void ChenillardVert ()
  198.   {
  199.  
  200.   for (int i = 0; i <= N_LEDS -1; i++)
  201.   {
  202.   strip.setPixelColor(i, 0, 255, 0);
  203.   strip.show ();
  204.   }
  205.   strip.clear ();
  206.   strip.show();
  207.   digitalWrite (LED1, LOW);
  208.   }
  209.  
  210.   void ChenillardBleu ()
  211.   {
  212.  
  213.   for (int i = 0; i <= N_LEDS -1; i++)
  214.   {
  215.   strip.setPixelColor(i, 0, 0, 255);
  216.   strip.show ();
  217.   }
  218.   strip.clear ();
  219.   strip.show();
  220.   digitalWrite (LED1, LOW);
  221.   }
  222.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement