Korišćenjem PlatformIO plug-in-a, MS Visual Studio Code postaje veoma sofisticiran IDE za pisanje i razvoj aplikacija na mnogim razvojnim sistemima. Za razliku od Arduino IDE-a, koji ne podržava TI mikroprocesore i gde je potrebno koristiti Energia IDE, jedan broj TI ploča je podržan u PlatformIO okruženju. Takav je i slučaj sa kombinacijom MSP430FR5994 i BOOSTXL-EDUMKII pločom.

Iskoristili smo snagu mikrokontrolera sa prva i kolor LCD ekran, višebojnu diodu, tastere i džojstik na drugom i napisali veoma jednostavnu, ali ilustrativnu aplikaciju kojom se mogu menjanem R/G/B parametara na ekranu i na diodi dobiti svetlosti boje u skladu sa zadatim vrednostima svake od osnovnih boja.

Standard pri kodiranju boja za prikaz na ekranu je RGB, pri čemu se svaka od vrednosti ove tri boje kreće u rasponu od 0-255. Na ekranu je normalizovan prikaz na 100% kako bi intuitivnije mogli da posmatramo efekte mešanja.

Lepo napisane biblioteke za ove dve pločice (sa jednom napomenom!!!!) omogućavaju lako programiranje u Arduino stilu.

#include <Arduino.h>


// colourMixer magazinMehatronika eduIot projekat 2022

#include "LCD_screen.h"
#include "LCD_utilities.h"
#include "LCD_screen_font.h"
#include "LiquidCrystal.h"
#include <Screen_HX8353E.h>
#include "SPI.h"

Screen_HX8353E myScreen;

uint16_t valueBlue = 0;
uint16_t valueBlueO = 0;
uint16_t valueGreen = 0;
uint16_t valueGreenO = 0;
uint16_t valueRed = 0;
uint16_t valueRedO = 0;

#define joystickX 2
#define joystickY 26
uint16_t x, y;

int i=0;
int k = 0;

void setup() {

  pinMode(GREEN_LED, OUT);
  pinMode(RED_LED,OUT);    

  pinMode(37,OUT); // Blue
  pinMode(38,OUT); // Green
  pinMode(39,OUT); // Red

  pinMode(45,INPUT_PULLUP);
  pinMode(46,INPUT_PULLUP);
  pinMode(32,INPUT);
  pinMode(33,INPUT);

  Serial.begin(9600);
  
  myScreen.begin();
  myScreen.clear();
 
  myScreen.gText(10,110,"magazinMehatronika", whiteColour);


}

void loop() {

  x = map(analogRead(joystickX), 0, 4096, 0, 128);
  y = map(analogRead(joystickY), 0, 4096, 128, 0);
    if (x < 60)      x = 1;
    if (x > 126)    x = 126;
    if (y < 1)      y = 1;
    if (y > 126)    y = 126;

if ( x>80)
        { if (valueRed<100) { valueRedO=valueRed; valueRed++; k=1;}
        }
  if ( x<50)
        { if (valueRed>0) {valueRedO=valueRed; valueRed--; k=1;}    
        }

  if ( digitalRead(32))
        { if (valueBlue<100) { valueBlueO=valueBlue; valueBlue++; k=1;}
        }
  if ( digitalRead(33))
        { if (valueBlue>0) {valueBlueO=valueBlue; valueBlue--; k=1;}    
        }
  if ( y<50)
        { if (valueGreen<100) { valueGreenO=valueGreen; valueGreen++; k=1;}
        }
  if ( y>80)
        { if (valueGreen>0) {valueGreenO=valueGreen; valueGreen--; k=1;}    
        }
  analogWrite(39,valueRed*32/100);
  analogWrite(38,valueGreen*32/100);
  analogWrite(37,valueBlue*32/100);
  
  delay(200);
  // myScreen.clear();
  if (k==1) {
      k=0;
      
      myScreen.setFontSize(1);
      myScreen.gText(15,80, String(valueRedO)+"%",blackColour); 
      myScreen.gText(15,80, String(valueRed)+"%",redColour);
      for (i=0; i<10; i++) {myScreen.dRectangle(10+i,50+i,20-2*i,20-2*i,myScreen.calculateColour( valueRed*8*32/101, 0, 0));}

      myScreen.gText(55,80, String(valueGreenO)+"%",blackColour); 
      myScreen.gText(55,80, String(valueGreen)+"%",greenColour);
      for (i=0; i<10; i++) {myScreen.dRectangle(50+i,50+i,20-2*i,20-2*i, myScreen.calculateColour( 0, valueGreen*8*32/101, 0));}
      
      myScreen.gText(95,80, String(valueBlueO)+"%",blackColour); 
      myScreen.gText(95,80, String(valueBlue)+"%",blueColour);
      for (i=0; i<10; i++) {myScreen.dRectangle(90+i,50+i,20-2*i,20-2*i,myScreen.calculateColour( 0, 0, valueBlue*8*32/100));}
  
      
      for (i=0; i<10; i++) {myScreen.dRectangle(40+i,10+i,20-2*i,20-2*i, myScreen.calculateColour( valueRed*8*32/101, valueGreen*8*32/101, valueBlue*8*32/101));
                            myScreen.dRectangle(60+i,10+i,20-2*i,20-2*i, myScreen.calculateColour( valueRed*8*32/101, valueGreen*8*32/101, valueBlue*8*32/101));}
          
      }
  

}

