Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev/block split #18

Merged
merged 10 commits into from Oct 6, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions main/.gitignore
@@ -0,0 +1,2 @@
.vscode
.DS_Store
61 changes: 61 additions & 0 deletions main/BlockModel.cpp
@@ -0,0 +1,61 @@
#include "Arduino.h"
#include "BlockModel.h"

BlockModel::BlockModel(){}
BlockModel::BlockModel(int block_state, int right_speed, int left_speed, int time)
{
set_block_state(block_state);
set_right_speed(right_speed);
set_left_speed(left_speed);
set_time(time);
}

int BlockModel::get_block_state()
{
return this->block_state;
}

void BlockModel::set_block_state(int block_state)
{
this->block_state = block_state;
}

int BlockModel::get_right_speed()
{
return this->right_speed;
}

void BlockModel::set_right_speed(int right_speed)
{
this->right_speed = right_speed;
}

int BlockModel::get_left_speed()
{
return this->left_speed;
}

void BlockModel::set_left_speed(int left_speed)
{
this->left_speed = left_speed;
}

int BlockModel::get_time()
{
return this->time;
}

void BlockModel::set_time(int time)
{
this->time = time;
}

int BlockModel::get_loop_count()
{
return this->loop_count;
}

void BlockModel::set_loop_count(int loop_count)
{
this->loop_count = loop_count;
}
30 changes: 30 additions & 0 deletions main/BlockModel.h
@@ -0,0 +1,30 @@
#ifndef _BlockModel_h
#define _BlockModel_h

#include "Arduino.h"

class BlockModel
{
private:
int block_state;
int left_speed;
int right_speed;
int time;
int loop_count;

public:
BlockModel();
BlockModel(int block_state, int right_speed, int left_speed, int time);
int get_block_state();
void set_block_state(int block_state);
int get_right_speed();
void set_right_speed(int right_speed);
int get_left_speed();
void set_left_speed(int left_speed);
int get_time();
void set_time(int time);
int get_loop_count();
void set_loop_count(int loop_count);
};

#endif
110 changes: 110 additions & 0 deletions main/Motor.cpp
@@ -0,0 +1,110 @@
#include "Arduino.h"
#include "Motor.h"

Motor::Motor()
{

pinMode(IN1, OUTPUT); // IN1
pinMode(IN2, OUTPUT); // IN2
pinMode(IN3, OUTPUT); // IN3
pinMode(IN4, OUTPUT); // IN4

// ピンのセットアップ
ledcSetup(CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_BIT);
ledcSetup(CHANNEL_1, LEDC_BASE_FREQ, LEDC_TIMER_BIT);
ledcSetup(CHANNEL_2, LEDC_BASE_FREQ, LEDC_TIMER_BIT);
ledcSetup(CHANNEL_3, LEDC_BASE_FREQ, LEDC_TIMER_BIT);

// ピンのチャンネルをセット
ledcAttachPin(IN1, CHANNEL_0);
ledcAttachPin(IN2, CHANNEL_1);
ledcAttachPin(IN3, CHANNEL_2);
ledcAttachPin(IN4, CHANNEL_3);

delay(100);
}

void Motor::run_motor(String state, uint32_t left_pwm, uint32_t right_pwm, int time)
{
if (state.equals(""))
{
}
//TODO forward, left, right, backごとにコマンドチェック -> 実行

delay(time);
coast(); //空転
}

void Motor::forward(uint32_t left_pwm, uint32_t right_pwm)
{
if (left_pwm > VALUE_MAX)
{
left_pwm = VALUE_MAX;
}
if (right_pwm > VALUE_MAX)
{
right_pwm = VALUE_MAX;
}

ledcWrite(CHANNEL_0, 0);
ledcWrite(CHANNEL_1, left_pwm);
ledcWrite(CHANNEL_2, 0);
ledcWrite(CHANNEL_3, right_pwm);
}

void Motor::back(uint32_t left_pwm, uint32_t right_pwm)
{
if (left_pwm > VALUE_MAX)
{
left_pwm = VALUE_MAX;
}
if (right_pwm > VALUE_MAX)
{
right_pwm = VALUE_MAX;
}

ledcWrite(CHANNEL_0, left_pwm);
ledcWrite(CHANNEL_1, 0);
ledcWrite(CHANNEL_2, right_pwm);
ledcWrite(CHANNEL_3, 0);
}

void Motor::right(uint32_t pwm)
{
if (pwm > VALUE_MAX)
{
pwm = VALUE_MAX;
}
ledcWrite(CHANNEL_0, 0);
ledcWrite(CHANNEL_1, pwm);
ledcWrite(CHANNEL_2, VALUE_MAX);
ledcWrite(CHANNEL_3, VALUE_MAX);
}

void Motor::left(uint32_t pwm)
{
if (pwm > VALUE_MAX)
{
pwm = VALUE_MAX;
}
ledcWrite(CHANNEL_0, VALUE_MAX);
ledcWrite(CHANNEL_1, VALUE_MAX);
ledcWrite(CHANNEL_2, 0);
ledcWrite(CHANNEL_3, pwm);
}

