Arduino to HCS12 Serial input POrt output..!!!!!!!!

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Arduino to HCS12 Serial input POrt output..!!!!!!!!

1,755 Views
Looney
Contributor I

Can someone help me tranlate the following code I found for Arduino to HC12 language... I am pretty much trying receive information using the serial input on the microcontroller to read the information and then process the following information back to PORTB. the project consist of a GUI that sends information using the arrow pad on the keyboard and translate that to the controller 4 ports which is Port B which will send 3.3v to another chip which will control the direction of a robot. I have attached some sample codes that I want to use in a word document.. that can be reviewed.. Please help.. I have attached what we have so far...

Labels (1)
0 Kudos
1 Reply

433 Views
Looney
Contributor I

Here is a sample code of what I am trying to accomplish from teh arduino..

#define DEBUG 0

#define WAIT_FOR_START 1

 

unsigned char incomingByte = 0;

unsigned long loop_count = 0;

unsigned char horn = 32;

unsigned char redLED = 64;

unsigned char greenLED = 128;

 

unsigned char forward = 1;

unsigned char backward = 2;

unsigned char left = 4;

unsigned char right = 8;

 

unsigned char PORTB_val;

unsigned char PORTD_val;

 

unsigned char in_char = 0;

 

void setup()

{

//PORTD = digital IO 0-7

//horn, redLED, greenLED

 

  pinMode(5, OUTPUT);      // sets the digital pin as output

  pinMode(6, OUTPUT);      // sets the digital pin as output

  pinMode(7, OUTPUT);      // sets the digital pin as output

 

//PORTB = digital IO 8 - 13 

//right, left, backwards, forward

 

  pinMode(8, OUTPUT);      // sets the digital pin as output

  pinMode(9, OUTPUT);      // sets the digital pin as output

  pinMode(10, OUTPUT);     // sets the digital pin as output

  pinMode(11, OUTPUT);     // sets the digital pin as output

 

  Serial.begin(9600);      // set up Serial library at 9600 bps

 

  PORTD = redLED;                 // turn on the red LED

 

  #if DEBUG

        flash_led(3,500);

  #endif

 

  wait_for_start();  //Waits for startup message from router serial port

                                       //continues after receiving it.

}

 

 

void flash_led(unsigned int count, unsigned int rate)

{

// debug routine that flashes an LED

 

 int n_count = 0;

 

 while (n_count < count)

 {

   n_count++;

   digitalWrite(13, HIGH);       // sets the LED on

   delay(rate);                  // waits for a bit

   digitalWrite(13, LOW);        // sets the LED off

   delay(rate);                  // waits for a bit

 }

}

 

char get_char()

{

//Function that waits for a character from the serial port

//If none are received, it returns 0.

//The timeout is so that if the router stops sending data to the microcontroller,

//the micrcontroller will stop driving the car, rather than just going forever with

//the last command.  Timeout is around 250mS.

 

  while (loop_count < 30000)

  {

    loop_count++;

 

    if (Serial.available() > 0)

    {

      incomingByte = Serial.read();

      loop_count = 0;

      return incomingByte;

    }

  } 

 

  loop_count = 0;

 

  #if DEBUG

        Serial.print('X', BYTE);

  #endif

 

  return 0;

}

 

unsigned char wait_for_start()

{

//Waits for startup message from router serial port

#if WAIT_FOR_START

 

  #if DEBUG

    Serial.println("Waiting...");

  #endif

 

  while(1)

  {

    if (get_char() == 'j' && get_char() == 'b' && get_char() == 'p' && get_char() == 'r' && get_char() == 'o')

  {

   

  #if DEBUG

      Serial.print("Passcode Accepted");

  #endif

 

      return 0;

    }

  }

#endif

}

 

void loop()                      

//Function that processes input from serial port and drives the car based

//on that input.

 

  in_char = get_char();

 

  //Split byte received in to upper and lower halves.

  PORTB_val = in_char & 0x0F;

  PORTD_val = in_char & 0xF0;

 

  //Make sure the greenLED is turned on now.

  if ((PORTD_val & greenLED) == 0)

  {

    PORTD_val = PORTD_val + greenLED;         

  }

 

  //The following IF statements are sanity checks to make sure that FORWARD and BACKWARD cannot be on at the same time

  //and that LEFT and RIGHT can't be on at the same time.

  if ((PORTB_val & (left + right)) == (left + right))

  {   

    PORTB_val = PORTB_val - right;   

  }

 

  if ((PORTB_val & (forward + backward)) == (forward + backward))

  {

    PORTB_val = PORTB_val - backward;

  }

 

  //Write the processed values to the ports.

  PORTD = PORTD_val;

  PORTB = PORTB_val;

 

  #if DEBUG

    Serial.print(PORTD, HEX);

    Serial.print(PORTB, HEX);

  #endif

 

}

0 Kudos