Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino.h>
- //#include "Digit.h"
- const unsigned short max_send_frequency = 20;
- #define BUFFER_SIZE 128
- #define TEST_DIODE 12
- void setup()
- {
- Serial.begin(9600); // opens serial port, sets data rate to 19200 bps
- Serial.setTimeout(1000); // sets the time to wait before stopping the receive functio
- pinMode(TEST_DIODE, OUTPUT);
- digitalWrite(TEST_DIODE, LOW);
- }
- inline void sendNumber(unsigned short x, byte* buffer, byte& buffer_pos) {
- buffer[buffer_pos++] = x & 0xff;
- buffer[buffer_pos++] = (x >> 8) & 0xff;
- }
- void loop()
- {
- // read the value from the sensor:
- //Digit d = Digit();
- //d.SetPin(10,8,7,6,4,3,9,5);
- //d.Init();
- short sensorValue = 0; // variable to store the value coming from the sensor
- int sensorPin = A0;
- unsigned long last_time_sent = millis();
- byte buffer[BUFFER_SIZE];
- byte buffer_pos = 0;
- boolean work = false;
- unsigned long work_timer = 0;
- // timeout to turn led off
- unsigned long led_timeout = 0;
- byte led_repeat = 0;
- byte led_interval = 0;
- //byte number = 0;
- while(1) {
- unsigned long now = millis();
- if(Serial.available()>=2) {
- byte data[2];
- Serial.readBytes((char*)data, 2);
- switch(data[0]) {
- //Toggle data stream
- case 0 : work = data[1];break;
- //reset comunication (in case of error)
- case 1 : buffer_pos=0;work=false;last_time_sent = now+10;work_timer=now+50;break;
- case 2 : digitalWrite(TEST_DIODE, HIGH);led_timeout=now+100*data[1]; break;
- case 3 : sendNumber(data[1]*4, buffer, buffer_pos);break;
- //default:break;
- }
- //digitalWrite(TEST_DIODE, HIGH);
- //led_timeout=now+100;
- //led_repeat = 4;
- //led_interval = 100;
- }
- if(led_timeout>0 && led_timeout<now) {
- led_timeout = 0;
- if(led_repeat==0) {
- digitalWrite(TEST_DIODE, LOW);
- }
- else {
- digitalWrite(TEST_DIODE, led_repeat%2==0?LOW:HIGH);
- led_timeout = now+led_interval;
- --led_repeat;
- }
- }
- // if(work_timer!=0&&work_timer<millis()) {
- // work_timer = 0;
- // work = true;
- // }
- if(work) {
- if(buffer_pos<BUFFER_SIZE-2) {
- sensorValue = analogRead(sensorPin);
- // d.DrawNumber((byte)((float)sensorValue/102.4));
- if(sensorValue<0 || sensorValue>1023) {
- buffer[buffer_pos++] = 1;
- buffer[buffer_pos++] = 4;
- }
- else {
- buffer[buffer_pos++] = sensorValue & 0xff;
- buffer[buffer_pos++] = (sensorValue >> 8) & 0xff;
- }
- }
- }
- if(now-last_time_sent>max_send_frequency && buffer_pos>0) {
- Serial.write(buffer, buffer_pos);
- buffer_pos = 0;
- last_time_sent = now;
- }
- else
- delay(1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement