少し間違いがあって修正はしてけれどこれでどうにか動いている。
大きな間違いは浮動小数点の扱い。
誰かのブログに書いてあったのをそのまま使ったのでなぜダメなのかわからなかったけれど面倒なので最も簡単な方法で修正。
それと同じような計算を関数にせずコピペしたからその時に変数を書き換えるのを数ヶ所忘れていた事。
(この記事には前があるので初めての方は探してみてください。)
↓ちゃんと整形されていない。
#include
#include
#include
// For the Adafruit shield, these are the default.
#define TFT_RST 8
#define TFT_DC 9
#define TFT_CS 10
#define sclk 13
#define mosi 11
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
//Analog pin numbers
int If = 0; //Infeed
int G1 = 1; //1u G
int G2 = 2; //2u G
int C2 = 3; //2D Cooling
int G3 = 4; //3u G
int C3 = 5; //3D Cooling
// Gear ratio
const float gIf = 3.2; //Gear set spec 1:3.2
const float gG1 = 3.2; //Gear set spec 1:3.2
const float gG2 = 3.2; //Gear set spec 1:3.2
const float gC2 = 3.2; //Pulley 30:96 =1:3.2
const float gG3 = 3.2; //Gear set spec 1:3.2
const float gC3 = 3.2; //Pulley 30:96 =1:3.2
// Constant for calculation
const float a = 226.08;
// Constant for analog value translation to voltage
const float uV = 0.004883; //=5V/1024
// Speed
float sIf = 0;
float sG1 = 0;
float sG2 = 0;
float sC2 = 0;
float sG3 = 0;
float sC3 = 0;
void setup() {
// TFT
tft.begin();
tft.fillScreen(ILI9341_BLACK);
tft.setRotation(3); //Landscape screen
// for serial output (Comment out when running)
Serial.begin(9600);
}
void loop() {
// 5V = 50Hz -> Voltage x 10 = Freq
// Pole = 4
// rpm(motor) = (120 x Freq)/p = 30 x Freq
// rpm(roll) = rpm(motor) / GearRatio
// Speed = rpm(roll) x π x diameter
// diameter = 0.24[m]
// Speed = (226.08 x Voltage) / GearRatio
// Voltage reading
sIf = a * (analogRead(If)*uV) / gIf;
sG1 = a * (analogRead(G1)*uV) / gG1;
sG2 = a * (analogRead(G2)*uV) / gG2;
sC2 = a * (analogRead(C2)*uV) / gC2;
sG3 = a * (analogRead(G3)*uV) / gG3;
sC3 = a * (analogRead(C3)*uV) / gC3;
//for debug only (Comment out when actual running)
//Serial.print ("Infeed :");
//Serial.println (sIf);
//Serial.print ("1u Groll :");
//Serial.println (sG1);
//Serial.print ("2u Groll :");
//Serial.println (sG2);
//Serial.print ("2D Cool :");
//Serial.println (sC2);
//Serial.print ("3u Groll :");
//Serial.println (sG3);
//Serial.print ("3D Cool :");
//Serial.println (sC3);
//for display TFT
tft.fillScreen(ILI9341_BLACK); //screen reset with black color
tft.setCursor(0, 0);
tft.setTextColor(ILI9341_RED); //text color (adjust)
tft.setTextSize(2); //text size (adjust)
tft.println ("Roll SPEED METER"); //Display title
tft.println (" ");
tft.setTextSize(3); //text size
tft.setTextColor(ILI9341_BLUE); //text color
tft.print ("Infeed :");
if (sIf > 500 || sIf < 0){
tft.println ("ERR");
}else{
tft.println (sIf);
//Serial.print("sIf"); //debug
//Serial.println (sIf); //debug
}
tft.setTextSize(1); //gap size
tft.println (" ");
tft.setTextColor(ILI9341_WHITE); //text color
tft.setTextSize(3); //text size
tft.print ("1u Groll :");
if (sG1 > 500 || sG1 < 0){
tft.println ("ERR");
}else{
tft.println (sG1);
//Serial.print("sG1"); //debug
//Serial.println (sG1); //debug
}
tft.setTextSize(1); //gap size
tft.println (" ");
tft.setTextColor(ILI9341_BLUE); //text color
tft.setTextSize(3); //text size
tft.print ("2u Groll :");
if (sG2 > 500 || sG2 < 0){
tft.println ("ERR");
}else{
tft.println (sG2);
//Serial.print("sG2"); //debug
//Serial.println (sG2); //debug
}
tft.setTextSize(1); //gap size
tft.println (" ");
tft.setTextSize(3); //text size
tft.print ("2D Cool :");
if (sC2 > 500 || sC2 < 0){
tft.println ("ERR");
}else{
tft.println (sC2);
//Serial.print("sC2"); //debug
//Serial.println (sC2); //debug
}
tft.setTextSize(1); //gap size
tft.println (" ");
tft.setTextColor(ILI9341_WHITE); //text color
tft.setTextSize(3); //text size
tft.print ("3u Groll :");
if (sG3 > 500 || sG3 < 0){
tft.println ("ERR");
}else{
tft.println (sG3);
//Serial.print("sG3"); //debug
//Serial.println (sG3); //debug
}
tft.setTextSize(1); //gap size
tft.println (" ");
tft.setTextSize(3); //text size
tft.print ("3D Cool :");
if (sC3 > 500 || sC3 < 0){
tft.println ("ERR");
}else{
tft.println (sC3);
//Serial.print("sC3"); //debug
//Serial.println (sC3); //debug
}
delay (500); //checking interval 100=0.1sec
}