Pages: [1]   Go Down
Author Topic: Error while trying to use scheduler.startLoop in scheduler library ardiuno DUE  (Read 532 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi there guys!

I am new to using the ardiuno due. (just got it in today) I am actually having a bit of trouble trying to compile the code. I changed the Wprogram.h to Arduino.h and the example sketch compiles fine. The problem starts when I try to compile the sketch using Scheduler.startLoop.
The error that pops up is: expected unqualified-id before '.' token. and it highlights Scheduler.startLoop
{I am trying to run two loops simultaneously where one displays the pressure sensor value from a load cell and the other displays a desired value (input from the serial monitor). }
I would really appreciate it if some one could help me out with what is it exactly that I am doing wrong! The code is as follows.

#include <Scheduler.h>
//variables for actual_value
const int digitPins1[4] = {
  4, 5, 6
};                     //4 common anode pins of the actual_value
const int clockPin1 = 11;    //74HC595 Pin 11
const int latchPin1 = 12;    //74HC595 Pin 12
const int dataPin1 = 13;     //74HC595 Pin 14
const int pressurePin = A0;  //pressure sensor pin
const byte digit1[10] =      //actual seven segment digits in bits
{
  B00111111, //0
  B00000110, //1
  B01011011, //2
  B01001111, //3
  B01100110, //4
  B01101101, //5
  B01111101, //6
  B00000111, //7
  B01111111, //8
  B01101111  //9
};
int digitBuffer1[3] = {
  0
};
int digitScan1 = 0;
float pressureValue;

//variables for desired_display

const int digitPins2[3] = {
  A1, A2, A3
};                 //4 common anode pins of the desired_display
const int clockPin2 = 11;    //74HC595-2 Pin 11
const int latchPin2 = 12;    //74HC595-2 Pin 12
const int dataPin2 = 13;     //74HC595-2 Pin 14
const byte digit2[10] =      //desired seven segment digits in bits
{
  B00111111, //0
  B00000110, //1
  B01011011, //2
  B01001111, //3
  B01100110, //4
  B01101101, //5
  B01111101, //6
  B00000111, //7
  B01111111, //8
  B01101111  //9
};
int digitBuffer2[3] = {
  0
};
int digitScan2 = 0;
unsigned int desiredValue = 0; //desiredValue input from the computer using se
char incomingByte;

void setup() {
  Scheduler.startLoop(loop1);
  //setup for actual_display
  for (int i = 0; i < 3; i++)
  {
    pinMode(digitPins1, OUTPUT);
  }
  pinMode(pressurePin, INPUT);
  pinMode(latchPin1, OUTPUT);
  pinMode(clockPin1, OUTPUT);
  pinMode(dataPin1, OUTPUT);

  //setup for desired_display
  for (int i = 0; i < 3; i++)
  {
    pinMode(digitPins2, OUTPUT);
  }
  pinMode(latchPin2, OUTPUT);
  pinMode(clockPin2, OUTPUT);
  pinMode(dataPin2, OUTPUT);
}

//writes the actual_pressure value on display
void updateDispActual() {
  for (byte j = 0; j < 3; j++)
    digitalWrite(digitPins1[j], LOW);

  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, B11111111);
  digitalWrite(latchPin1, HIGH);

  delayMicroseconds(100);
  digitalWrite(digitPins1[digitScan1], HIGH);

  digitalWrite(latchPin1, LOW);

  shiftOut(dataPin1, clockPin1, MSBFIRST, ~digit1[digitBuffer1[digitScan1]]);

  digitalWrite(latchPin1, HIGH);
  digitScan1++;
  if (digitScan1 > 2) digitScan1 = 0;
}
//wrties desired_pressure value to display
void updateDispDesired() {
  for (byte j = 0; j < 3; j++)
    digitalWrite(digitPins2[j], LOW);

  digitalWrite(latchPin2, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, B11111111);
  digitalWrite(latchPin2, HIGH);

  delayMicroseconds(100);
  digitalWrite(digitPins2[digitScan2], HIGH);

  digitalWrite(latchPin2, LOW);

  shiftOut(dataPin2, clockPin2, MSBFIRST, ~digit2[digitBuffer2[digitScan2]]);

  digitalWrite(latchPin2, HIGH);
  digitScan2++;
  if (digitScan2 > 2) digitScan2 = 0;
}

void loop() {
  //converts digital value read by adc to kg
  pressureValue = (((analogRead(pressurePin) / 1023.0) * 5.0) / 0.0099);
  //pressure value display
  pressureValue = int(pressureValue);
  digitBuffer1[2] = int(pressureValue) / 1000;
  digitBuffer1[1] = (int(pressureValue) % 100) / 10;
  digitBuffer1[0] = (int(pressureValue) % 10);
  updateDispActual();
  delay(2);
}

void loop1() {
  if (Serial.available() > 0) {   // something came across serial
    desiredValue = 0;         // throw away previous integerValue
    while (1) {           // force into a loop until 'n' is received
      incomingByte = Serial.read();
      if (incomingByte == '\n') break;   // exit the while(1), we're done receiving
      if (incomingByte == -1) continue;  // if no characters are in the buffer read() returns -1
      desiredValue *= 10;  // shift left 1 decimal place
      // convert ASCII to integer, add, and shift left 1 decimal place
      desiredValue = int(((incomingByte - 48) + desiredValue));
      if (desiredValue > 420)
        desiredValue = 420;

      Serial.println(desiredValue);
    }
  }

  digitBuffer2[2] = int(desiredValue) / 100;
  digitBuffer2[1] = (int(desiredValue) % 100) / 10;
  digitBuffer2[0] = (int(desiredValue) % 10);
  updateDispDesired();
  delay(2);

  yield();
}
« Last Edit: February 20, 2014, 01:03:43 pm by alibaba9292 » Logged

Venezuela
Offline Offline
God Member
*****
Karma: 17
Posts: 522
Ground, ground, always ground
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello alibaba9292,

Wprogram.h? I am not sure but it seems to me that you are using the Arduino Schedule library for AVR.
http://playground.arduino.cc/Code/Scheduler

This library is not intended for Arduino DUE (SAM based).

The IDE 1.5.x has its own scheduler library. Why not try the MultipleBlinks example as a start point?.
File->Examples->Scheduler

Regards, Palliser
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Palliser
THANK YOU!!!!!!!!!!!!!!!!!!!!!!! I am so stupid that is exactly what I was doing smiley-grin
cant thank you enough for your help smiley-grin
I think now should be able to ace my final year project! everything was working well individually. What I couldnt find was was a way to concurrently do all my 3 functions; display desired pressure value, display current pressure value and the third being a control loop to to reach desired value.
Logged

Pages: [1]   Go Up
Jump to: