Node Core Behaviour Design

From Glacsweb Wiki
Jump to: navigation, search

Below is the pseudo code for the planned development of contiki code for Sensinode.

Main

int main(void){
  while(1){
  Config();  //On startup wait for config message to sync clock and be told to run.
  Run();     //After config has be recived then the node runs independatly forever (or untill batteries run out).
  }
return 0;
}
int Config(void){

TurnOnLeds(3);

while( "Not recived config packet" ){
  //check for config radio packet.
}
  
  "TIME" currentTime = GetConfigTime();
  SetClock(currentTime);
  return 1;

}
int Run(void){
while(1){

  "TIME" currentTime = ReadClock();

    if( "Time to Take readings" ){
    TakeAllReadings();
    SetWakeUpTimer();
    }

    else{
    TakeAllReadings();
    SendReciveData();
    SetWakeUpTimer();
    }

  Sleep();

}
}

Leds

int TurnOnLeds(int LEDId){

  if(LEDId == 1){
  // Turn on LED 1
  }

  else if(LEDId == 2){
  // Turn on LED 2
  }

  else{
  //Turn on LED 1 & 2
  }
return 1;
}
int TurnOffLeds(int LEDId){

  if(LEDId == 1){
  // Turn off LED 1
  }

  else if(LEDId == 2){
  // Turn off LED 2
  }

  else{
  //Turn off LED 1 & 2
  }
return 1;
}
int ToggleLeds(int LEDId){
 
  if(LEDId == 1){
    if( " is LED 1 ON" ){
    TurnOffLeds(1);
    }
    else{
    TurnOnLeds(1);
    }
  }

  else if(LEDId == 2){
  if( "is LED 2 ON" ){
    TurnOffLeds(2);
    }
    else{
    TurnOnLeds(2);
    }
  }

  else{
  if( "is LED 1 ON" ){
    TurnOffLeds(1);
    }
    else{
    TurnOnLeds(1);
    }

    if( "is LED 2 ON" ){
    TurnOffLeds(2);
    }
    else{
    TurnOnLeds(2);
    }

  }
return 1;
}

Buttons

int WaitForButtonPress(int ButtonId){
  if(ButtonId == 1){
    while( "Button one is not pressed " ){
      //wait
    }
  }

  else{
    while( "button 2 is not pressed "){
      //wait
    }
  }
return 1; 
}

Sensing

int TakeAllReadings(){
  int currentTemp = ReadTemp();
  int currentPicth = ReadPitcch();
  int currentRoll = ReadRoll();
  int currentConduct = ReadConduct();

  if(StoreAllReadings(currentTemp, currentPitch, currentRoll, currentConduct)){
    return 1;
  }

return 0;
}
int ReadTemp(){
  int reading = //Get Temp reading and return
  return reading;
}
int ReadPitch(){
  int reading = //Get Pitch reading and return
  return reading;
}
int ReadRoll(){
  int reading = //Get Roll reading and return
  return reading;
}
int ReadConduct(){
  int reading = //Get Conduct reading and return
  return reading;
}

Time

could use a time struct like:

typedef struct
uint8_t year,
uint8_t month,
uint8_t date, 
uint8_t day_week,
uint8_t hour,
uint8_t minute,
uint8_t second } date_type;
 
int SetClock( date_type currentTime){
   //set RTC time/date
   return 1; 
 }

 date_type ReadClock(date_type *d){
   return //get RTC date
 }

Storage

int StoreAllReadings(currentTemp, currentPitch, currentRoll, currentConduct){
  //Save all reading with timestamp and system status
  return 1; // if successful
}
int SendAllData(){
//send all data the node has
SendData("Data to send");
}

Radio


Back to Sensinode Development...