2019年6月10日月曜日

ロボットカーメモ

//PIN Assign
#define FRONT_SENSOR     14
#define SIDE_SENSOR      15
#define RIGHT_WHEEL1     16
#define RIGHT_WHEEL2     22
#define LEFT_WHEEL1      13
#define LEFT_WHEEL2      12
#define SPEED_PWM        17
//PWM Channel
#define SPEED_PWM_CH1   0
#define LEDC_TIMER_8_BIT  8
#define LEDC_BASE_FREQ  500

//センサー用変数
const int maxCount           = 2;
int count                    = 0;
int currentFrontSensorValue  = 0;
int previousFrontSensorValue = 0;
int currentSideSensorValue   = 0;
int previousSideSensorValue  = 0;

void task0(void* param) {
  ExecuteSensorRead();
}

void ExecuteSensorRead() {
  int frontAverageValue = 0;
  int sideAverageValue  = 0;
  while (1) {
    //Sensor Read
    frontAverageValue += analogRead(FRONT_SENSOR);
    sideAverageValue  += analogRead(SIDE_SENSOR);
    count++;

    if (count == maxCount) {
      previousFrontSensorValue = currentFrontSensorValue;
      previousSideSensorValue  = currentSideSensorValue;
      currentFrontSensorValue  = frontAverageValue / count;
      currentSideSensorValue   = sideAverageValue  / count;     
      frontAverageValue = sideAverageValue = 0;
      count = 0;
      Serial.print("front :");
      Serial.print(currentFrontSensorValue);
      Serial.print(", side :");
      Serial.println(currentSideSensorValue);
    }
    delay(100);
  }
}

//Motor Control
void MoveForward(int delayMs) {
  digitalWrite(RIGHT_WHEEL1, HIGH);
  digitalWrite(RIGHT_WHEEL2, LOW);
  digitalWrite(LEFT_WHEEL1 , LOW);
  digitalWrite(LEFT_WHEEL2 , HIGH);
  delay(delayMs);
}
void MoveBack(int delayMs) {
  digitalWrite(RIGHT_WHEEL1, LOW);
  digitalWrite(RIGHT_WHEEL2, HIGH);
  digitalWrite(LEFT_WHEEL1 , HIGH);
  digitalWrite(LEFT_WHEEL2 , LOW);
  delay(delayMs);
}
void TurnLeft(int delayMs) {
  digitalWrite(RIGHT_WHEEL1, LOW);
  digitalWrite(RIGHT_WHEEL2, HIGH);
  digitalWrite(LEFT_WHEEL1 , LOW);
  digitalWrite(LEFT_WHEEL2 , HIGH);
  delay(delayMs);
}
void TurnRight(int delayMs) {
  digitalWrite(RIGHT_WHEEL1, HIGH);
  digitalWrite(RIGHT_WHEEL2, LOW);
  digitalWrite(LEFT_WHEEL1 , HIGH);
  digitalWrite(LEFT_WHEEL2 , LOW);
  delay(delayMs);
}
void Brake(int delayMs) {
  digitalWrite(RIGHT_WHEEL1, HIGH);
  digitalWrite(RIGHT_WHEEL2, HIGH);
  digitalWrite(LEFT_WHEEL1 , HIGH);
  digitalWrite(LEFT_WHEEL2 , HIGH);
  delay(delayMs);
}
void Stop(int delayMs) {
  digitalWrite(RIGHT_WHEEL1, LOW);
  digitalWrite(RIGHT_WHEEL2, LOW);
  digitalWrite(LEFT_WHEEL1 , LOW);
  digitalWrite(LEFT_WHEEL2 , LOW);
  delay(delayMs);
}

void setup() {
  Serial.begin(9600);
  delay(100);
  pinMode(FRONT_SENSOR, INPUT);
  pinMode(SIDE_SENSOR , INPUT);
  pinMode(RIGHT_WHEEL1, OUTPUT);
  pinMode(RIGHT_WHEEL2, OUTPUT);
  pinMode(LEFT_WHEEL1 , OUTPUT);
  pinMode(LEFT_WHEEL2 , OUTPUT);
  ledcSetup(SPEED_PWM_CH1, LEDC_BASE_FREQ, LEDC_TIMER_8_BIT);
  ledcAttachPin(SPEED_PWM, SPEED_PWM_CH1);
  xTaskCreatePinnedToCore(task0, "Task0", 4096, NULL, 1, NULL, 0);
  Brake(5000);
}

void loop() {
  for(int i=0; i<6; i++){
    ledcWrite(SPEED_PWM_CH1, i*50);
    MoveForward(1000);
    if(i==5){
      Brake(1000);
    }
  }
  /*
  //正面に障害物あり
  if(currentFrontSensorValue > 2500){
    Serial.println("Detect Object in Front");
    Brake(200);
    TurnLeft(1000);
    Brake(200);
  }
 
  //側面に壁がない
  else if(currentSideSensorValue < 1000){
    if(previousSideSensorValue < 1000){
      MoveForwarad(500);
    }
    Brake(100);
    TurnRight(2500);
  } 
  else if(currentSideSensorValue > 3500){
    Serial.println("Detect Object On the Side");
    TurnLeft(500);
    MoveForward(500);
  }
  else{
    MoveForward(500); 
  }
  */
}

2018年8月9日木曜日

ESP32でマルチタスクしたメモ

TaskHandle_t taskHandle[1];  /* typedef void * TaskHandle_t; */

void setup()
{
  /* configure led blink task. */
  unsigned long executeParameter = 1000UL;  /* delay time */
  xTaskCreatePinnedToCore(
    subTask,  /* task name */
    "subTask",   /* task name string */
    1024,           /* stack size */
    &executeParameter, /* execute parameter */
    2,             /* task priority : 0 to 24. 0 is lowest priority. */
    &taskHandle[0],   /* タスクハンドルポインタ */
    1              /* core ID */
  );

  Serial.begin( 115200 );
}


void loop()
{
  Serial.println(”hogehoge”);
  delay( 1000 );
}


void subTask( void *execParam )
{
  int buttonClick;
  ledcSetup(0, 50, 10);  // 0ch 50 Hz 10bit resolution
  ledcAttachPin(15, 0); // 15pin, 0ch
  while ( 1 )
  {
    buttonClick = digitalRead(0);
    if (buttonClick == 0) {
      ledcWrite(0, max);
    }
    else {
      ledcWrite(0, min);
    }
    delay(1000);
  }
}

2017年4月10日月曜日

近況報告

買ったもの
・Nikon D3200+AF-S DX NIKKOR 18-55mm f/3.5-5.6G VR
・SONY α99 II
・SONY 70-300mm F4.5-5.6 G SSM II SAL70300G2
・Panasonic DMC-GM1
・CARLZEISS JENA TESSAR 50mm F2.8(ゼブラ)
・SIGMA AF TELE 400mm F5.6
・MINOLTA AF ZOOM 24-85mm F3.5-4.5 New
ルフトデザイン スウィフト02 ショルダーバッグM

2016年11月12日土曜日