Dependencies:   Servo mbed

Revision:
0:838a1c343613
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jun 10 10:35:57 2015 +0000
@@ -0,0 +1,411 @@
+#include "mbed.h"
+#include "Servo.h"
+
+
+//#include "BusIn.h"
+//#include "DigitalIn.h"
+
+
+//--------------------------------------------windsensor  begin
+
+Timer t;
+void Goedzo_staan_groen();
+void Rechtsdraaien();
+void Linksdraaien();
+void Goedzo_BO_groen();
+void Boven_draaien();
+void Onder_draaien();
+void veiligheidsmodus();
+void counter();
+
+Serial pc(USBTX, USBRX);
+
+volatile int IRQcount;
+// DigitalIn inputpin(p5);//was p2
+int pin_irq = 0; //IRQ that matches to pin 2
+
+InterruptIn Windinterrupt(p5);
+
+
+DigitalIn PMS_PIN(p6);
+bool count = false;
+int t1 = 0, t2 = 0;
+int hits = 0;
+int rpp = 0;
+int rps = 0;
+int pwm = 13;
+
+const int numReadings = 10;
+int readings[numReadings];      // the readings from the analog input
+int index1 = 0;                  // the index of the current reading
+int total = 0;                  // the running total
+int average = 0;                // the average
+
+
+int gemrij1=0;
+
+int Aantalmetingen1 = 20;
+//int reeks1[Aantalmetingen1]={0};
+const int maxwindpulsen = 20; //Te groot voor te testen
+const int MinimaalLicht = 20;
+//------------------------------------------- Windsensor  einde
+Servo myservo(p21);
+int pos = 0;
+int wachttijd = 1000;
+int buttonState = 0;         // variable for reading the pushbutton status
+
+DigitalOut linksdraaien (p14);
+DigitalOut  goedzo (p13);
+DigitalOut  rechtsdraaien (p12);
+
+DigitalOut  bovendraaien  (p11);
+DigitalOut goedzoBO (p10);
+DigitalOut  onderdraaien (p9);
+
+
+AnalogIn Pin (p17);   // Analog input pin that the potentiometer is attached to
+AnalogIn Pin1 (p18);  // Analog input pin that the potentiometer is attached to
+AnalogIn Pin2 (p19);  // Analog input pin that the potentiometer is attached to
+AnalogIn Pin3 (p20);  // Analog input pin that the potentiometer is attached to
+//const int analogOutPin4 = 9; // Analog output pin that the LED is attached to
+
+
+
+
+
+const int aantalmetingen = 2;
+
+int rij1[aantalmetingen]= {0};
+int rij2[aantalmetingen]= {0};
+int rij3[aantalmetingen]= {0};
+int rij4[aantalmetingen]= {0};
+
+
+
+
+unsigned long PrevTime=0;
+int sensorValue = 0;        // value read from the pot
+int sensorValue1 = 0;        // value read from the pot
+int sensorValue2= 0;        // value read from the pot
+int sensorValue3 = 0;        // value read from the pot
+int outputValue = 0;        // value output to the PWM (analog out)
+
+
+
+
+int ugemiddeld(int*);
+
+int ugemiddeld(int *rijgem)
+{
+    int som=0;
+    for (int i=0; i<aantalmetingen; i++) {
+        som=som+rijgem[i];
+    }
+    int gemiddeld=(som/aantalmetingen);
+    return (int)gemiddeld;
+}
+
+
+
+
+
+
+//-------------------------------------------------------------------------- Windsensor  begin
+
+// put your setup code here, to run once:
+
+// attachInterrupt(pin_irq, IRQcounter, RISING);
+
+
+
+// put your setup code here, to run once:
+//-------------------------------------------------------------------------- Windsensor  einde
+
+
+
+// initialize the pushbutton pin as an input:
+
+//-------------------------------------------------------------------------- Windsensor  begin
+void IRQcounter()
+{
+    IRQcount++;
+}
+long int frq;
+//-------------------------------------------------------------------------- Windsensor  einde
+
+int main()
+{
+    t.start();
+    while (1) {
+        Windinterrupt.rise(&counter);
+
+        for (int thisReading = 0; thisReading < numReadings; thisReading++)
+            readings[thisReading] = 0;
+
+        //-------------------------------------------------------------------------- Windsensor  begin
+        t2 = t.read();
+        if (t2 >= (t1 + 1000)) {
+            rpp = hits/1;// delen door 6 voor aantal rondjes
+            rps = hits/6;// delen door 6 voor aantal rondjes
+            hits = 0;
+
+
+        }
+
+        // subtract the last reading:
+        total= total - readings[index1];
+        // read from the sensor:
+        readings[index1] = rpp;
+        // add the reading to the total:
+        total= total + readings[index1];
+        // advance to the next position in the array:
+        index1 = index1 + 1;
+
+        // if we're at the end of the array...
+        if (index1 >= numReadings)
+            // ...wrap around to the beginning:
+            index1 = 0;
+
+        // calculate the average:
+        average = total / numReadings;
+        // send it to the computer as ASCII digits
+
+        // wait_ms(1);        //        wait_ms in between reads for stability
+
+        pc.printf("pulsen per seconde: %d\t\t",rpp);
+        pc.printf("RPM: %d\t\t",rps*60 );
+        pc.printf("GEM: %d\n",average);
+
+        wait_ms(1000);
+
+
+        // attachInterrupt(0, counter, RISING);
+//-------------------------------------------------------------------------- Windsensor  einde
+
+        // read the state of the pushbutton value:
+
+        // read the analog in value:
+        PrevTime = t.read();
+        //while (PrevPrevPrevPrevTime==wachttijd)//variabele van maken!!!
+
+        for (int huidigemeting=0; huidigemeting <= aantalmetingen; huidigemeting++) {
+            wait_ms(10);
+            rij1[huidigemeting] = Pin.read();
+            rij2[huidigemeting] = Pin1.read();
+            rij3[huidigemeting] = Pin2.read();
+            rij4[huidigemeting] = Pin3.read();
+
+        }
+
+
+        sensorValue = Pin.read();
+        sensorValue1 = Pin1.read();
+        sensorValue2 = Pin2.read();
+        sensorValue3 = Pin3.read();
+        // map it to the range of the analog out:
+
+        int gemrij1=ugemiddeld(rij1);
+        int gemrij2=ugemiddeld(rij2);
+
+        int gemrij3=ugemiddeld(rij3);
+        int gemrij4=ugemiddeld(rij4);
+
+        int gemrij1en3=(gemrij1 + gemrij3)/2;
+        int gemrij2en4=(gemrij2 + gemrij4)/2;
+        int gemrij1en2=(gemrij1 + gemrij2)/2;
+        int gemrij3en4=(gemrij3 + gemrij4)/2;
+
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Te weinig Ligt
+        int TeWeinigLicht = (gemrij1 + gemrij2 + gemrij3 + gemrij4)/4;
+
+        pc.printf("------------------------------------" );
+        pc.printf("sensorGem = %d, %d, %d, %d \n  " ,gemrij1, gemrij2, gemrij3, gemrij4 );
+
+
+// check if the pushbutton is not pressed.
+        // if it is, the buttonState is LOW
+        if ( average <= maxwindpulsen &&  TeWeinigLicht >= MinimaalLicht)
+
+        {
+            if(gemrij2en4 > gemrij1en3-10&&gemrij2en4 < gemrij1en3+10) {
+                Goedzo_staan_groen();
+                wait_ms(10);
+
+
+            }
+
+            if(gemrij2en4 > gemrij1en3+10) {
+                Rechtsdraaien();
+
+            } else {
+                if(gemrij1en3 > gemrij2en4+10) {
+                    Linksdraaien();
+
+                }
+            }
+
+            if(gemrij1en2 > gemrij3en4-10&&gemrij1en2 < gemrij3en4+10) {
+                Goedzo_BO_groen();
+
+            }
+
+            if(gemrij1en2 > gemrij3en4+10) {
+                Boven_draaien();
+
+            } else {
+                if(gemrij3en4 > gemrij1en2+10) {
+                    Onder_draaien();
+                }
+            }
+        }
+
+        else {
+
+            veiligheidsmodus();
+        }
+
+    }
+}
+
+void Goedzo_staan_groen()
+{
+
+    int gemrij1=ugemiddeld(rij1);
+    int gemrij2=ugemiddeld(rij2);
+    int gemrij3=ugemiddeld(rij3);
+    int gemrij4=ugemiddeld(rij4);
+    int gemrij1en3=(gemrij1 + gemrij3)/2;
+    int gemrij2en4=(gemrij2 + gemrij4)/2;
+
+
+    pc.printf("Is goed zo! Verschil links rechts = %d ,     Pos = %d \n", gemrij2en4-gemrij1en3, pos);
+
+//   wait_ms(10)(1000);
+    rechtsdraaien = 0;    // turn the LED off by making the voltage LOW
+    goedzo = 1;    // turn the LED off by making the voltage LOW
+    linksdraaien = 0;    // turn the LED off by making the voltage LOW
+}
+
+void Linksdraaien()
+{
+    int gemrij1=ugemiddeld(rij1);
+    int gemrij2=ugemiddeld(rij2);
+    int gemrij3=ugemiddeld(rij3);
+    int gemrij4=ugemiddeld(rij4);
+    int gemrij1en3 = (gemrij1+gemrij3)/2;
+    int gemrij2en4 = (gemrij2+gemrij4)/2;
+
+    if(gemrij1en3 > gemrij2en4+10) {
+        pos+=2;
+        myservo.write(pos);
+
+        pc.printf("Sensor1en3 = %d < Sensor2en4 = %d \n ",gemrij1en3, gemrij2en4);
+        //     wait_ms(10)(1000);
+        rechtsdraaien = 0;    // turn the LED off by making the voltage LOW
+        goedzo = 0;    // turn the LED off by making the voltage LOW
+        linksdraaien = 1;    // turn the LED off by making the voltage LOW
+    }
+}
+
+void Rechtsdraaien()
+{
+
+    int gemrij1=ugemiddeld(rij1);
+    int gemrij2=ugemiddeld(rij2);
+    int gemrij3=ugemiddeld(rij3);
+    int gemrij4=ugemiddeld(rij4);
+    int gemrij1en3 = (gemrij1+gemrij3)/2;
+    int gemrij2en4 = (gemrij2+gemrij4)/2;
+    pos-=2;
+    myservo.write(pos);
+    pc.printf("Sensor1en3 = %d  > Sensor2en4 = %d \n ",gemrij1en3,gemrij2en4);
+
+    // wait_ms(1000);
+    rechtsdraaien = 1;    // turn the LED off by making the voltage LOW
+    goedzo = 0;    // turn the LED off by making the voltage LOW
+    linksdraaien = 0;    // turn the LED off by making the voltage LOW
+}
+void Goedzo_BO_groen()
+{
+
+    int gemrij1=ugemiddeld(rij1);
+    int gemrij2=ugemiddeld(rij2);
+    int gemrij3=ugemiddeld(rij3);
+    int gemrij4=ugemiddeld(rij4);
+    int gemrij1en2=(gemrij1 + gemrij2)/2;
+    int gemrij3en4=(gemrij3 + gemrij4)/2;
+
+
+    pc.printf("Is goed zo! Verschil boven onder = %d ,     Pos = %d",gemrij1en2-gemrij3en4,pos );
+
+    wait_ms(1000);
+    onderdraaien =  0;    // turn the LED off by making the voltage LOW
+    goedzoBO = 1;    // turn the LED off by making the voltage LOW
+    bovendraaien = 0;    // turn the LED off by making the voltage LOW
+}
+
+void Onder_draaien()
+{
+    int gemrij1=ugemiddeld(rij1);
+    int gemrij2=ugemiddeld(rij2);
+    int gemrij3=ugemiddeld(rij3);
+    int gemrij4=ugemiddeld(rij4);
+    int gemrij1en2=(gemrij1 + gemrij2)/2;
+    int gemrij3en4=(gemrij3 + gemrij4)/2;
+
+    if(gemrij3en4 > gemrij1en2+10) {
+        //pos+=2;
+        //myservo.write(pos);
+
+        pc.printf("Sensor3en4 = %d < Sensor1en2 =  %d ", gemrij3en4, gemrij1en2);
+
+        //   wait_ms(1000);
+        onderdraaien =  0;    // turn the LED off by making the voltage LOW
+        goedzoBO = 0;    // turn the LED off by making the voltage LOW
+        bovendraaien = 1;    // turn the LED off by making the voltage LOW
+    }
+}
+
+void Boven_draaien()
+{
+
+    int gemrij1=ugemiddeld(rij1);
+    int gemrij2=ugemiddeld(rij2);
+    int gemrij3=ugemiddeld(rij3);
+    int gemrij4=ugemiddeld(rij4);
+    int gemrij1en2=(gemrij1 + gemrij2)/2;
+    int gemrij3en4=(gemrij3 + gemrij4)/2;
+    //pos-=2;
+    //myservo.write(pos);
+    pc.printf("Sensor3en4 = %d > Sensor1en2 =  %d", gemrij3en4, gemrij1en2);
+
+    // wait_ms(1000);
+    onderdraaien =  0;    // turn the LED off by making the voltage LOW
+    goedzoBO = 0;    // turn the LED off by making the voltage LOW
+    bovendraaien = 1;    // turn the LED off by making the voltage LOW
+}
+void veiligheidsmodus()
+{
+    while (pos <= 180) {
+        // goes from 180 degrees to 0 degrees
+        myservo.write(pos);              // tell servo to go to position in variable 'pos'
+        wait_ms(15);
+        pos += 1;
+        // GROOT      wait_ms VOOR WACHTEN TOT WEER OMHOOG GAAN OFTEWEL VOLGENDE METING
+    }
+}
+//-------------------------------------------------------------------------- Windsensor  begin
+void counter(void)
+{
+    if (PMS_PIN.read() == 1) {
+        if (!count) {
+            count = true;
+            hits++;
+        }
+        count = false;
+    } else {
+        count = false;
+    }
+}
+//-------------------------------------------------------------------------- Windsensor  einde
+