hi I am working on a project where I send data input from my Raspberry Pi to Arduino via Serial communication. I want to control different solenoid at different type based on the user input simultaneously I have managed to get the input from Raspberry Pi and now I am stuck in Arduino code please help me with it. here is the Arduino code.
#include <textparser.h>
TextParser parser(","); // Delimiter is a comma followed by a space.
int pul, From_Solenoid, To_Solenoid, Delay;
#undef MyHW
#ifdef MyHW
int pulse = 9;
int step = 10;
int direct = 11;
int s1 = 22;
int s2 = 23;
int s3 = 24;
int s4 = 25;
int s5 = 26;
int s6 = 27;
int s7 = 28;
int s8 = 29;
int c1 = 30;
int c2 = 31;
int c3 = 32;
int c4 = 33;
int c5 = 34;
int c6 = 35;
unsigned long interval=0;
#else
int pulse = 9;
int step = 10;
int direct = 11;
int s1 = 22;
int s2 = 23;
int s3 = 24;
int s4 = 25;
int s5 = 26;
int s6 = 27;
int s7 = 28;
int s8 = 29;
int c1 = 30;
int c2 = 31;
int c3 = 32;
int c4 = 33;
int c5 = 34;
int c6 = 35;
unsigned long interval=0;
#endif
char inc;
enum { Off = LOW, On = HIGH };
unsigned long msecPump;
unsigned long msec;
// -----------------------------------------------------------------------------
void setup () {
Serial.begin (9600);
analogWrite (pulse, 0);
digitalWrite (step, Off);
digitalWrite (direct, Off);
digitalWrite (s1, Off);
digitalWrite (s2, Off);
digitalWrite (s3, Off);
digitalWrite (s4, Off);
digitalWrite (s5, Off);
digitalWrite (s6, Off);
digitalWrite (s7, Off);
digitalWrite (s8, Off);
digitalWrite (c1, Off);
digitalWrite (c2, Off);
digitalWrite (c3, Off);
digitalWrite (c4, Off);
digitalWrite (c5, Off);
digitalWrite (c6, Off);
pinMode (pulse, OUTPUT);
pinMode (step, OUTPUT);
pinMode (direct, OUTPUT);
pinMode (s1, OUTPUT);
pinMode (s2, OUTPUT);
pinMode (s3, OUTPUT);
pinMode (s4, OUTPUT);
pinMode (s5, OUTPUT);
pinMode (s6, OUTPUT);
pinMode (s7, OUTPUT);
pinMode (s8, OUTPUT);
pinMode (c1, OUTPUT);
pinMode (c2, OUTPUT);
pinMode (c3, OUTPUT);
pinMode (c4, OUTPUT);
pinMode (c5, OUTPUT);
pinMode (c6, OUTPUT);
}
// -------------------------PUMP-Functions-----------------------------pul----------------------
void pump1 ()
{
if (On == digitalRead (direct) && (msec - msecPump) >= interval) {
digitalWrite (step, Off);
digitalWrite (direct, Off);
analogWrite (pulse, 0);
}
}
// -------------------------SOLENOID-line-1-Functions-------------------From-Solenoid--------------------------------
void solenoid1 ()
{
if (On == digitalRead (s1) && (msec - msecPump) >= interval) {
digitalWrite (s1, Off);
}
}
void solenoid2 ()
{
if (On == digitalRead (s2) && (msec - msecPump) >= interval) {
digitalWrite (s2, Off);
}
}
void solenoid3 ()
{
if (On == digitalRead (s3) && (msec - msecPump) >= interval) {
digitalWrite (s3, Off);
}
}
void solenoid4 ()
{
if (On == digitalRead (s4) && (msec - msecPump) >= interval) {
digitalWrite (s4, Off);
}
}
void solenoid5 ()
{
if (On == digitalRead (s5) && (msec - msecPump) >= interval) {
digitalWrite (s5, Off);
}
}
void solenoid6 ()
{
if (On == digitalRead (s6) && (msec - msecPump) >= interval) {
digitalWrite (s6, Off);
}
}
void solenoid7 ()
{
if (On == digitalRead (s7) && (msec - msecPump) >= interval) {
digitalWrite (s7, Off);
}
}
void solenoid8 ()
{
if (On == digitalRead (s8) && (msec - msecPump) >= interval) {
digitalWrite (s8, Off);
}
}
// ------------------------C-SOLENOID--Functions-----------------To-Solenoid----------------------------------
void solenoidc1 ()
{
if (On == digitalRead (c1) && (msec - msecPump) >= interval) {
digitalWrite (c1, Off);
}
}
void solenoidc2 ()
{
if (On == digitalRead (c2) && (msec - msecPump) >= interval) {
digitalWrite (c2, Off);
}
}
void solenoidc3 ()
{
if (On == digitalRead (c3) && (msec - msecPump) >= interval) {
digitalWrite (c3, Off);
}
}
void solenoidc4 ()
{
if (On == digitalRead (c4) && (msec - msecPump) >= interval) {
digitalWrite (c4, Off);
}
}
void solenoidc5 ()
{
if (On == digitalRead (c5) && (msec - msecPump) >= interval) {
digitalWrite (c5, Off);
}
}
void solenoidc6 ()
{
if (On == digitalRead (c6) && (msec - msecPump) >= interval) {
digitalWrite (c6, Off);
}
}
// --------------------------------MAIN LOOP---------------------------------------------
void loop () {
msec = millis ();
pump1 ();
solenoid1 ();
solenoid2 ();
solenoid3 ();
solenoid4 ();
solenoid5 ();
solenoid6 ();
solenoid7 ();
solenoid8 ();
solenoidc1 ();
solenoidc2 ();
solenoidc3 ();
solenoidc4 ();
solenoidc5 ();
solenoidc6 ();
if(Serial.available()>0){
char line[80];
//Assume `line` is of the form "255,2,3,1(in min)\n".
Serial.readBytesUntil('\n', line, sizeof(line));
parser.parseLine(line, pul, From_Solenoid, To_Solenoid, Delay); // pul=pwm value,
interval=Delay;
switch (inc){
case 'a':
digitalWrite (direct, On);
analogWrite (pulse, 255);
digitalWrite (step, On);
digitalWrite (s1, On);
digitalWrite (c1, On);
msecPump = msec;
break;
case 'b':
digitalWrite (direct, On);
analogWrite (pulse, 255);
digitalWrite (step, On);
digitalWrite (s2, On);
digitalWrite (c2, On);
msecPump = msec;
break;
case 'c':
digitalWrite (direct, On);
analogWrite (pulse, 255);
digitalWrite (step, On);
digitalWrite (s3, On);
digitalWrite (c3, On);
msecPump = msec;
break;
case 'd':
digitalWrite (direct, On);
analogWrite (pulse, 255);
digitalWrite (step, On);
digitalWrite (s4, On);
digitalWrite (c4, On);
msecPump = msec;
break;
case 'e':
digitalWrite (direct, On);
analogWrite (pulse, 255);
digitalWrite (step, On);
digitalWrite (s5, On);
digitalWrite (c5, On);
msecPump = msec;
break;
case 'f':
digitalWrite (direct, On);
analogWrite (pulse, 255);
digitalWrite (step, On);
digitalWrite (s6, On);
digitalWrite (c6, On);
msecPump = msec;
break;
case 'g':
digitalWrite (direct, On);
analogWrite (pulse, 255);
digitalWrite (step, On);
digitalWrite (s7, On);
msecPump = msec;
break;
case 'h':
digitalWrite (direct, On);
analogWrite (pulse, 255);
digitalWrite (step, On);
digitalWrite (s8, On);
msecPump = msec;
break;
}}}