ir_transmit.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "freertos/FreeRTOS.h"
  2. #include "freertos/task.h"
  3. #include "freertos/queue.h"
  4. #include "esp_log.h"
  5. #include "driver/rmt.h"
  6. #include "toshiba_ir.h"
  7. #include "config.h"
  8. // RMT values
  9. #define RMT_TX_CHANNEL RMT_CHANNEL_0
  10. #define RMT_TX_GPIO GPIO_NUM_26
  11. // channel clock period = 1 uS
  12. #define RMT_CLK_DIV 80
  13. // RAM item that holds the IR protocol
  14. rmt_item32_t toshiba_rmt[1 + 72 + 1 + 1];
  15. void initIrTransmit() {
  16. //gpio_pad_select_gpio(GPIO_IR_TX_DATA);
  17. //gpio_set_direction(GPIO_IR_TX_DATA, GPIO_MODE_OUTPUT);
  18. //gpio_set_level(GPIO_IR_TX_DATA,1);
  19. rmt_config_t rmt_tx;
  20. rmt_tx.rmt_mode = RMT_MODE_TX;
  21. rmt_tx.channel = RMT_TX_CHANNEL;
  22. rmt_tx.gpio_num = GPIO_IR_TX_DATA;
  23. rmt_tx.mem_block_num = 1;
  24. rmt_tx.clk_div = RMT_CLK_DIV;
  25. rmt_tx.tx_config.loop_en = false;
  26. rmt_tx.tx_config.carrier_duty_percent = 30;
  27. rmt_tx.tx_config.carrier_freq_hz = 38000;
  28. rmt_tx.tx_config.carrier_level = RMT_CARRIER_LEVEL_HIGH;
  29. rmt_tx.tx_config.carrier_en = false;
  30. rmt_tx.tx_config.idle_level = RMT_IDLE_LEVEL_LOW;
  31. rmt_tx.tx_config.idle_output_en = true;
  32. rmt_tx.flags = 0;
  33. ESP_ERROR_CHECK( rmt_config(&rmt_tx) );
  34. ESP_ERROR_CHECK( rmt_driver_install(rmt_tx.channel, 0, 0) );
  35. // Init the ir data field
  36. //toshiba_rmt[0].val = (kToshibaAcHdrMark << 17) | (1 << 16) | (kToshibaAcHdrSpace << 1) | 0; // Header of IR Transmit
  37. toshiba_rmt[0].duration0 = kToshibaAcHdrMark;
  38. toshiba_rmt[0].level0 = 1;
  39. toshiba_rmt[0].duration1 = kToshibaAcHdrSpace;
  40. toshiba_rmt[0].level1 = 0;
  41. toshiba_rmt[73].duration0 = kToshibaAcBitMark;
  42. toshiba_rmt[73].level0 = 1;
  43. toshiba_rmt[73].duration1 = kToshibaAcZeroSpace;
  44. toshiba_rmt[73].level1 = 0;
  45. toshiba_rmt[74].val = (1 << 16); // End marker
  46. for(int i=1;i<73;i++) {
  47. //toshiba_rmt[i].val = (kToshibaAcBitMark << 17) | (1 << 16) | (kToshibaAcZeroSpace << 1) | 0; // Header of IR Transmit
  48. toshiba_rmt[i].duration0 = kToshibaAcBitMark;
  49. toshiba_rmt[i].level0 = 1;
  50. toshiba_rmt[i].duration1 = kToshibaAcZeroSpace;
  51. toshiba_rmt[i].level1 = 0;
  52. }
  53. ESP_LOGI("IR_TX","Init done.");
  54. }
  55. void sendToshibaIRData() {
  56. ESP_LOGI("IR_TX","Send test-code");
  57. //ESP_ERROR_CHECK(rmt_write_items(RMT_TX_CHANNEL, toshiba_rmt, sizeof(toshiba_rmt) / sizeof(toshiba_rmt[0]), true));
  58. ESP_ERROR_CHECK(rmt_write_items(RMT_TX_CHANNEL, &(toshiba_rmt[0]), 1+72+1, true));
  59. ESP_LOGI("IR_TX","Send done....");
  60. }