Go Down

Topic: ads (Read 363 times) previous topic - next topic

jaspervdwerf

Code: [Select]

//Globale constanten:
int  VTpseraf=1;// Het aantal voertuigen dat per seconde door een stoplicht heen kan
int  VTpserbij[12]={4,5,4,3,4,3,4,5,4,3,4,3};
int    MWf[16]={10,13,10,10,10,10,10,13,10,10,10,10,9,9,9,9};// meeweegfactor; commagetallen om gelijkspel te voorkomen
float  beginPWsl[16]={0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0}; //beginprioriteitswaardewaarde stoplichten
int    KPsl[11][4]={ {0,1,6,7},{0,6,7,9},{0,1,3,6},{0,5,6,12},{2,3,9,12},{0,11,6,12},{8,9,3,12},{3,4,9,10},{0,3,9,10},
       {3,4,6,9},{0,3,6,9} }; //stoplichtnummers die bij kruispunten horen
//int  T[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //tijd
float  Avt[13]; //aantal voertuigen
float  PWkp[11]; //prioriteitswaarde kruispunt
float PWsl[11];
int    k;
int    KPmax;//kruispunt met hoogste PW
float  T[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
int i=0;
float  totPWsl;
int SLnr;
int l;
int j;


void setup() {
  //Zet pins 0 t/m 59 op OUTPUT:
  for(int i=0; i<=60; i++) {
    pinMode(i, OUTPUT);
  }
  Avt[12]=0;
  //***Zet alle rode LEDs aan
for(i=0; i<=11;i++){
 digitalWrite(i*5,HIGH);
}
i=0;
  Serial.begin(9600);
}
//functie die witte LEDs bestuurt
void witteLEDs(int x){
  if(Avt[x]<=0) {
    digitalWrite(5*x+2,LOW);
    digitalWrite(5*x+3,LOW);
    digitalWrite(5*x+4,LOW);
  }
  if(Avt[x]<=2) {
    digitalWrite(5*x+2,HIGH);
    digitalWrite(5*x+3,LOW);
    digitalWrite(5*x+4,LOW);
  }
  if(Avt[x]<=5) {
    digitalWrite(5*x+2,HIGH);
    digitalWrite(5*x+3,HIGH);
    digitalWrite(5*x+4,LOW);
  }
  if(Avt[x]>=6) {
    digitalWrite(5*x+2,HIGH);
    digitalWrite(5*x+3,HIGH);
    digitalWrite(5*x+4,HIGH);
  }
}

void loop() {
 
 
 //***Berekent de prioriteitswaardes(PWsl) van alle stoplichten en voegt de tij (T[i]) toe***
 
 for(int i=0; i<=11; i++){
   Avt[i]=random(0,10);
   float temp = pow(1.07, T[i]);
   PWsl[i]= beginPWsl[i] + temp*Avt[i]*MWf[i]/100;
   T[i] = T[i] +10;
   //Serial.println(PWsl[i]);
 } 
 i=0;
 //Serial.println("- - - - - - - -");
 
 //***Berekent de prioriteitswaarden van kruispunten 0 t/m 10***
 for(int i=0; i<=10; i++){ //loopt 11 keer: j van 0 naar 10
   for(int j=0; j<=3; j++){ //loopt 4 keer: k van 0 naar 3
     //PWkp[i]=PWsl[KPsl[i*4+j]]+PWkp[i]; // Berekend de PW van kruispunt door de PW van het stoplicht van j*4+k te doen, dus 48 keer in totaal.
     PWkp[i]=PWkp[i] + PWsl[KPsl[i][j]];
   }
 //Serial.println(PWkp[i]);
 }
 i=0;

 //***berekent het kruispunt met de hoogste KPpw***
 int maximum = PWkp[10];
  for (int i=0; i<=10; i++){
    if (maximum<PWkp[i]){
      maximum = PWkp[i];
      KPmax = i;
    }}
  int i=0;
 //Serial.println(KPmax);

 //***zet de stoplichten op GROEN***
 for(i=0;i<=3;i++){
   int SLnr = KPsl[KPmax][i];
   digitalWrite(5*SLnr+1,HIGH);
   digitalWrite(5*SLnr,LOW);
 }
 i=0;
 
 //***laat het Avt afnemen bij stoplichten op groen en update de witte LEDs en laat Avt toenemen bij alle stoplichten***
 for(i=0;i<=9;i++){
  for(int l=0;l<=11;l++){
    totPWsl = totPWsl + PWsl[l]; //berekent de totale prioritetiswaarde
  }
  l=0;
  delay(900);
 
  for(int j=0;j<=3;j++){
    int SLnr = KPsl[KPmax][j]; //bepaalt 4x per kruispunt welke stoplichten op groen moeten
    Avt[SLnr]=Avt[SLnr]-VTpseraf; // laat deze stoplichten afnemen in AV
    if (Avt[SLnr]=0||totPWsl>2){//als er geen auto's zijn dan knipperen niet steeds alle stoplichten***
      i=9;
      }
   }
   j=0;
   
   for(k=0;k<=11;k++){
     Avt[SLnr]=Avt[SLnr]-(VTpserbij[SLnr]*random(0,100)/100);
     witteLEDs(k);
     if(Avt[k]<1){
       T[k]=0;  //***Zet de tijd op 0 bij stoplichten waar geen auto's voor stonden te wachten de afgelopen seconde***
    }
   }
   k=0;
   
   totPWsl=0;
 }
 i=0;
 
 //***zet de stoplichten op rood
 for(i=0;i<=3;i++){
   int SLnr = KPsl[KPmax][i];
   digitalWrite(5*SLnr,HIGH);
   digitalWrite(5*SLnr+1,LOW);
 }
 i=0;
 
 delay(1000);
 Serial.println("---------------");
}

Budvar10

Arduino clone with ATmega1284P   http://forum.arduino.cc/index.php?topic=277260.0

Go Up