/* Generated by Ptolemy II (http://ptolemy.eecs.berkeley.edu) Copyright (c) 2005-2009 The Regents of the University of California. All rights reserved. Permission is hereby granted, without written agreement and without license or royalty fees, to use, copy, modify, and distribute this software and its documentation for any purpose, provided that the above copyright notice and the following two paragraphs appear in all copies of this software. IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ #ifndef PT_NO_STDIO_H #include #endif #ifndef PT_NO_STDLIB_H #include #endif #ifndef PT_NO_MATH_H #include #endif #ifndef PT_NO_STDARG_H #include #endif #ifndef PT_NO_STRING_H #include #endif /* Generate type resolution code for .iRobotCreateCodeGenExperimental */ // Constants. #define MISSING 0 #define boolean unsigned char /* Infinity is a valid Ptolemy identifier. */ #define Infinity HUGE_VAL #ifdef linux /* Linux tends to have NAN. */ #define NaN (__builtin_nanf ("")) #else /*linux*/ #define NaN nanf(0) #endif /*linux*/ #define false 0 #define true 1 #define TYPE_Token -1 #define TYPE_Boolean 0 #define FUNC_isCloseTo 0 #define FUNC_delete 1 #define FUNC_convert 2 typedef struct token Token; typedef boolean BooleanToken; // Token structure containing the specified types. struct token { // Base type for tokens. char type; // TYPE field has to be the first field. union typeMembers { // type member declarations [i.e. Type1Token Type1;] BooleanToken Boolean; } payload; }; Token emptyToken; /* Used by *_delete() and others. */ Token Boolean_equals (Token thisToken, ...); Token Boolean_isCloseTo (Token thisToken, ...); Token Boolean_convert (Token thisToken, ...); /* We share one method between all scalar types so as to reduce code size. */ Token scalarDelete(Token token, ...) { /* We need to return something here because all the methods are declared * as returning a Token so we can use them in a table of functions. */ return emptyToken; } Token Boolean_new(boolean b); #define StringtoInt atoi #define StringtoDouble atof #define StringtoLong atol #define DoubletoInt floor #define InttoDouble (double) #define InttoLong (long) char* InttoString (int i) { char* string = (char*) malloc(sizeof(char) * 12); sprintf((char*) string, "%d", i); return string; } char* LongtoString (long long l) { char* string = (char*) malloc(sizeof(char) * 22); sprintf(string, "%lld", l); return string; } char* DoubletoString (double d) { int index; char* string = (char*) malloc(sizeof(char) * 20); sprintf(string, "%.14g", d); // Make sure that there is a decimal point. if (strrchr(string, '.') == NULL) { index = strlen(string); if (index == 20) { string = (char*) realloc(string, sizeof(char) * 22); } string[index] = '.'; string[index + 1] = '0'; string[index + 2] = '\0'; } return string; } char* BooleantoString (boolean b) { char *results; if (b) { // AVR does not have strdup results = (char*) malloc(sizeof(char) * 5); strcpy(results, "true"); } else { results = (char*) malloc(sizeof(char) * 6); strcpy(results, "false"); } return results; } #define NUM_TYPE 1 #define NUM_FUNC 3 Token (*functionTable[NUM_TYPE][NUM_FUNC])(Token, ...)= { {Boolean_equals, scalarDelete, Boolean_convert} }; // make a new integer token from the given value. Token Boolean_new(boolean b) { Token result; result.type = TYPE_Boolean; result.payload.Boolean = b; return result; } Token Boolean_equals(Token thisToken, ...) { va_list argp; Token otherToken; va_start(argp, thisToken); otherToken = va_arg(argp, Token); va_end(argp); return Boolean_new( ( thisToken.payload.Boolean && otherToken.payload.Boolean ) || ( !thisToken.payload.Boolean && !otherToken.payload.Boolean )); } /* Instead of Boolean_delete(), we call scalarDelete(). */ Token Boolean_convert(Token token, ...) { switch (token.type) { // FIXME: not finished default: fprintf(stderr, "Boolean_convert(): Conversion from an unsupported type. (%d)", token.type); break; } token.type = TYPE_Boolean; return token; } /* Generate shared code for iRobotCreateCodeGenExperimental */ #define true 1 #define false 0 /* max and min may be used by the Expression actor. */ #ifndef max #define max(a,b) ((a)>(b)?(a):(b)) #endif #ifndef min #define min(a,b) ((a)<(b)?(a):(b)) #endif /* Finished generating shared code for iRobotCreateCodeGenExperimental */ /* iRobotSensorSignalProcessing's output variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_EdgeLeft; static int iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_EdgeRight; /* Sensors's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_trigger; /* Sensors's output variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_bumpLeft; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_bumpRight; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_wheelDropFront; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_wheelDropLeft; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_wheelDropRight; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_wall; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffLeft; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffFrontLeft; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffFrontRight; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffRight; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_virtualWall; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_advanceButton; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_playButton; static int iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_distance; static int iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_angle; /* EmbeddedActor's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_trigger; /* EmbeddedActor's output variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_bumpLeft; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_bumpRight; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_wheelDropFront; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_wheelDropLeft; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_wheelDropRight; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_wall; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_virtualWall; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_advanceButton; static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_playButton; static int iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_distance; static int iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_angle; /* LogicFunction2's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction2_input[2]; /* LogicFunction's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction_input[2]; /* BooleanToAnything's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_BooleanToAnything_input; /* BooleanToAnything2's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_BooleanToAnything2_input; /* iRobotActuator's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW; static int iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW; static double iRobotCreateCodeGenExperimental_iRobotActuator_Drive; /* Drive2's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_velocity; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_radius; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_input; static double iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_RotateAngle; /* Drive2's output variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_done; /* EmbeddedActor's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_velocity; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_radius; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_input; static double iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_RotateAngle; /* EmbeddedActor's output variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_done; /* Drive3's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_velocity; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_radius; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_input; static double iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_RotateAngle; /* Drive3's output variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_done; /* EmbeddedActor's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_velocity; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_radius; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_input; static double iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_RotateAngle; /* EmbeddedActor's output variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_done; /* Drive4's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_velocity; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_radius; static double iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_input; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_UnitDistance; /* Drive4's output variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_done; /* EmbeddedActor's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_velocity; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_radius; static double iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_input; static int iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_UnitDistance; /* EmbeddedActor's output variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_done; /* iRobotCtrl's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl_AccLC; static int iRobotCreateCodeGenExperimental_iRobotCtrl_AccLN; static int iRobotCreateCodeGenExperimental_iRobotCtrl_AccLS; static int iRobotCreateCodeGenExperimental_iRobotCtrl_AccRC; static int iRobotCreateCodeGenExperimental_iRobotCtrl_AccRN; static int iRobotCreateCodeGenExperimental_iRobotCtrl_AccRS; static int iRobotCreateCodeGenExperimental_iRobotCtrl_EdgeLeft; static int iRobotCreateCodeGenExperimental_iRobotCtrl_EdgeRight; /* iRobotCtrl's output variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW; static int iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW; static double iRobotCreateCodeGenExperimental_iRobotCtrl_Drive; static boolean iRobotCreateCodeGenExperimental_iRobotCtrl_Initialize; /* _Controller's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC; static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN; static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS; static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC; static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN; static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS; static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_RotateCW; static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_RotateCCW; static double iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_Drive; static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft; static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight; static Token iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_Initialize; /* Drive2's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_velocity; static int iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_radius; /* Drive2's output variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_done; /* EmbeddedActor's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_EmbeddedActor_velocity; static int iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_EmbeddedActor_radius; /* EmbeddedActor's output variable declarations. */ static boolean iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_EmbeddedActor_done; /* PowerOn's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccLC; static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccLN; static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccLS; static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccRC; static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccRN; static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccRS; static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_EdgeLeft; static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_EdgeRight; /* PowerOn's output variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_RotateCW; static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_RotateCCW; static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_Drive; /* PowerOn's type convert variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_Drive_0; /* initializeIRobot's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_initializeIRobot_in; /* EmbeddedActor's input variable declarations. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_initializeIRobot_EmbeddedActor_in; /* AccelerometerSignalProcessing's output variable declarations. */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLC; static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRC; static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRN; static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRS; static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLN; static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLS; /* ADC's output variable declarations. */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC_left; static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC_right; /* Expression's input variable declarations. */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression_left; /* Expression2's input variable declarations. */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression2_right; /* Expression3's input variable declarations. */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression3_left; /* Expression4's input variable declarations. */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression4_right; /* Expression5's input variable declarations. */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression5_left; /* Expression6's input variable declarations. */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression6_right; /* BooleanToAnything's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything_input; /* BooleanToAnything2's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything2_input; /* BooleanToAnything3's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything3_input; /* BooleanToAnything4's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything4_input; /* BooleanToAnything5's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything5_input; /* BooleanToAnything6's input variable declarations. */ static boolean iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything6_input; /* The preinitialization of the director. */ /* The preinitialization of the director. */ /* The preinitialization of the director. */ /* preinitEmbeddedActor */ #ifndef SENSOR_ACTOR #define SENSOR_ACTOR //#include "iRobotFunctions.c" #include "oi.h" //volatile int16_t distance = 0; //volatile int16_t angle = 0; //volatile uint8_t sensors[Sen0Size]; #endif /* The preinitialization of the director. */ /* The preinitialization of the director. */ /* preinitEmbeddedActor */ // Send Create drive commands in terms of velocity and radius #ifndef _DRIVE_DRIVE #define _DRIVE_DRIVE #include "iRobotFunctions.c" #include "oi.h" // Global variables volatile uint16_t timer_cnt = 0; volatile uint8_t timer_on = 0; volatile uint8_t sensors_flag = 0; volatile uint8_t sensors_index = 0; volatile uint8_t sensors_in[Sen6Size]; volatile uint8_t sensors[Sen6Size]; volatile int16_t distance = 0; volatile int16_t angle = 0; // Serial receive interrupt to store sensor values SIGNAL(SIG_USART_RECV) { uint8_t temp; temp = UDR0; if(sensors_flag) { sensors_in[sensors_index++] = temp; if(sensors_index >= Sen6Size) sensors_flag = 0; } } // Timer 1 interrupt to time delays in ms SIGNAL(SIG_OUTPUT_COMPARE1A) { if(timer_cnt) timer_cnt--; else timer_on = 0; } void drive(int16_t velocity, int16_t radius) { byteTx(CmdDrive); byteTx((uint8_t)((velocity >> 8) & 0x00FF)); byteTx((uint8_t)(velocity & 0x00FF)); byteTx((uint8_t)((radius >> 8) & 0x00FF)); byteTx((uint8_t)(radius & 0x00FF)); } // Delay for the specified time in ms and update sensor values void delayAndUpdateSensors(uint16_t time_ms) { uint8_t temp; timer_on = 1; timer_cnt = time_ms; while(timer_on) { if(!sensors_flag) { for(temp = 0; temp < Sen6Size; temp++) sensors[temp] = sensors_in[temp]; // Update running totals of distance and angle distance += (int)((sensors[SenDist1] << 8) | sensors[SenDist0]); angle += (int)((sensors[SenAng1] << 8) | sensors[SenAng0]); byteTx(CmdSensors); byteTx(6); sensors_index = 0; sensors_flag = 1; } } } #endif /* The preinitialization of the director. */ /* preinitEmbeddedActor */ // Send Create drive commands in terms of velocity and radius #ifndef _DRIVE_DRIVE #define _DRIVE_DRIVE #include "iRobotFunctions.c" #include "oi.h" // Global variables volatile uint16_t timer_cnt = 0; volatile uint8_t timer_on = 0; volatile uint8_t sensors_flag = 0; volatile uint8_t sensors_index = 0; volatile uint8_t sensors_in[Sen6Size]; volatile uint8_t sensors[Sen6Size]; volatile int16_t distance = 0; volatile int16_t angle = 0; // Serial receive interrupt to store sensor values SIGNAL(SIG_USART_RECV) { uint8_t temp; temp = UDR0; if(sensors_flag) { sensors_in[sensors_index++] = temp; if(sensors_index >= Sen6Size) sensors_flag = 0; } } // Timer 1 interrupt to time delays in ms SIGNAL(SIG_OUTPUT_COMPARE1A) { if(timer_cnt) timer_cnt--; else timer_on = 0; } void drive(int16_t velocity, int16_t radius) { byteTx(CmdDrive); byteTx((uint8_t)((velocity >> 8) & 0x00FF)); byteTx((uint8_t)(velocity & 0x00FF)); byteTx((uint8_t)((radius >> 8) & 0x00FF)); byteTx((uint8_t)(radius & 0x00FF)); } // Delay for the specified time in ms and update sensor values void delayAndUpdateSensors(uint16_t time_ms) { uint8_t temp; timer_on = 1; timer_cnt = time_ms; while(timer_on) { if(!sensors_flag) { for(temp = 0; temp < Sen6Size; temp++) sensors[temp] = sensors_in[temp]; // Update running totals of distance and angle distance += (int)((sensors[SenDist1] << 8) | sensors[SenDist0]); angle += (int)((sensors[SenAng1] << 8) | sensors[SenAng0]); byteTx(CmdSensors); byteTx(6); sensors_index = 0; sensors_flag = 1; } } } #endif /* The preinitialization of the director. */ /* preinitEmbeddedActor */ // Send Create drive commands in terms of velocity and radius #ifndef _DRIVE_DRIVE #define _DRIVE_DRIVE #include "iRobotFunctions.c" #include "oi.h" // Global variables volatile uint16_t timer_cnt = 0; volatile uint8_t timer_on = 0; volatile uint8_t sensors_flag = 0; volatile uint8_t sensors_index = 0; volatile uint8_t sensors_in[Sen6Size]; volatile uint8_t sensors[Sen6Size]; volatile int16_t distance = 0; volatile int16_t angle = 0; // Serial receive interrupt to store sensor values SIGNAL(SIG_USART_RECV) { uint8_t temp; temp = UDR0; if(sensors_flag) { sensors_in[sensors_index++] = temp; if(sensors_index >= Sen6Size) sensors_flag = 0; } } // Timer 1 interrupt to time delays in ms SIGNAL(SIG_OUTPUT_COMPARE1A) { if(timer_cnt) timer_cnt--; else timer_on = 0; } void drive(int16_t velocity, int16_t radius) { byteTx(CmdDrive); byteTx((uint8_t)((velocity >> 8) & 0x00FF)); byteTx((uint8_t)(velocity & 0x00FF)); byteTx((uint8_t)((radius >> 8) & 0x00FF)); byteTx((uint8_t)(radius & 0x00FF)); } // Delay for the specified time in ms and update sensor values void delayAndUpdateSensors(uint16_t time_ms) { uint8_t temp; timer_on = 1; timer_cnt = time_ms; while(timer_on) { if(!sensors_flag) { for(temp = 0; temp < Sen6Size; temp++) sensors[temp] = sensors_in[temp]; // Update running totals of distance and angle distance += (int)((sensors[SenDist1] << 8) | sensors[SenDist0]); angle += (int)((sensors[SenAng1] << 8) | sensors[SenAng0]); byteTx(CmdSensors); byteTx(6); sensors_index = 0; sensors_flag = 1; } } } #endif /* The preinitialization of the director. */ static int iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState; static unsigned char iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag; /* The preinitialization of the director. */ /* preinitEmbeddedActor */ // Send Create drive commands in terms of velocity and radius #ifndef _DRIVE_DRIVE #define _DRIVE_DRIVE void drive(int16_t velocity, int16_t radius) { byteTx(CmdDrive); byteTx((uint8_t)((velocity >> 8) & 0x00FF)); byteTx((uint8_t)(velocity & 0x00FF)); byteTx((uint8_t)((radius >> 8) & 0x00FF)); byteTx((uint8_t)(radius & 0x00FF)); } #endif /* The preinitialization of the director. */ /* The preinitialization of the director. */ /* preinitEmbeddedActor */ // Include the functions file if it has not already been included. #ifndef I_ROBOT_FUNCTIONS #define I_ROBOT_FUNCTIONS //#include "iRobotFunctions.c" #include "oi.h" void drive2(int16_t velocity, int16_t radius) { byteTx(CmdDrive); byteTx((uint8_t)((velocity >> 8) & 0x00FF)); byteTx((uint8_t)(velocity & 0x00FF)); byteTx((uint8_t)((radius >> 8) & 0x00FF)); byteTx((uint8_t)(radius & 0x00FF)); } #endif /* preinitEmbeddedActor */ /* The preinitialization of the director. */ /* preinitExpression */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression__iterationCount = 1; /* preinitExpression2 */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression2__iterationCount = 1; /* preinitExpression3 */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression3__iterationCount = 1; /* preinitExpression4 */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression4__iterationCount = 1; /* preinitExpression5 */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression5__iterationCount = 1; /* preinitExpression6 */ static int iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression6__iterationCount = 1; void iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor(void) { /* Fire EmbeddedActor */ if (iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_trigger) { // Request Sensors Packet 2 byteTx(CmdSensors); // Request packet 0, which has 26 bytes of information. byteTx(0); for(int i = 0; i < Sen0Size; i++) { sensors[i] = byteRx(); } // Output sensor data. iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_bumpLeft = sensors[SenBumpDrop] & BumpLeft; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_bumpRight = sensors[SenBumpDrop] & BumpRight; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_wheelDropFront = sensors[SenBumpDrop] & WheelDropFront; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_wheelDropLeft = sensors[SenBumpDrop] & WheelDropLeft; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_wheelDropRight = sensors[SenBumpDrop] & WheelDropRight; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_wall = sensors[SenWall]; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffLeft = sensors[SenCliffL]; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffFrontLeft = sensors[SenCliffFL]; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffFrontRight = sensors[SenCliffFR]; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffRight = sensors[SenCliffR]; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_virtualWall = sensors[SenVWall]; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_advanceButton = sensors[SenButton] & ButtonAdvance; iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_playButton = sensors[SenButton] & ButtonPlay; // Update accumulated distance and angle. distance += (int)((sensors[SenDist1] << 8) | sensors[SenDist0]); iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_distance = distance; angle += (int)((sensors[SenAng1] << 8) | sensors[SenAng0]); iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_angle = angle; /* FIXME: Skipped the battery state #define SenChargeState 16 #define SenVolt1 17 #define SenVolt0 18 #define SenCurr1 19 #define SenCurr0 20 #define SenTemp 21 #define SenCharge1 22 #define SenCharge0 23 #define SenCap1 24 #define SenCap0 25 */ } } void iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors(void) { /* Fire Composite Actor: Sensors */ /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor_trigger = iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_trigger; /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_EmbeddedActor(); /* SDFDirector: Transfer tokens to the outside. */ /* SDFDirector: Transfer tokens to the outside. */ /* SDFDirector: Transfer tokens to the outside. */ /* SDFDirector: Transfer tokens to the outside. */ /* SDFDirector: Transfer tokens to the outside. */ /* SDFDirector: Transfer tokens to the outside. */ /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction_input[0] = iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffLeft; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction_input[1] = iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffFrontLeft; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction2_input[0] = iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffFrontRight; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction2_input[1] = iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_cliffRight; /* SDFDirector: Transfer tokens to the outside. */ /* SDFDirector: Transfer tokens to the outside. */ /* SDFDirector: Transfer tokens to the outside. */ /* SDFDirector: Transfer tokens to the outside. */ /* SDFDirector: Transfer tokens to the outside. */ } void iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction2(void) { /* Fire LogicFunction2 */ iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_BooleanToAnything2_input = ((iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction2_input[0] || iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction2_input[1])); } void iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction(void) { /* Fire LogicFunction */ iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_BooleanToAnything_input = ((iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction_input[0] || iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction_input[1])); } void iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Const2(void) { /* Fire Const2 */ iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors_trigger = true; } void iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_BooleanToAnything(void) { /* Fire BooleanToAnything */ if (iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_BooleanToAnything_input) { iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_EdgeLeft = 1; } else { iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_EdgeLeft = 0; } } void iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_BooleanToAnything2(void) { /* Fire BooleanToAnything2 */ if (iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_BooleanToAnything2_input) { iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_EdgeRight = 1; } else { iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_EdgeRight = 0; } } void iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing(void) { /* Fire Composite Actor: iRobotSensorSignalProcessing */ /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Const2(); iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_Sensors(); iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction2(); iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_BooleanToAnything2(); iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_LogicFunction(); iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_BooleanToAnything(); /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_EdgeLeft = iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_EdgeLeft; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_EdgeRight = iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing_EdgeRight; } void iRobotCreateCodeGenExperimental_iRobotActuator_Speed(void) { /* Fire Speed */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_velocity = iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_velocity = iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_velocity = 30; } void iRobotCreateCodeGenExperimental_iRobotActuator_Const2(void) { /* Fire Const2 */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_radius = 32768; } void iRobotCreateCodeGenExperimental_iRobotActuator_Const3(void) { /* Fire Const3 */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_radius = 1; } void iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor(void) { /* Fire EmbeddedActor */ if(iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_input==1){ drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_radius); while(-(angle) <= iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_RotateAngle) { drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_radius); // Wait 20 ms delay10ms(2); // Request Sensors Packet 2 byteTx(CmdSensors); // Request packet 0, which has 26 bytes of information. byteTx(0); for(int i = 0; i < Sen0Size; i++) { sensors[i] = byteRx(); } // Update accumulated distance and angle. angle += (int)((sensors[SenAng1] << 8) | sensors[SenAng0]); } /* drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_radius); while(-(angle) <= iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_RotateAngle) { // wait a little more than one robot tick for sensors to update delayAndUpdateSensors(20); } */ drive(0, RadStraight); delay10ms(30); //delayAndUpdateSensors(20); angle=0; iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_done = true; } else { drive(0, RadStraight); //delayAndUpdateSensors(20); delay10ms(30); angle=0; iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_done = true; } } void iRobotCreateCodeGenExperimental_iRobotActuator_Drive2(void) { /* Fire Composite Actor: Drive2 */ /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_velocity = iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_velocity; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_radius = iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_radius; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_input = iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_input; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor_RotateAngle = iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_RotateAngle; /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_EmbeddedActor(); /* SDFDirector: Transfer tokens to the outside. */ } void iRobotCreateCodeGenExperimental_iRobotActuator_Const4(void) { /* Fire Const4 */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_radius = -1; } void iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor(void) { /* Fire EmbeddedActor */ if(iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_input==1){ drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_radius); while(angle <= iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_RotateAngle) { drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_radius); // Wait 20 ms delay10ms(2); // Request Sensors Packet 2 byteTx(CmdSensors); // Request packet 0, which has 26 bytes of information. byteTx(0); for(int i = 0; i < Sen0Size; i++) { sensors[i] = byteRx(); } // Update accumulated distance and angle. angle += (int)((sensors[SenAng1] << 8) | sensors[SenAng0]); } /* drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_radius); while(angle <= iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_RotateAngle) { // wait a little more than one robot tick for sensors to update delayAndUpdateSensors(20); } */ drive(0, RadStraight); delay10ms(30); //delayAndUpdateSensors(20); angle=0; iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_done = true; } else { drive(0, RadStraight); //delayAndUpdateSensors(20); delay10ms(30); angle=0; } } void iRobotCreateCodeGenExperimental_iRobotActuator_Drive3(void) { /* Fire Composite Actor: Drive3 */ /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_velocity = iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_velocity; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_radius = iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_radius; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_input = iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_input; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor_RotateAngle = iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_RotateAngle; /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_EmbeddedActor(); /* SDFDirector: Transfer tokens to the outside. */ } void iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor(void) { /* Fire EmbeddedActor */ if(iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_input==1){ drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_velocity*5, iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_radius); while(distance <= iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_UnitDistance){ drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_velocity*5, iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_radius); // Wait 20 ms delay10ms(5); // Request Sensors Packet 2 byteTx(CmdSensors); // Request packet 0, which has 26 bytes of information. byteTx(0); for(int i = 0; i < Sen0Size; i++) { sensors[i] = byteRx(); } // Update accumulated distance and angle. distance += (int)((sensors[SenDist1] << 8) | sensors[SenDist0]); } /* drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_radius); //while(distance <= iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_UnitDistance){ //while(distance <= 20){ //drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_radius); //delayAndUpdateSensors(20); //} */ drive(0, RadStraight); //delayAndUpdateSensors(20); delay10ms(30); distance = 0; iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_done = true; } else if(iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_input==1.414){ drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_velocity*5, iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_radius); while(distance <= iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_UnitDistance* 1.414){ drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_velocity*5, iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_radius); // Wait 20 ms delay10ms(5); // Request Sensors Packet 2 byteTx(CmdSensors); // Request packet 0, which has 26 bytes of information. byteTx(0); for(int i = 0; i < Sen0Size; i++) { sensors[i] = byteRx(); } // Update accumulated distance and angle. distance += (int)((sensors[SenDist1] << 8) | sensors[SenDist0]); } /* drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_radius); //while(distance <= iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_UnitDistance * 1.414){ while(distance <= 20){ // drive(iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_radius); delayAndUpdateSensors(20); } */ drive(0, RadStraight); //delayAndUpdateSensors(20); delay10ms(30); distance = 0; iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_done = true; } else { drive(0, RadStraight); //delayAndUpdateSensors(20); delay10ms(30); angle=0; iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_done = true; } } void iRobotCreateCodeGenExperimental_iRobotActuator_Drive4(void) { /* Fire Composite Actor: Drive4 */ /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_velocity = iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_velocity; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_radius = iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_radius; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_input = iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_input; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor_UnitDistance = iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_UnitDistance; /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_EmbeddedActor(); /* SDFDirector: Transfer tokens to the outside. */ } void iRobotCreateCodeGenExperimental_iRobotActuator_RotateAngle(void) { /* Fire RotateAngle */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_RotateAngle = iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_RotateAngle = 22.5; } void iRobotCreateCodeGenExperimental_iRobotActuator_UnitDistance(void) { /* Fire UnitDistance */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_UnitDistance = 10; } void iRobotCreateCodeGenExperimental_iRobotActuator(void) { /* Fire Composite Actor: iRobotActuator */ /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive2_input = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive3_input = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive4_input = iRobotCreateCodeGenExperimental_iRobotActuator_Drive; /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_iRobotActuator_UnitDistance(); iRobotCreateCodeGenExperimental_iRobotActuator_RotateAngle(); iRobotCreateCodeGenExperimental_iRobotActuator_Const4(); iRobotCreateCodeGenExperimental_iRobotActuator_Const3(); iRobotCreateCodeGenExperimental_iRobotActuator_Const2(); iRobotCreateCodeGenExperimental_iRobotActuator_Speed(); iRobotCreateCodeGenExperimental_iRobotActuator_Drive4(); iRobotCreateCodeGenExperimental_iRobotActuator_Drive3(); iRobotCreateCodeGenExperimental_iRobotActuator_Drive2(); } void iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Const(void) { /* Fire Const */ iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_radius = 32768; } void iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Const2(void) { /* Fire Const2 */ iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_velocity = 50; } void iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_EmbeddedActor(void) { /* Fire EmbeddedActor */ drive(iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_EmbeddedActor_velocity, iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_EmbeddedActor_radius); iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_EmbeddedActor_done = true; } void iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2(void) { /* Fire Composite Actor: Drive2 */ /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_EmbeddedActor_velocity = iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_velocity; /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_EmbeddedActor_radius = iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_radius; /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_iRobotCtrl_DriveForward_Drive2_EmbeddedActor(); /* SDFDirector: Transfer tokens to the outside. */ } void iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_initializeIRobot_EmbeddedActor(void) { /* Fire EmbeddedActor */ } void iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_initializeIRobot(void) { /* Fire Composite Actor: initializeIRobot */ /* SDFDirector: Transfer tokens to the inside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_initializeIRobot_EmbeddedActor_in = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_initializeIRobot_in; /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_initializeIRobot_EmbeddedActor(); } void iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_Const(void) { /* Fire Const */ iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_RotateCW = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_RotateCCW = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_Drive = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_initializeIRobot_in = 0; } void iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn(void) { /* Fire Composite Actor: PowerOn */ /* SDFDirector: Transfer tokens to the inside. */ /* SDFDirector: Transfer tokens to the inside. */ /* SDFDirector: Transfer tokens to the inside. */ /* SDFDirector: Transfer tokens to the inside. */ /* SDFDirector: Transfer tokens to the inside. */ /* SDFDirector: Transfer tokens to the inside. */ /* SDFDirector: Transfer tokens to the inside. */ /* SDFDirector: Transfer tokens to the inside. */ /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_Const(); iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_initializeIRobot(); /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_RotateCW = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_RotateCW; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_RotateCCW = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_RotateCCW; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_Drive_0 = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_Drive; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = InttoDouble(iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_Drive_0); iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_Drive = InttoDouble(iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_Drive_0); } void iRobotCreateCodeGenExperimental_iRobotCtrl(void) { /* Fire Composite Actor: iRobotCtrl */ /* Transfer tokens to the inside */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccLC = iRobotCreateCodeGenExperimental_iRobotCtrl_AccLC; /* Transfer tokens to the inside */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccLN = iRobotCreateCodeGenExperimental_iRobotCtrl_AccLN; /* Transfer tokens to the inside */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccLS = iRobotCreateCodeGenExperimental_iRobotCtrl_AccLS; /* Transfer tokens to the inside */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccRC = iRobotCreateCodeGenExperimental_iRobotCtrl_AccRC; /* Transfer tokens to the inside */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccRN = iRobotCreateCodeGenExperimental_iRobotCtrl_AccRN; /* Transfer tokens to the inside */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_AccRS = iRobotCreateCodeGenExperimental_iRobotCtrl_AccRS; /* Transfer tokens to the inside */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_EdgeLeft = iRobotCreateCodeGenExperimental_iRobotCtrl_EdgeLeft; /* Transfer tokens to the inside */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight = iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn_EdgeRight = iRobotCreateCodeGenExperimental_iRobotCtrl_EdgeRight; /* Preemptive Transition */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 1; switch (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState) { case 0: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 1: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 2: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 3: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 4: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 5: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 6: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 7: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 8: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 9: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 10: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 11: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 12: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 13: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 14: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 15: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 16: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 17: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; } if (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag == 0) { switch (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState) { case 0: break; case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; case 8: break; case 9: break; case 10: break; case 11: break; case 12: break; case 13: break; case 14: break; case 15: break; case 16: break; case 17: iRobotCreateCodeGenExperimental_iRobotCtrl_PowerOn(); break; } /* Nonpreemptive Transition */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 1; switch (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState) { case 0: iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; break; case 1: if ((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 1)) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 11; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 15; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 16; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 16; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 12; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 12; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 12; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 12; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 12; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 2: if ((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 1)) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 11; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 8; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 0; } else if ((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 1)) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 10; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 3: if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 0; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 13; } else if ((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 1)) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 11; } else if ((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 1)) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 10; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 14; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 14; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 4: if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 9; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 9; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 9; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 9; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 9; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 14; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 13; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 14; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 5: if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 15; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 16; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 16; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 12; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 12; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 12; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 12; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeRight == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 12; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 6: if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 8; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 13; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 14; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 14; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 8; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 8; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 8; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 8; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 7: if ((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 1)) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 10; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 9; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 14; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 14; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLC == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 13; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRN == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 9; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLN == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 9; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRS == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 9; } else if (((iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_EdgeLeft == 0) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccLS == 1) && (iRobotCreateCodeGenExperimental_iRobotCtrl__Controller_AccRC == 1))) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 9; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 8: if (true) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 1; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 6; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 9: if (true) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 1; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 4; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 10: if (true) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 1; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 7; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 11: if (true) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 1; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 1; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 12: if (true) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 1; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 5; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 13: if (true) { iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 1; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 3; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 14: if (true) { iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 1.414; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 3; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 15: if (true) { iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 1; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 3; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 16: if (true) { iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 1.414; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 3; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; case 17: if (true) { iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW = iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = 0; iRobotCreateCodeGenExperimental_iRobotCtrl_Drive = iRobotCreateCodeGenExperimental_iRobotActuator_Drive = 0; iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 2; } else { iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__transitionFlag = 0; } break; } } /* Transfer tokens to the outside */ iRobotCreateCodeGenExperimental_iRobotActuator_RotateCW = iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCW; /* Transfer tokens to the outside */ iRobotCreateCodeGenExperimental_iRobotActuator_RotateCCW = iRobotCreateCodeGenExperimental_iRobotCtrl_RotateCCW; /* Transfer tokens to the outside */ iRobotCreateCodeGenExperimental_iRobotActuator_Drive = iRobotCreateCodeGenExperimental_iRobotCtrl_Drive; /* Transfer tokens to the outside */ } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC_EmbeddedActor(void) { /* Fire EmbeddedActor */ ADCSRA |= 0x40; while(ADCSRA & 0x40) ; // The ADC output is 10 bits unsigned, or 0 to 1023. // Normalize here. // FIXME: Why reverse the polarity? //iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC_left = 10 + 512 - ADC; iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC_left = 512 - ADC; ADMUX = (_BV(REFS0) | 0x06); // Change ADC mux to read other channel // Sample the Y accelerometer, pointed 45 degrees right of forward, on channel 6 ADCSRA |= 0x40; while(ADCSRA & 0x40) ; // iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC_right = 10 + 512 - ADC; iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC_right = 512 - ADC; ADMUX = (_BV(REFS0) | 0x07); // Change ADC mux back to read first channel } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC(void) { /* Fire Composite Actor: ADC */ /* SDFDirector: Transfer tokens to the inside. */ /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC_EmbeddedActor(); /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression_left = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression3_left = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression5_left = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC_left; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression2_right = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression4_right = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression6_right = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC_right; } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression(void) { /* Fire Expression */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything_input = (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression_left > (0+5)); } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression2(void) { /* Fire Expression2 */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything4_input = (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression2_right > (0+5)); } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression3(void) { /* Fire Expression3 */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything3_input = (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression3_left < (0-5)); } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression4(void) { /* Fire Expression4 */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything6_input = (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression4_right < (0-5)); } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression5(void) { /* Fire Expression5 */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything2_input = ((iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression5_left <= (0+5)) && (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression5_left >= (0-5))); } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression6(void) { /* Fire Expression6 */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything5_input = ((iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression6_right <= (0+5)) && (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression6_right >= (0-5))); } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything(void) { /* Fire BooleanToAnything */ if (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything_input) { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLC = 1; } else { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLC = 0; } } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything2(void) { /* Fire BooleanToAnything2 */ if (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything2_input) { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLN = 1; } else { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLN = 0; } } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything3(void) { /* Fire BooleanToAnything3 */ if (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything3_input) { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLS = 1; } else { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLS = 0; } } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything4(void) { /* Fire BooleanToAnything4 */ if (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything4_input) { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRC = 1; } else { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRC = 0; } } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything5(void) { /* Fire BooleanToAnything5 */ if (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything5_input) { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRN = 1; } else { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRN = 0; } } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything6(void) { /* Fire BooleanToAnything6 */ if (iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything6_input) { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRS = 1; } else { iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRS = 0; } } void iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing(void) { /* Fire Composite Actor: AccelerometerSignalProcessing */ /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_ADC(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression6(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything5(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression4(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything6(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression2(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything4(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression5(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything2(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression3(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything3(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression(); iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_BooleanToAnything(); /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_AccLC = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLC; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_AccRC = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRC; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_AccRN = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRN; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_AccRS = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccRS; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_AccLN = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLN; /* SDFDirector: Transfer tokens to the outside. */ iRobotCreateCodeGenExperimental_iRobotCtrl_AccLS = iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_AccLS; } void iRobotCreateCodeGenExperimental(void) { /* Fire Composite Actor: iRobotCreateCodeGenExperimental */ /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing(); iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing(); iRobotCreateCodeGenExperimental_iRobotCtrl(); iRobotCreateCodeGenExperimental_iRobotActuator(); } void initialize(void) { /* initEmbeddedActor */ // Initialize the microcontroller initializeRobot(); // Turn on the Create power if off powerOnRobot(); // Start the open interface byteTx(CmdStart); // Change to 28800 baud baud28k(); // Take full control of the Create byteTx(CmdFull); // Get rid of unwanted data in the serial port receiver flushRx(); /* The initialization of the director. */ /* The initialization of the director. */ /* The initialization of the director. */ /* initEmbeddedActor */ // Set the sensor data to be all zero. // This initializes the buffer that gets // filled by the interrupt service routine that // reads from the serial port. for(int i = 0; i < Sen6Size; i++) { sensors[i] = 0x0; } /* The initialization of the director. */ /* The initialization of the director. */ /* initEmbeddedActor */ // As a precaution, stop driving. // RadStraight = 32768, the code for no turns. drive(0, RadStraight); /* The initialization of the director. */ /* initEmbeddedActor */ // As a precaution, stop driving. // RadStraight = 32768, the code for no turns. drive(0, RadStraight); /* The initialization of the director. */ /* initEmbeddedActor */ // As a precaution, stop driving. // RadStraight = 32768, the code for no turns. drive(0, RadStraight); /* The initialization of the director. */ iRobotCreateCodeGenExperimental_iRobotCtrl__Controller__currentState = 17; /* The initialization of the director. */ /* initEmbeddedActor */ // As a precaution, stop driving. // RadStraight = 32768, the code for no turns. drive(0, RadStraight); /* The initialization of the director. */ /* The initialization of the director. */ // Perform initial rounding detection DIDR0 |= 0x20; // disable digital input on C5 PRR &= ~_BV(PRADC); // Turn off ADC power save ADCSRA = (_BV(ADEN) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0)); // Enabled, prescaler = 128 ADMUX = (_BV(REFS0) | 0x07); // set voltage reference, select channel C7 (was C5, modified by Winthrop) // First channel read by ADC will be the one specified on the line above. ADCSRA |= 0x40; while(ADCSRA & 0x40) ; int leftValue; int rightValue; // The ADC output is 10 bits unsigned, or 0 to 1023. // Normalize here. // FIXME: Why reverse the polarity? leftValue = 512 - ADC; ADMUX = (_BV(REFS0) | 0x06); // Change ADC mux to read other channel // Sample the Y accelerometer, pointed 45 degrees right of forward, on channel 6 ADCSRA |= 0x40; while(ADCSRA & 0x40) ; rightValue = 512 - ADC; ADMUX = (_BV(REFS0) | 0x07); // Change ADC mux back to read first channel while((rightValue>10)||(rightValue<-10)){ drive2(20, RadCCW ); delay10ms(20); ADCSRA |= 0x40; while(ADCSRA & 0x40) ; // The ADC output is 10 bits unsigned, or 0 to 1023. // Normalize here. // FIXME: Why reverse the polarity? leftValue = 512 - ADC; ADMUX = (_BV(REFS0) | 0x06); // Change ADC mux to read other channel // Sample the Y accelerometer, pointed 45 degrees right of forward, on channel 6 ADCSRA |= 0x40; while(ADCSRA & 0x40) ; rightValue = 512 - ADC; ADMUX = (_BV(REFS0) | 0x07); // Change ADC mux back to read first channel } //drive2(20, RadStraight ); //delay10ms(20); /* The initialization of the director. */ /* The initialization of the director. */ /* initEmbeddedActor */ // Set up the ADC on pin C5 //DIDR0 |= 0x20; // disable digital input on C5 //PRR &= ~_BV(PRADC); // Turn off ADC power save //ADCSRA = (_BV(ADEN) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0)); // Enabled, prescaler = 128 //ADMUX = (_BV(REFS0) | 0x07); // set voltage reference, select channel C7 (was C5, modified by Winthrop) // First channel read by ADC will be the one specified on the line above. } boolean postfire(void) { /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* The postfire of the director. */ /* postfireExpression */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression__iterationCount++; /* postfireExpression2 */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression2__iterationCount++; /* postfireExpression3 */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression3__iterationCount++; /* postfireExpression4 */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression4__iterationCount++; /* postfireExpression5 */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression5__iterationCount++; /* postfireExpression6 */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing_Expression6__iterationCount++; return true; } void wrapup(void) { /* The wrapup of the director. */ /* The wrapup of the director. */ /* The wrapup of the director. */ /* wrapupEmbeddedActor */ /* The wrapup of the director. */ /* The wrapup of the director. */ /* wrapupEmbeddedActor */ /* The wrapup of the director. */ /* wrapupEmbeddedActor */ /* The wrapup of the director. */ /* wrapupEmbeddedActor */ /* The wrapup of the director. */ /* The wrapup of the director. */ /* wrapupEmbeddedActor */ /* The wrapup of the director. */ /* The wrapup of the director. */ /* wrapupEmbeddedActor */ /* The wrapup of the director. */ /* The wrapup of the director. */ /* wrapupEmbeddedActor */ } int main(int argc, char *argv[]) { initialize(); while (true) { /* The firing of the StaticSchedulingDirector */ iRobotCreateCodeGenExperimental_AccelerometerSignalProcessing(); iRobotCreateCodeGenExperimental_iRobotSensorSignalProcessing(); iRobotCreateCodeGenExperimental_iRobotCtrl(); iRobotCreateCodeGenExperimental_iRobotActuator(); if (!postfire()) { break; } } exit(0); }