Search code examples
arduinoserial-portarduino-unocomm

Arduino program that allows me to change state through comm port?


new here! been recommended many times to come here for help so here I am.

I'm supposed to write a program that allows me to change the rate of a blinking LED light through the comm port. I'm sure this is easy but I've honestly got no clue as I am behind in this class.

anything would help really, i honestly want to learn how to do this, not just come here and get the answer.

thanks in advanced!

    // global variables
      #include <EEPROM.h>
     unsigned long ms_runtime;
     int state;
       // possible values 0 -> 1 -> 2 -> 3 -> 0
     int one_ms_timer;
//  define all timers as unsigned long (they are incremented every 100ms = 0.1s)
unsigned long timer1;
unsigned long button_dbnc_tmr = 0;
//  timer1 is used for blinking LED
const int LED1 = 13;
// function prototypes
void read_memory(void);
void update_memory(void);
void comm_control(void);
void led_control(void);
void turnoff(void);
void flash_1s(void);
void flash_2s(void);
void flash_3s(void);
void timers(void);

void setup()
{
        read_memory();
        pinMode(LED1, OUTPUT);
        Serial.begin(9600);
        //initialize uart
}
void loop()
{
    static bool allow_change;
    static int counter;
    timers();
    comm_control();
    led_control();

}
void led_control()
{
    switch (state)

    {
    case 0:
        turnoff();
        break;
    case 1:
        flash_1s();
        break;
    case 2:
        flash_2s();
        break;
    case 3:
        flash_3s();
        break;
    }
}

void turnoff()
{
    digitalWrite(LED1, LOW);
}
void flash_1s()
{
    if (timer1 < 10)
        digitalWrite(LED1, HIGH);
    else
    {
        digitalWrite(LED1, LOW);
        if (timer1 >= 20)
            timer1 = 0;
    }
}
void flash_2s()
{
    if (timer1<20)
        digitalWrite(LED1, HIGH);
    else
    {
        digitalWrite(LED1, LOW);
        if (timer1 >= 30)
            timer1 = 0;
    }
}
void flash_3s()
{
    if (timer1<30)
        digitalWrite(LED1, HIGH);
    else
    {
        digitalWrite(LED1, LOW);
        if (timer1 >= 40)
            timer1 = 0;
    }
}
void read_memory()
{
    timer1 = EEPROM.read(one_ms_timer);
    timer1++;
    EEPROM.write(one_ms_timer, timer1);
    Serial.begin(9600);
}
void update_memory()
{
    EEPROM.update(timer1, one_ms_timer);
}
void comm_control(void);
{
    char comm_reveier = serial_read;
    if (
        )
}
void timers(void)
{
    if (millis() > (ms_runtime + 1))
    {
        ms_runtime = ms_runtime + 1;
        one_ms_timer++;
    }
    else if (ms_runtime > millis())
        ms_runtime = millis();

    if (one_ms_timer > 99) //every 100 ms
    {
        one_ms_timer = 0;
        button_dbnc_tmr++;
        timer1++;
    }
}

Solution

  • Load the Standard Firmata library on your Arduino board. Then use a library of your choice to build your comm prog. An overview of these can be found here.