added examples to determine direction of light and basic find a friend (wip: needs additional movement functions)

This commit is contained in:
hhaupt 2024-04-28 19:48:29 +02:00
parent 8cb33e3096
commit 1af07ecd91
7 changed files with 100 additions and 6 deletions

View File

@ -0,0 +1,8 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
"version": "0.2.0",
"configurations": [
]
}

View File

@ -0,0 +1,48 @@
#include "Dezibot.h"
Dezibot dezibot = Dezibot();
const int centeredThreshold = 100;
void setup() {
// put your setup code here, to run once:
dezibot.begin();
Serial.begin(115200);
}
void loop() {
int32_t leftValue = (int32_t)dezibot.lightDetection.getAverageValue(IR_LEFT, 20, 1);
int32_t rightValue = (int32_t)dezibot.lightDetection.getAverageValue(IR_RIGHT, 20, 1);
switch(dezibot.lightDetection.getBrightest(IR)){
case IR_FRONT:
//correct Stearing to be centered
if( abs(leftValue-rightValue)
< centeredThreshold){
dezibot.motion.move(1);
}else{
if (leftValue > rightValue){
dezibot.motion.rotateAnticlockwise(1);
} else{
dezibot.motion.rotateClockwise(1);
}
}
dezibot.multiColorLight.setTopLeds(BLUE);
break;
case IR_LEFT:
dezibot.motion.rotateAnticlockwise(1);
dezibot.multiColorLight.setTopLeds(RED);
break;
case IR_RIGHT:
dezibot.motion.rotateClockwise(1);
dezibot.multiColorLight.setTopLeds(GREEN);
break;
case IR_BACK:
if(leftValue > rightValue){
dezibot.motion.rotateAnticlockwise(1);
} else {
dezibot.motion.rotateClockwise(1);
}
dezibot.multiColorLight.setTopLeds(YELLOW);
break;
}
//delay(100);
}

View File

@ -0,0 +1,35 @@
#include "Dezibot.h"
Dezibot dezibot = Dezibot();
void setup() {
// put your setup code here, to run once:
dezibot.begin();
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.print("Front:");
Serial.print(dezibot.lightDetection.getAverageValue(IR_FRONT,20,1));
Serial.print(",Left:");
Serial.print(dezibot.lightDetection.getAverageValue(IR_LEFT,20,1));
Serial.print(",Right:");
Serial.print(dezibot.lightDetection.getAverageValue(IR_RIGHT,20,1));
Serial.print(",Back:");
Serial.println(dezibot.lightDetection.getAverageValue(IR_BACK,20,1));
switch(dezibot.lightDetection.getBrightest(IR)){
case IR_FRONT:
dezibot.multiColorLight.setTopLeds(BLUE);
break;
case IR_LEFT:
dezibot.multiColorLight.setTopLeds(RED);
break;
case IR_RIGHT:
dezibot.multiColorLight.setTopLeds(GREEN);
break;
case IR_BACK:
dezibot.multiColorLight.setTopLeds(YELLOW);
break;
}
//delay(100);
}

View File

@ -13,6 +13,6 @@ dezibot.multiColorLight.setLed(TOP_RIGHT,dezibot.multiColorLight.color(0,100,0))
dezibot.multiColorLight.blink(10,0x00FF0000,BOTTOM,500); dezibot.multiColorLight.blink(10,0x00FF0000,BOTTOM,500);
delay(1000); delay(1000);
dezibot.multiColorLight.turnOff(ALL); dezibot.multiColorLight.turnOffLed(ALL);
delay(1000); delay(1000);
} }

View File

@ -2,7 +2,7 @@
Dezibot dezibot = Dezibot(); Dezibot dezibot = Dezibot();
void setup() { void setup() {
dezibot.begin(); dezibot.begin();
Serial.begin(9600); Serial.begin(115200);
} }
void loop() { void loop() {
Serial.println("bla"); Serial.println("bla");

View File

@ -12,7 +12,7 @@
#include "Dezibot.h" #include "Dezibot.h"
Dezibot::Dezibot():multiColorLight(){ Dezibot::Dezibot():multiColorLight(){};
void Dezibot::begin(void) { void Dezibot::begin(void) {
infraredLight.begin(); infraredLight.begin();
@ -21,4 +21,4 @@ void Dezibot::begin(void) {
multiColorLight.begin(); multiColorLight.begin();
}; };
};

View File

@ -47,6 +47,7 @@ photoTransistors LightDetection::getBrightest(ptType type){
}; };
uint32_t LightDetection::getAverageValue(photoTransistors sensor, uint32_t measurments, uint32_t timeBetween){ uint32_t LightDetection::getAverageValue(photoTransistors sensor, uint32_t measurments, uint32_t timeBetween){
TickType_t xLastWakeTime = xTaskGetTickCount(); TickType_t xLastWakeTime = xTaskGetTickCount();
TickType_t frequency = timeBetween / portTICK_PERIOD_MS; TickType_t frequency = timeBetween / portTICK_PERIOD_MS;
uint64_t cumulatedResult = 0; uint64_t cumulatedResult = 0;
@ -58,6 +59,7 @@ uint32_t LightDetection::getAverageValue(photoTransistors sensor, uint32_t measu
}; };
void LightDetection::beginInfrared(void){ void LightDetection::beginInfrared(void){
digitalWrite(IR_PT_ENABLE,true);
pinMode(IR_PT_ENABLE, OUTPUT); pinMode(IR_PT_ENABLE, OUTPUT);
pinMode(IR_PT_FRONT_ADC, INPUT); pinMode(IR_PT_FRONT_ADC, INPUT);
pinMode(IR_PT_LEFT_ADC, INPUT); pinMode(IR_PT_LEFT_ADC, INPUT);
@ -66,13 +68,14 @@ void LightDetection::beginInfrared(void){
}; };
void LightDetection::beginDaylight(void){ void LightDetection::beginDaylight(void){
digitalWrite(DL_PT_ENABLE,true);
pinMode(DL_PT_ENABLE, OUTPUT); pinMode(DL_PT_ENABLE, OUTPUT);
pinMode(DL_PT_BOTTOM_ADC, INPUT); pinMode(DL_PT_BOTTOM_ADC, INPUT);
pinMode(DL_PT_FRONT_ADC, INPUT ); pinMode(DL_PT_FRONT_ADC, INPUT );
}; };
uint16_t LightDetection::readIRPT(photoTransistors sensor){ uint16_t LightDetection::readIRPT(photoTransistors sensor){
digitalWrite(IR_PT_ENABLE,HIGH); //digitalWrite(IR_PT_ENABLE,HIGH);
uint16_t result = 0; uint16_t result = 0;
switch (sensor) switch (sensor)
{ {
@ -91,7 +94,7 @@ uint16_t LightDetection::readIRPT(photoTransistors sensor){
default: default:
break; break;
} }
digitalWrite(IR_PT_ENABLE,LOW); //digitalWrite(IR_PT_ENABLE,LOW);
return result; return result;
}; };