void Motor::brake()
{
ledcWrite(CHANNEL_0, VALUE_MAX);
ledcWrite(CHANNEL_1, VALUE_MAX);
ledcWrite(CHANNEL_2, VALUE_MAX);
ledcWrite(CHANNEL_3, VALUE_MAX);
}

void Motor::coast()
{
ledcWrite(CHANNEL_0, 0);
ledcWrite(CHANNEL_1, 0);
ledcWrite(CHANNEL_2, 0);
ledcWrite(CHANNEL_3, 0);
}
36 changes: 36 additions & 0 deletions main/Motor.h
@@ -0,0 +1,36 @@
#ifndef _Motor_h
#define _Motor_h

#include "Arduino.h"

class Motor
{
private:
// 使うピンの定義
int IN1 = 25;
int IN2 = 26;
int IN3 = 16;
int IN4 = 17;

// チャンネルの定義
int CHANNEL_0 = 0;
int CHANNEL_1 = 1;
int CHANNEL_2 = 2;
int CHANNEL_3 = 3;

int LEDC_TIMER_BIT = 8; // PWMの範囲(8bitなら0〜255、10bitなら0〜1023)
int LEDC_BASE_FREQ = 490; // 周波数(Hz)
int VALUE_MAX = 255; // PWMの最大値

public:
Motor();
void run_motor(String state, uint32_t left_pwm, uint32_t right_pwm, int time);
void forward(uint32_t left_pwm, uint32_t right_pwm);
void back(uint32_t left_pwm, uint32_t right_pwm);
void right(uint32_t pwm);
void left(uint32_t pwm);
void brake();
void coast();
};

#endif
7 changes: 7 additions & 0 deletions main/Sensor.cpp
@@ -0,0 +1,7 @@
#include "Arduino.h"
#include "Sensor.h"

Sensor::Sensor()
{
//TODO ピンのセットアップ
}
15 changes: 15 additions & 0 deletions main/Sensor.h
@@ -0,0 +1,15 @@
#ifndef _Sensor_h
#define _Sensor_h

#include "Arduino.h"

class Sensor
{
private:
//TODO 使うピンの定義

public:
Sensor();
};

#endif
74 changes: 74 additions & 0 deletions main/Udp.cpp
@@ -0,0 +1,74 @@
#include "Udp.h"
#include "Arduino.h"
#include <WiFi.h>
#include <WiFiUdp.h>

Udp::Udp(){}

void Udp::setup_udp(char ssid[], char password[], String ip)
{
IPAddress local_IP(192, 168, 1, 19);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);

WiFi.config(local_IP, gateway, subnet);
delay(100);

WiFi.begin(ssid, password);
delay(100);

Serial.print("WiFi connecting");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(100);
}
Serial.println(" connected");
Serial.println(WiFi.localIP());

Serial.println("Starting UDP");
wifi_udp.begin(local_port); // UDP通信の開始(引数はポート番号)
Serial.print("Local port: ");
Serial.println(local_port);
}

void Udp::recieve_packet()
{
int packet_size = wifi_udp.parsePacket();

if (packet_size)
{
//UDP情報の表示
Serial.print("Received packet of size ");
Serial.println(packet_size);

// 実際にパケットを読む
wifi_udp.read(packet_buffer, UDP_TX_PACKET_MAX_SIZE);
Serial.println("Contents:");
Serial.println(packet_buffer);
}
}

String Udp::get_packet_buffer()
{
return String(this->packet_buffer);
}

void Udp::clear_packet_buffer()
{
int packetBuffer_length = strlen(this->packet_buffer);
memset(this->packet_buffer ,'\0',packetBuffer_length);
}

void Udp::send_data(IPAddress ip_send,String text)
{
Serial.print("send...");
IPAddress remote_ip(192, 168, 1, 10);
char remote[] = "192.168.1.10";
//char message[] = "test";

wifi_udp.beginPacket(remote, local_port);
wifi_udp.printf("from ESP8266\r\n");
wifi_udp.endPacket();
delay(1000);
}
30 changes: 30 additions & 0 deletions main/Udp.h
@@ -0,0 +1,30 @@
#ifndef _Udp_h
#define _Udp_h

#include "Arduino.h"
#include <WiFi.h>
#include <WiFiUdp.h>

#define UDP_TX_PACKET_MAX_SIZE 500

class Udp
{
private:
// wifiの設定

WiFiUDP wifi_udp;
int local_port = 10000; // ポート番号
char packet_buffer[UDP_TX_PACKET_MAX_SIZE];
String cmd_plus_split[UDP_TX_PACKET_MAX_SIZE] = {"\0"};
String cmd_and_split[UDP_TX_PACKET_MAX_SIZE] = {"\0"};

public:
Udp();
void setup_udp(char ssid[], char password[], String ip);
void recieve_packet();
void send_data(IPAddress ip_send,String text);
String get_packet_buffer();
void clear_packet_buffer();
};

#endif