I believe that my for loop is not indexing correctly and storing values in the array. Here is my entire slave code that is receiving diameters and performing temperature compensation based off different buttons.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <dht.h>
float dL = 0;
float dT = 0;
float a1 = 0;
float a2 = 0;
float a3 = 0;
float a4 = 0;
float a5 = 0;
float diaAdjusted = 0;
float TF = 0; //Temp of part
float RF = 0; //Room Temp
float diameterin;
int i = 0;
char myData[5] = {0};
int Length[10];
int Diameter[10];
const int ledPin1 = 13; //Material 1
const int ledPin2 = 11; //Material 2
const int ledPin3 = 9; //Material 3
const int ledPin4 = 7; //Material 4
const int ledPin5 = 5; //Material 5
const int buttonPin1 = 12;
const int buttonPin2 = 10;
const int buttonPin3 = 8;
const int buttonPin4 = 6;
const int buttonPin5 = 4;
int buttonstate1 = 0;
int buttonstate2 = 0;
int buttonstate3 = 0;
int buttonstate4 = 0;
int buttonstate5 = 0;
LiquidCrystal_I2C lcd(0x27, 20, 21);
dht DHT;
#define DHT11_PIN 3
void setup() {
Serial.begin(9600);
Serial2.begin(9600);
lcd.init();
lcd.backlight();
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP);
pinMode(buttonPin4, INPUT_PULLUP);
pinMode(buttonPin5, INPUT_PULLUP);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
}
void loop() {
if (Serial2.available()>0)
{
byte m = Serial2.readBytesUntil('\n', myData, 10);
myData[m] = '\0';
diameterin = atof(myData);
Serial.println(diameterin,4);
memset(myData, 0, 10);
for (int i=0; i<10; i++);{
Diameter[i] = diameterin;
Serial.println(Diameter[i],4);
}
}
buttonstate1 = digitalRead(buttonPin1);
buttonstate2 = digitalRead(buttonPin2);
buttonstate3 = digitalRead(buttonPin3);
buttonstate4 = digitalRead(buttonPin4);
buttonstate5 = digitalRead(buttonPin5);
int chk = DHT.read11(DHT11_PIN);
TF = (DHT.temperature * 1.8) + 32;
lcd.setCursor(0,2);
lcd.print("T= ");
lcd.setCursor(4,2);
lcd.print(TF);
Serial.println(TF);
if (buttonstate1 == LOW) {
Serial.println("button 1");
digitalWrite(ledPin1, HIGH);
dT = TF - RF;
dL = diameterin * dT * a1;
diaAdjusted = diameterin - dL;
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Material 1");
lcd.setCursor(0, 1);
lcd.print("Dia(in)= ");
lcd.setCursor(9, 1);
lcd.print(diaAdjusted,4);
}
else {
digitalWrite(ledPin1, LOW);
}
if (buttonstate2 == LOW) {
Serial.println("button 2");
digitalWrite(ledPin2, HIGH);
dT = TF - RF;
dL = diameterin * dT * a2;
diaAdjusted = diameterin - dL;
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Material 2");
lcd.setCursor(0, 1);
lcd.print("Dia(in)= ");
lcd.setCursor(8, 1);
lcd.print(diaAdjusted,4);
}
else {
digitalWrite(ledPin2, LOW);
}
if (buttonstate3 == LOW) {
Serial.println("button 3");
digitalWrite(ledPin3, HIGH);
dT = TF - RF;
dL = diameterin * dT * a3;
diaAdjusted = diameterin - dL;
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Material 3");
lcd.setCursor(0, 1);
lcd.print("Dia(in)= ");
lcd.setCursor(8, 1);
lcd.print(diaAdjusted,4);
}
else {
digitalWrite(ledPin3, LOW);
}
if (buttonstate4 == LOW) {
Serial.println("button 4");
digitalWrite(ledPin4, HIGH);
dT = TF - RF;
dL = diameterin * dT * a4;
diaAdjusted = diameterin - dL;
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Material 4");
lcd.setCursor(0, 1);
lcd.print("Dia(in)= ");
lcd.setCursor(8, 1);
lcd.print(diaAdjusted,4);
}
else {
digitalWrite(ledPin4, LOW);
}
if (buttonstate5 == LOW) {
Serial.println("button 5");
digitalWrite(ledPin5, HIGH);
dT = TF - RF;
dL = diameterin * dT * a5;
diaAdjusted = diameterin - dL;
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Material 5");
lcd.setCursor(0, 1);
lcd.print("Dia(in)= ");
lcd.setCursor(8, 1);
lcd.print(diaAdjusted,4);
}
else {
digitalWrite(ledPin5, LOW);
}
}
The outcome of the project is to measure the diameters and length of long cylindrical parts.