NS.One RTOS Blink Serial ADC

Berikut adalah sebuah contoh lain, menggunakan tiga thread untuk menangani blink LED, pengiriman data serial dan pembacaan input analog dan mengirimkannya melalui serial.

#include <ChibiOS_AVR.h>

MUTEX_DECL(demoMutex);

static WORKING_AREA(waThread1, 16);

static msg_t Thread1(void *arg) {

  bitWrite(DDRA,PA7,OUTPUT);
  while (1) {
    bitWrite(PORTA,PA7,HIGH);
    chThdSleepMilliseconds(250);
    bitWrite(PORTA,PA7,LOW);
    chThdSleepMilliseconds(250);
  }
  return 0;
}

static WORKING_AREA(waThread2, 64);
static msg_t Thread2(void *arg) {

  while (1) {
    chThdSleepMilliseconds(1000);
    chMtxLock(&demoMutex);
    Serial.println(F("Hello"));
    chMtxUnlock();
  }
}

static WORKING_AREA(waThread3, 64);
static msg_t Thread3(void *arg) {

  while (1) {
    chThdSleepMilliseconds(1000);
    int adc = analogRead(0);
    chMtxLock(&demoMutex);
    Serial.print(F("ADC: "));
    Serial.println(adc);
    chMtxUnlock();
  }
}

void setup() {

  Serial.begin(9600);
  chBegin(mainThread);
  while(1) {}
}

void mainThread() {

  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 2, Thread1, NULL);
  chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO + 2, Thread2, NULL);
  chThdCreateStatic(waThread3, sizeof(waThread3), NORMALPRIO + 1, Thread3, NULL);

  while (1) {
  }
}

void loop() {
 // not used
}

Untuk informasi lebih lanjut mengenai NS.One dan pelatihannya, bisa menghubungi:

NEXT SYSTEM
Padepokan Robot Bandung
ITC Kosambi Ruko F2
Jalan Baranang Siang 6-8, Bandung 40112
Tel. (022) 4222062, (022) 70775874
Email: info at nextsys.web.id