NAPOMENA: Energia fajl za definiciju pinova pins_energia.c na lokaciji: C:\Users\User.platformio\packages\framework-energiamsp430\variants\MSP-EXP430FR5994LP mora se korigovati. Ti nije dobro dodelio vrednosti ponova 18 i 39. Na pinu 39 je crvena dioda i kako nije pridružena na TOB5, neće raditi PWM na tom pinu – logično. Dakle treba izmeniti ovu datoteku i promeniti linije od 457 do 510 i one treba da glase:

const uint8_t digital_pin_to_timer[] = {
   NOT_ON_TIMER, /*  dummy */
   NOT_ON_TIMER, /*  1 - 3.3v */
   T1A1,         /*  2 - P1.2 */
   NOT_ON_TIMER, /*  3 - P6.1 */
   NOT_ON_TIMER, /*  4 - P6.0 */
   NOT_ON_TIMER, /*  5 - P6.2 */
   T1A2,         /*  6 - P1.3 */
   NOT_ON_TIMER, /*  7 - P5.2 */
   NOT_ON_TIMER, /*  8 - P6.3 */
   NOT_ON_TIMER, /*  9 - P7.1 */
   NOT_ON_TIMER, /* 10 - P7.0 */
   NOT_ON_TIMER, /* 11 - P8.1 */
   NOT_ON_TIMER, /* 12 - P8.2 */
   NOT_ON_TIMER, /* 13 - P8.3 */
   NOT_ON_TIMER, /* 14 - P5.1 */
   NOT_ON_TIMER, /* 15 - P5.0 */
   NOT_ON_TIMER, /* 16 - RST  */
   NOT_ON_TIMER, /* 17 - P5.3 */
   NOT_ON_TIMER, /* 18 - P4.4 */
   NOT_ON_TIMER, /* 19 - P5.7 */
   NOT_ON_TIMER, /* 20 - GND  */
   NOT_ON_TIMER, /* 21 - 5.0v */
   NOT_ON_TIMER, /* 22 - GND  */
   NOT_ON_TIMER, /* 23 - P3.0 */
   NOT_ON_TIMER, /* 24 - P3.1 */
   NOT_ON_TIMER, /* 25 - P3.2 */
   NOT_ON_TIMER, /* 26 - P3.3 */
   NOT_ON_TIMER, /* 27 - P1.4 */
   T0B2,         /* 28 - P1.5 */
   NOT_ON_TIMER, /* 29 - P4.7 */
   NOT_ON_TIMER, /* 30 - P8.0 */
   NOT_ON_TIMER, /* 31 - P4.1 */
   NOT_ON_TIMER, /* 32 - P4.2 */
   NOT_ON_TIMER, /* 33 - P4.3 */
   NOT_ON_TIMER, /* 34 - P2.5 */
   T0B1,         /* 35 - P2.6 */
   T4A1,         /* 36 - P7.3 */
   T0B3,         /* 37 - P3.4 */
   T0B4,         /* 38 - P3.5 */
   T0B5,         /* 39 - P3.6 */
   T0B6,         /* 40 - P3.7 */
   NOT_ON_TIMER, /* 41 - P2.0 */
   NOT_ON_TIMER, /* 42 - P2.1 */
   T0A1,         /* 43 - P1.0 */
   T0A2,         /* 44 - P1.1 */
   NOT_ON_TIMER, /* 45 - P5.6 */
   NOT_ON_TIMER, /* 46 - P5.5 */
   NOT_ON_TIMER, /* 47 - P4.0 */
   NOT_ON_TIMER, /* 48 - P1.6 */
   NOT_ON_TIMER, /* 49 - P2.2 */
   NOT_ON_TIMER, /* 50 - P1.7 */
   NOT_ON_TIMER, /* 51 - P7.2 */
};

Projekat možete preuzeti na GitHub-u:

https://github.com/magazinMehatronika/MSP430FR5994-EduBoosterPack-colourMixer

 

Aleksandar Dakić
Follow me