commit
8199f10bda
@ -0,0 +1,3 @@ |
|||||||
|
.idea/ |
||||||
|
build |
||||||
|
cmake-build-* |
@ -0,0 +1,6 @@ |
|||||||
|
# The following lines of boilerplate have to be in your project's |
||||||
|
# CMakeLists in this exact order for cmake to work correctly |
||||||
|
cmake_minimum_required(VERSION 3.5) |
||||||
|
|
||||||
|
include($ENV{IDF_PATH}/tools/cmake/project.cmake) |
||||||
|
project(hello-world) |
@ -0,0 +1,8 @@ |
|||||||
|
#
|
||||||
|
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
|
||||||
|
# project subdirectory.
|
||||||
|
#
|
||||||
|
|
||||||
|
PROJECT_NAME := hello-world
|
||||||
|
|
||||||
|
include $(IDF_PATH)/make/project.mk |
@ -0,0 +1,2 @@ |
|||||||
|
idf_component_register(SRCS "hello_world_main.c" |
||||||
|
INCLUDE_DIRS "") |
@ -0,0 +1,4 @@ |
|||||||
|
#
|
||||||
|
# "main" pseudo-component makefile.
|
||||||
|
#
|
||||||
|
# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)
|
@ -0,0 +1,90 @@ |
|||||||
|
/* Hello World Example
|
||||||
|
|
||||||
|
This example code is in the Public Domain (or CC0 licensed, at your option.) |
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, this |
||||||
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR |
||||||
|
CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
*/ |
||||||
|
#include <stdio.h> |
||||||
|
#include "sdkconfig.h" |
||||||
|
#include "freertos/FreeRTOS.h" |
||||||
|
#include "freertos/task.h" |
||||||
|
#include "esp_system.h" |
||||||
|
#include "esp_spi_flash.h" |
||||||
|
#include "driver/ledc.h" |
||||||
|
|
||||||
|
void app_main(void) |
||||||
|
{ |
||||||
|
printf("Hello world!\n"); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Prepare and set configuration of timers |
||||||
|
* that will be used by LED Controller |
||||||
|
*/ |
||||||
|
ledc_timer_config_t ledc_timer = { |
||||||
|
.duty_resolution = LEDC_TIMER_8_BIT, // resolution of PWM duty
|
||||||
|
.freq_hz = 38500, // frequency of PWM signal
|
||||||
|
.speed_mode = LEDC_HIGH_SPEED_MODE, // timer mode
|
||||||
|
.timer_num = LEDC_TIMER_0, // timer index
|
||||||
|
.clk_cfg = LEDC_AUTO_CLK, // Auto select the source clock
|
||||||
|
}; |
||||||
|
// Set configuration of timer0 for high speed channels
|
||||||
|
ledc_timer_config(&ledc_timer); |
||||||
|
|
||||||
|
ledc_channel_config_t chan = { |
||||||
|
.channel = LEDC_CHANNEL_0, |
||||||
|
.duty = 127, |
||||||
|
.gpio_num = 17, |
||||||
|
.speed_mode = LEDC_HIGH_SPEED_MODE, |
||||||
|
.hpoint = 0, |
||||||
|
.timer_sel = LEDC_TIMER_0 |
||||||
|
}; |
||||||
|
ledc_channel_config(&chan); |
||||||
|
|
||||||
|
#define PWM_ON() do { \ |
||||||
|
ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 127); \
|
||||||
|
ledc_update_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0); \
|
||||||
|
} while(0) |
||||||
|
|
||||||
|
#define PWM_OFF() do { \ |
||||||
|
ledc_stop(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 0); \
|
||||||
|
} while(0) |
||||||
|
|
||||||
|
while (1) { |
||||||
|
//const uint8_t bytes[4] = {0b10000000, 0b01111111, 0b00010000, 0b11101111}; // and one 1 at the end
|
||||||
|
const uint8_t bytes[4] = {0b10000000 , 0b01111111 , 0b00000000 , 0b11111111}; // and one 1 at the end
|
||||||
|
|
||||||
|
// Preamble
|
||||||
|
PWM_ON(); |
||||||
|
ets_delay_us(9000); |
||||||
|
PWM_OFF(); |
||||||
|
ets_delay_us(4500); |
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++) { |
||||||
|
uint8_t byte = bytes[i]; |
||||||
|
for (int j = 0; j < 8; j++) { |
||||||
|
bool bit = 0 != (byte & 0x80); |
||||||
|
byte <<= 1; |
||||||
|
if (bit==0) { |
||||||
|
PWM_ON(); |
||||||
|
ets_delay_us(588); |
||||||
|
PWM_OFF(); |
||||||
|
ets_delay_us(540); |
||||||
|
} else { |
||||||
|
PWM_ON(); |
||||||
|
ets_delay_us(590); |
||||||
|
PWM_OFF(); |
||||||
|
ets_delay_us(1672); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
PWM_ON(); |
||||||
|
ets_delay_us(600); |
||||||
|
PWM_OFF(); |
||||||
|
ets_delay_us(1700); |
||||||
|
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(1000)); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue