first commit
This commit is contained in:
116
nuvia.ino
Normal file
116
nuvia.ino
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
#include <Wire.h>
|
||||||
|
#include <VL53L0X.h>
|
||||||
|
// 20 teeth to 125 = 6.25 at 1/8 steps = 10000 steps per revolution = 251mm at 80mm diameter = ca. 36000 steps for 900mm
|
||||||
|
|
||||||
|
#define LIMITUP 2700
|
||||||
|
#define LIMITDOWN 1800
|
||||||
|
|
||||||
|
#define STEP 6
|
||||||
|
#define DIR 7
|
||||||
|
#define ENABLE 1
|
||||||
|
|
||||||
|
#define LEDWW 14
|
||||||
|
#define LEDCW 10
|
||||||
|
|
||||||
|
#define REFERENCE 18
|
||||||
|
|
||||||
|
VL53L0X sensor;
|
||||||
|
|
||||||
|
volatile bool referenced = false;
|
||||||
|
int maxSteps = floor((LIMITUP - LIMITDOWN) * (10000/251));
|
||||||
|
volatile int position = 0;
|
||||||
|
int newPosition = 0;
|
||||||
|
volatile int distance = 10000;
|
||||||
|
volatile bool setup_finished = false;
|
||||||
|
|
||||||
|
void step(bool dir = false, int del = 1000){
|
||||||
|
if(dir) digitalWrite(DIR, HIGH);
|
||||||
|
if(!dir) digitalWrite(DIR, LOW);
|
||||||
|
|
||||||
|
if(!dir) position++;
|
||||||
|
if(dir) position--;
|
||||||
|
//Serial.println(position);
|
||||||
|
digitalWrite(STEP, HIGH);
|
||||||
|
delayMicroseconds(del);
|
||||||
|
digitalWrite(STEP, LOW);
|
||||||
|
delayMicroseconds(del);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
// put your setup code here, to run once:
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
delay(1000);
|
||||||
|
|
||||||
|
pinMode(STEP, OUTPUT);
|
||||||
|
pinMode(DIR, OUTPUT);
|
||||||
|
pinMode(ENABLE, OUTPUT);
|
||||||
|
pinMode(REFERENCE, INPUT_PULLUP);
|
||||||
|
|
||||||
|
Wire.setSDA(16);
|
||||||
|
Wire.setSCL(17);
|
||||||
|
Wire.begin();
|
||||||
|
|
||||||
|
// for(int i = 0; i < 10000; i++){ // 10000 steps = 1 revolution
|
||||||
|
// step(true);
|
||||||
|
// }
|
||||||
|
sensor.setTimeout(500);
|
||||||
|
if (!sensor.init())
|
||||||
|
{
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
Serial.println("Failed to detect and initialize sensor!");
|
||||||
|
delay(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sensor.setSignalRateLimit(0.1);
|
||||||
|
sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
|
||||||
|
sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
|
||||||
|
|
||||||
|
//analogWrite(LEDCW, 25);
|
||||||
|
//analogWrite(LEDWW, 25);
|
||||||
|
delay(1000);
|
||||||
|
digitalWrite(ENABLE, LOW);
|
||||||
|
setup_finished = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup1(){}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
distance = sensor.readRangeSingleMillimeters();
|
||||||
|
Serial.print(distance);
|
||||||
|
Serial.print("\t");
|
||||||
|
Serial.println(position);
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t counter = 0;
|
||||||
|
uint32_t last = 0;
|
||||||
|
uint32_t next = 0;
|
||||||
|
|
||||||
|
void loop1(){
|
||||||
|
if(setup_finished){
|
||||||
|
if(!referenced){
|
||||||
|
if(digitalRead(REFERENCE) == HIGH) {
|
||||||
|
digitalWrite(ENABLE, LOW);
|
||||||
|
analogWrite(LEDCW, 0);
|
||||||
|
analogWrite(LEDWW, 25);
|
||||||
|
step(true);
|
||||||
|
} else {
|
||||||
|
referenced = true;
|
||||||
|
position = 0;
|
||||||
|
analogWrite(LEDCW, 50);
|
||||||
|
delay(100);
|
||||||
|
analogWrite(LEDCW, 25);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(position == newPosition){
|
||||||
|
newPosition = random(0, maxSteps);
|
||||||
|
} else {
|
||||||
|
if(position > newPosition) step(true, 1500);
|
||||||
|
if(position < newPosition) step(false, 1500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user