RuiViana

DoisNucleos.ino

Feb 1st, 2019
239
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Wire.h>
  2. //#include <LiquidCrystal_I2C.h> //biblioteca responsável pelo controle do display
  3.  
  4. //LiquidCrystal_I2C lcd(0x27, 16, 2); //set the LCD address to 0x27 for a 16 chars and 2 line display
  5.  
  6. int count  = 0;
  7. int blinked = 0;
  8.  
  9. String statusButton = "DESATIVADO";
  10.  
  11. //pinos usados
  12. const uint8_t pin_led = 2;
  13. const uint8_t pin_btn = 4;
  14.  
  15. //variaveis que indicam o núcleo
  16. static uint8_t taskCoreZero = 0;
  17. static uint8_t taskCoreOne  = 1;
  18.  
  19. void setup() {
  20.   Serial.begin(115200);
  21.   pinMode(pin_led, OUTPUT);
  22.   pinMode(pin_btn, INPUT);
  23.  
  24.   //inicializa o LCD com os pinos SDA e SCL
  25.   //  lcd.begin(19, 23);
  26.  
  27.   // Liga a luz do display
  28.   //  lcd.backlight();
  29.   //  lcd.setCursor(0, 0);
  30.   //  lcd.print("Piscadas:");
  31.   Serial.println("Piscadas:");
  32.  
  33.   //cria uma tarefa que será executada na função coreTaskZero, com prioridade 1 e execução no núcleo 0
  34.   //coreTaskZero: piscar LED e contar quantas vezes
  35.   xTaskCreatePinnedToCore(
  36.     coreTaskZero,   /* função que implementa a tarefa */
  37.     "coreTaskZero", /* nome da tarefa */
  38.     10000,      /* número de palavras a serem alocadas para uso com a pilha da tarefa */
  39.     NULL,       /* parâmetro de entrada para a tarefa (pode ser NULL) */
  40.     1,          /* prioridade da tarefa (0 a N) */
  41.     NULL,       /* referência para a tarefa (pode ser NULL) */
  42.     taskCoreZero);         /* Núcleo que executará a tarefa */
  43.  
  44.   delay(500); //tempo para a tarefa iniciar
  45.  
  46.   //cria uma tarefa que será executada na função coreTaskOne, com prioridade 2 e execução no núcleo 1
  47.   //coreTaskOne: atualizar as informações do display
  48.   xTaskCreatePinnedToCore(
  49.     coreTaskOne,   /* função que implementa a tarefa */
  50.     "coreTaskOne", /* nome da tarefa */
  51.     10000,      /* número de palavras a serem alocadas para uso com a pilha da tarefa */
  52.     NULL,       /* parâmetro de entrada para a tarefa (pode ser NULL) */
  53.     2,          /* prioridade da tarefa (0 a N) */
  54.     NULL,       /* referência para a tarefa (pode ser NULL) */
  55.     taskCoreOne);         /* Núcleo que executará a tarefa */
  56.  
  57.   delay(500); //tempo para a tarefa iniciar
  58.  
  59.   //cria uma tarefa que será executada na função coreTaskTwo, com prioridade 2 e execução no núcleo 0
  60.   //coreTaskTwo: vigiar o botão para detectar quando pressioná-lo
  61.   xTaskCreatePinnedToCore(
  62.     coreTaskTwo,   /* função que implementa a tarefa */
  63.     "coreTaskTwo", /* nome da tarefa */
  64.     10000,      /* número de palavras a serem alocadas para uso com a pilha da tarefa */
  65.     NULL,       /* parâmetro de entrada para a tarefa (pode ser NULL) */
  66.     2,          /* prioridade da tarefa (0 a N) */
  67.     NULL,       /* referência para a tarefa (pode ser NULL) */
  68.     taskCoreZero);         /* Núcleo que executará a tarefa */
  69.  
  70. }
  71.  
  72. void loop() {
  73. }
  74.  
  75. //essa função ficará mudando o estado do led a cada 1 segundo
  76. //e a cada piscada (ciclo acender e apagar) incrementará nossa variável blinked
  77. void coreTaskZero( void * pvParameters ) {
  78.  
  79.   String taskMessage = "Task running on core ";
  80.   taskMessage = taskMessage + xPortGetCoreID();
  81.  
  82.   while (true) {
  83.     digitalWrite(pin_led, !digitalRead(pin_led));
  84.     if (++count % 2 == 0 )
  85.       blinked++;
  86.  
  87.     delay(1000);
  88.   }
  89. }
  90.  
  91. //essa função será responsável apenas por atualizar as informações no
  92. //display a cada 100ms
  93. void coreTaskOne( void * pvParameters ) {
  94.   while (true) {
  95.  
  96.     //        lcd.setCursor(10, 0);
  97.     //        lcd.print(blinked);
  98.     Serial.print(blinked);
  99.     Serial.print(" ");
  100.     //        lcd.setCursor(0,1);
  101.     //        lcd.print(statusButton);
  102.     Serial.print(statusButton);
  103.     Serial.println(" ");    
  104.     delay(100);
  105.   }
  106. }
  107.  
  108. //essa função será responsável por ler o estado do botão
  109. //e atualizar a variavel de controle.
  110. void coreTaskTwo( void * pvParameters ) {
  111.   while (true) {
  112.     if (digitalRead(pin_btn)) {
  113.       statusButton = "Ativado   ";
  114.     }
  115.     else statusButton = "Desativado";
  116.     delay(10);
  117.   }
  118. }
RAW Paste Data